Patch "scsi: ses: don't ask for diagnostic pages repeatedly during probe" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
scsi: ses: don't ask for diagnostic pages repeatedly during probe
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
scsi-ses-don-t-ask-for-diagnostic-pages-repeatedly-during-probe.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Sun Mar 18 16:55:33 CET 2018
From: Li Dongyang <[email protected]>
Date: Tue, 14 Nov 2017 10:48:04 +1100
Subject: scsi: ses: don't ask for diagnostic pages repeatedly during probe
From: Li Dongyang <[email protected]>
[ Upstream commit 9c0a50022b8ac7e863e6ec8342fa476fe5d1d75c ]
We are testing if there is a match with the ses device in a loop by calling ses_match_to_enclosure(), which will issue scsi receive diagnostics commands to the ses device for every device on the same host. On one of our boxes with 840 disks, it takes a long time to load the driver:
[root@g1b-oss06 ~]# time modprobe ses
real 40m48.247s
user 0m0.001s
sys 0m0.196s
With the patch:
[root@g1b-oss06 ~]# time modprobe ses
real 0m17.915s
user 0m0.008s
sys 0m0.053s
Note that we still need to refresh page 10 when we see a new disk to create the link.
--- drivers/scsi/ses.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
drivers/scsi/ses.c +7 -4
@@ -578,13 +578,16 @@ static void ses_enclosure_data_process(s }static void ses_match_to_enclosure (struct enclosure_device *edev, -struct scsi_device *sdev) +struct scsi_device *sdev, +int refresh) { +struct scsi_device *edev_sdev =to_scsi_device (edev->edev.parent);struct efd efd = { .addr =0 , }; -ses_enclosure_data_process (edev,to_scsi_device (edev->edev.parent),0 ); +if (refresh) +ses_enclosure_data_process (edev, edev_sdev,0 );if (scsi_is_sas_rphy (sdev->sdev_target->dev.parent)) efd.addr =sas_get_address (sdev);
@@ -615,7 +618,7 @@ static int ses_intf_add(struct device *cstruct enclosure_device *prev =NULL ;while ((edev =enclosure_find (&sdev->host->shost_gendev, prev)) !=NULL ) { -ses_match_to_enclosure (edev, sdev); +ses_match_to_enclosure (edev, sdev,1 ); prev = edev; }return -ENODEV ;
@@ -727,7 +730,7 @@ static int ses_intf_add(struct device *cshost_for_each_device (tmp_sdev, sdev->host) {if (tmp_sdev->lun !=0 ||scsi_device_enclosure (tmp_sdev))continue ; -ses_match_to_enclosure (edev, tmp_sdev); +ses_match_to_enclosure (edev, tmp_sdev,0 ); }return 0 ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/scsi-ses-don-t-ask-for-diagnostic-pages-repeatedly-during-probe.patch