filing on behalf of Ed Goggin @ EMC Description of Problem: The bug is in __init_io() of drivers/scsi/scsi_merge.c. This bug causes partially completed i/os (special requests) to occur in cases where an i/o request consists of only a single segment but multiple buffer headers. This will only happen with an HBA driver which supports DMA clustering. We get hundreds if not thousands of such partially completed i/os to occur by issuing either raw or buffered sd device i/o. The major effect of this bug is to slow down i/o throughput since the linux scsi subsystem appears to handle such partially completed i/os by re-issuing the residual portion of the i/o as a special request. Version-Release number of selected component (if applicable): 2.4.9-31 The patch for this is simple (1 liner) and is attached to this bugreport.
Created attachment 55484 [details] scsi_merge.c patch
This is addressed in a separate fix in the 2.4.19-rc1 kernel at least (I don't know when it was added exactly): * Don't bother with scatter-gather if there is only one segment. */ if (count == 1) { this_count = SCpnt->request.nr_sectors; goto single_segment; } The incorrect code is present in 2.4.18-3 at least.
Dell and EMC would like to see this fixed in a Pensacola errata kernel.
Kyu (ykang) informed us that the patch included in this bugzilla will be added to the next AS errata. Can this be confirmed? -Gary
Yes, this patch has been accepted and we are planning on shipping this in our next AS errata.
This fix is checked in to the AS CVS source tree. We expect it to ship in an errata as soon feasible.
Fixed in kernel 2.4.9-e.9 at least, and 2.4.20-based kernels slated for GinGin. Closing.