Red Hat Bugzilla – Bug 238931
massive slowdown on SCSI CD/DVD drive connected to mptspi driver
Last modified: 2007-12-17 22:57:10 EST
Description of problem:
Note: I have also reported this upstream at:
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
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:
Author: Eric Moore <email@example.com>
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@lsi.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
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
Steps to Reproduce:
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 <firstname.lastname@example.org>
diff --git a/drivers/message/fusion/mptspi.c b/drivers/message/fusion/mptspi.c
index 85f21b5..2eb5741 100644
@@ -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);
- 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,
This has been resolved upstream several months ago, closing.