Description of problem: Note: I have also reported this upstream at: http://bugzilla.kernel.org/show_bug.cgi?id=8426 CD/DVD drive on some of our high-end HP Integrity servers (superdome, rx8620, rx8640) systems has slowed down more than 150x. I have only seen this on ia64 however it is likely going to affect other systems using the same adapter and CD/DVD drive. As a simple benchmark I mounted the Fedora7 test4 DVD and ran the following: time cat kernel-2.6.20-1.3088.fc7.ia64.rpm > /dev/null recent kernels take approx 10 minutes to complete. This causes installs to take many hours and eventually fail with SCSI errors. Was introduced by this commit: commit 5a9c47b1344b514758d5d7f193c672850390cc36 Author: Eric Moore <eric.moore> Date: Mon Jan 29 09:43:17 2007 -0700 [SCSI] fusion - move SPI API over to mptspi.c Move some functions that only apply to the mptspi module over from mptscsih. Signed-off-by: Eric Moore <Eric.Moore> Signed-off-by: James Bottomley <James.Bottomley> I backed out this patch against the current HEAD and DVD drive performance is back to normal. I have not yet looked into this to determine exactly what in this patch caused the issue. Version-Release number of selected component (if applicable): fedora7 - test4 kernel-2.6.20-1.3088.fc7 How reproducible: 100% Steps to Reproduce: 1. 2. 3. Actual results: Expected results: Additional info:
http://marc.info/?l=linux-scsi&m=117857313402574&q=raw ========================================================================== Patch for: http://bugzilla.kernel.org/show_bug.cgi?id=8426 A recent code cleanup that moved code from mptscsih to mptspi inadvertently change the order some code was called. This caused a massive slowdown (of 150x to 300x) on the CD/DVD drive on the high-end HP Integrity servers. Signed-off-by: Doug Chapman <doug.chapman> diff --git a/drivers/message/fusion/mptspi.c b/drivers/message/fusion/mptspi.c index 85f21b5..2eb5741 100644 --- a/drivers/message/fusion/mptspi.c +++ b/drivers/message/fusion/mptspi.c @@ -726,13 +726,15 @@ static int mptspi_slave_configure(struct scsi_device *sdev) struct _MPT_SCSI_HOST *hd = (struct _MPT_SCSI_HOST *)sdev->host->hostdata; VirtTarget *vtarget = scsi_target(sdev)->hostdata; - int ret = mptscsih_slave_configure(sdev); + int ret; + + mptspi_initTarget(hd, vtarget, sdev); + + ret = mptscsih_slave_configure(sdev); if (ret) return ret; - mptspi_initTarget(hd, vtarget, sdev); - ddvprintk((MYIOC_s_INFO_FMT "id=%d min_period=0x%02x" " max_offset=0x%02x max_width=%d\n", hd->ioc->name, sdev->id, spi_min_period(scsi_target(sdev)),
This has been resolved upstream several months ago, closing.