alistair23-linux/drivers/scsi/scsi_wait_scan.c
James Bottomley 1ff2f40305 [SCSI] fix scsi_wait_scan
Commit  c751085943
Author: Rafael J. Wysocki <rjw@sisk.pl>
Date:   Sun Apr 12 20:06:56 2009 +0200

    PM/Hibernate: Wait for SCSI devices scan to complete during resume

Broke the scsi_wait_scan module in 2.6.30.  Apparently debian still uses it so
fix it and backport to stable before removing it in 3.6.

The breakage is caused because the function template in
include/scsi/scsi_scan.h is defined to be a nop unless SCSI is built in.
That means that in the modular case (which is every distro), the
scsi_wait_scan module does a simple async_synchronize_full() instead of
waiting for scans.

Cc: <stable@vger.kernel.org>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
2012-05-30 13:46:37 +04:00

43 lines
1 KiB
C

/*
* scsi_wait_scan.c
*
* Copyright (C) 2006 James Bottomley <James.Bottomley@SteelEye.com>
*
* This is a simple module to wait until all the async scans are
* complete. The idea is to use it in initrd/initramfs scripts. You
* modprobe it after all the modprobes of the root SCSI drivers and it
* will wait until they have all finished scanning their busses before
* allowing the boot to proceed
*/
#include <linux/module.h>
#include <linux/device.h>
#include "scsi_priv.h"
static int __init wait_scan_init(void)
{
/*
* First we need to wait for device probing to finish;
* the drivers we just loaded might just still be probing
* and might not yet have reached the scsi async scanning
*/
wait_for_device_probe();
/*
* and then we wait for the actual asynchronous scsi scan
* to finish.
*/
scsi_complete_async_scans();
return 0;
}
static void __exit wait_scan_exit(void)
{
}
MODULE_DESCRIPTION("SCSI wait for scans");
MODULE_AUTHOR("James Bottomley");
MODULE_LICENSE("GPL");
late_initcall(wait_scan_init);
module_exit(wait_scan_exit);