[Bug 12207] block reads/writes > 122880 bytes to USB tape drive gives EBUSY

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



http://bugzilla.kernel.org/show_bug.cgi?id=12207





------- Comment #12 from anonymous@xxxxxxxxxxxxxxxxxxxx  2008-12-23 07:33 -------
Reply-To: James.Bottomley@xxxxxxxxxxxxxxxxxxxxx

On Tue, 2008-12-23 at 08:55 -0600, James Bottomley wrote:
> > ------- Comment #6 from stern@xxxxxxxxxxxxxxxxxxx  2008-12-23 05:59 -------
> > You can change the max_sectors setting through sysfs.  However the last time I
> > looked, the block layer limited max_sectors to 512 KB or something on that
> > order, so you can't get too much improvement.
> > 
> > Why is a limit of 120 KB unreasonably small?  All it means is that you have to
> > use more system calls to transfer the same amount of data.  Is anything wrong
> > with that?
> 
> Tapes need large block sizes.
> 
> We can accommodate both:  Just check for TYPE_TAPE in the
> slave_configure() and bump the limit back up.  Any USB tape that doesn't
> do large block transfers will be truly broken.

Following up on this, does this fix it?

I notice that Linus was the one who actually committed this change in
2.6.0-test10, so it's been in the entire 2.6 release.

James

---

diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
index 09779f6..ae4b01c 100644
--- a/drivers/usb/storage/scsiglue.c
+++ b/drivers/usb/storage/scsiglue.c
@@ -127,7 +127,12 @@ static int slave_configure(struct scsi_device *sdev)
                if (sdev->request_queue->max_sectors > max_sectors)
                        blk_queue_max_sectors(sdev->request_queue,
                                              max_sectors);
-       }
+       } else if (sdev->type == TYPE_TAPE)
+               /* Tapes need much higher max sector transfers, so just
+                * raise it to the maximum possible and let the queue
+                * segment size sort out the real limit
+                */
+               blk_queue_max_sectors(sdev->request_queue, 0xFFFF);

        /* We can't put these settings in slave_alloc() because that gets
         * called before the device type is known.  Consequently these


-- 
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux