On Thu, 11 Oct 2007, RTE wrote:

> On Fri, 31 Aug 2007 22:39:40 +0400, Alan Stern wrote:
> 
> > There's a good chance that your problem isn't caused by anything in the
> > USB stack, but rather by a change somewhere else.
> 
> I did not use Git (150 MB is too much for my unstable internet connection to 
> download at once), but I find the source of my problem.
> The problem is in these files:
> 
> include/scsi/scsi_cmnd.h
> drivers/scsi/scsi_lib.c
> drivers/scsi/sd.c
> 
> I replaced these files in linux-2.6.17-git22 with the same from 
> linux-2.6.17-git21 and errors disappeared.

Okay.  That narrows it down to a single patch, this one:

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=03aba2f79594ca94d159c8bab454de9bcc385b76

I'd like you to try some more experiments to determine what is wrong 
with that patch.  Below is a diagnostic patch which should print some 
useful information in the system log when one of those read errors 
occurs.  This patch should be applied to a working kernel, such as 
2.6.17-git21.

When we have the information from this, I'll send you a comparable 
diagnostic patch for 2.6.17-git22.  The differences ought to indicate 
where the bug lies.

(By the way, I can't easily test-compile this patch on my machine.  
It looks okay, but there might be something wrong with it.)

Alan Stern



--- 2.6.17/drivers/scsi/sd.c0   2007-10-11 15:52:58.000000000 -0400
+++ 2.6.17/drivers/scsi/sd.c    2007-10-11 16:10:34.000000000 -0400
@@ -923,6 +923,8 @@ static void sd_rw_intr(struct scsi_cmnd 
         */
        if (driver_byte(result) != 0 &&
                 sense_valid && !sense_deferred) {
+printk(KERN_INFO "driver_byte %x, sense key %x\n", driver_byte(result),
+sshdr.sense_key);
                switch (sshdr.sense_key) {
                case MEDIUM_ERROR:
                        if (!blk_fs_request(SCpnt->request))
@@ -962,6 +964,9 @@ static void sd_rw_intr(struct scsi_cmnd 
 
                        error_sector &= ~(block_sectors - 1);
                        good_bytes = (error_sector - SCpnt->request->sector) << 
9;
+printk(KERN_INFO "error_sector %d, req_sector %d, resid %d, underflow %d\n",
+(int) error_sector, (int) SCpnt->request->sector, (int) SCpnt->resid,
+(int) SCpnt->underflow);
                        if (good_bytes < 0 || good_bytes >= this_count)
                                good_bytes = 0;
                        break;
@@ -998,6 +1003,9 @@ static void sd_rw_intr(struct scsi_cmnd 
         * how many actual sectors finished, and how many sectors we need
         * to say have failed.
         */
+if (good_bytes != this_count)
+printk(KERN_INFO "Adjusted good_bytes from %d to %d, block_sectors %d\n",
+this_count, good_bytes, (int) block_sectors);
        scsi_io_completion(SCpnt, good_bytes, block_sectors << 9);
 }
 


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Linux-usb-users@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-users

Reply via email to