From mboxrd@z Thu Jan 1 00:00:00 1970
From: bugme-daemon@bugzilla.kernel.org
Subject: [Bug 12207] block reads/writes > 122880 bytes to USB tape drive gives EBUSY
Date: Tue, 23 Dec 2008 07:33:46 -0800 (PST)
Message-ID: <20081223153347.03658108047@picon.linux-foundation.org>
References:
Return-path:
Received: from smtp1.linux-foundation.org ([140.211.169.13]:59319 "EHLO
smtp1.linux-foundation.org" rhost-flags-OK-OK-OK-OK)
by vger.kernel.org with ESMTP id S1750963AbYLWPeT (ORCPT
);
Tue, 23 Dec 2008 10:34:19 -0500
Received: from picon.linux-foundation.org (picon.linux-foundation.org [140.211.169.79])
by smtp1.linux-foundation.org (8.14.2/8.13.5/Debian-3ubuntu1.1) with ESMTP id mBNFXlvp019540
for ; Tue, 23 Dec 2008 07:33:48 -0800
In-Reply-To:
Sender: linux-scsi-owner@vger.kernel.org
List-Id: linux-scsi@vger.kernel.org
To: linux-scsi@vger.kernel.org
http://bugzilla.kernel.org/show_bug.cgi?id=12207
------- Comment #12 from anonymous@kernel-bugs.osdl.org 2008-12-23 07:33 -------
Reply-To: James.Bottomley@HansenPartnership.com
On Tue, 2008-12-23 at 08:55 -0600, James Bottomley wrote:
> > ------- Comment #6 from stern@rowland.harvard.edu 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.