On Tue, Mar 15, 2016 at 08:19:42AM +0100, Hannes Reinecke wrote:
> On larger installations it is useful to disable automatic LUN
> scanning, and only add the required LUNs via udev rules.
> This can speed up bootup dramatically.
>
> This patch introduces a new scan module parameter value 'manual',
> which works like 'none', but can be overriden by setting the 'rescan'
> value from scsi_scan_target to 'SCSI_SCAN_MANUAL'.
> And it updates all relevant callers to set the 'rescan' value
> to 'SCSI_SCAN_MANUAL' if invoked via the 'scan' option in sysfs.
>
> Signed-off-by: Hannes Reinecke <[email protected]>
> ---
> drivers/scsi/scsi_scan.c | 25 ++++++++++++++++++-------
> drivers/scsi/scsi_sysfs.c | 3 ++-
> drivers/scsi/scsi_transport_fc.c | 3 ++-
> drivers/scsi/scsi_transport_iscsi.c | 2 +-
> drivers/scsi/scsi_transport_sas.c | 4 ++--
> include/scsi/scsi_device.h | 6 ++++++
> 6 files changed, 31 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
> index 97074c9..54dc517 100644
> --- a/drivers/scsi/scsi_scan.c
> +++ b/drivers/scsi/scsi_scan.c
> @@ -96,10 +96,13 @@ MODULE_PARM_DESC(max_luns,
> #define SCSI_SCAN_TYPE_DEFAULT "sync"
> #endif
>
> -char scsi_scan_type[6] = SCSI_SCAN_TYPE_DEFAULT;
> +char scsi_scan_type[7] = SCSI_SCAN_TYPE_DEFAULT;
>
> -module_param_string(scan, scsi_scan_type, sizeof(scsi_scan_type), S_IRUGO);
> -MODULE_PARM_DESC(scan, "sync, async or none");
> +module_param_string(scan, scsi_scan_type, sizeof(scsi_scan_type),
> + S_IRUGO|S_IWUSR);
> +MODULE_PARM_DESC(scan, "sync, async, manual, or none. "
> + "Setting to 'manual' disables automatic scanning, but allows "
> + "for manual device scan via the 'scan' sysfs attribute.");
>
> static unsigned int scsi_inq_timeout = SCSI_TIMEOUT/HZ + 18;
>
> @@ -1040,7 +1043,8 @@ static unsigned char *scsi_inq_str(unsigned char *buf,
> unsigned char *inq,
> * @lun: LUN of target device
> * @bflagsp: store bflags here if not NULL
> * @sdevp: probe the LUN corresponding to this scsi_device
> - * @rescan: if nonzero skip some code only needed on first scan
> + * @rescan: if greater than SCSI_SCAN_NONE skip some code only
> + * needed on first scan
please pass the actual enum to all the functions taking this
recan argument so that we can do proper type checking on it.
> + if (rescan > SCSI_SCAN_NONE || !scsi_device_created(sdev)) {
And always check just check for equality instead of doing BT / LT on
enum values.
>
> +enum scsi_scan_mode {
> + SCSI_SCAN_NONE = 0,
and this could use a better name. SCSI_SCAN_INITAL maybe?
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html