commit 36bd8bfc71a753c545134c627c8c304bf91cb234 Author: Dan Williams Date: Mon Jul 9 19:33:45 2012 -0700 [SCSI] Revert "[SCSI] fix async probe regression" This reverts commit 43a8d39d0137612c336aa8bbb2cb886a79772ffb. Commit 43a8d39d fixed the fact that wait_for_device_probe() was unable to flush sd probe work. Now that sd probe work is once again flushable via wait_for_device_probe() this workaround is no longer needed. Signed-off-by: Dan Williams Tested-by: Eldad Zack Signed-off-by: James Bottomley commit 758da9dc2be8925571ae8fcf5cf1a763edbb3d08 Author: Dan Williams Date: Mon Jul 9 19:33:40 2012 -0700 [SCSI] cleanup usages of scsi_complete_async_scans Now that scsi registers its async scan work with the async subsystem, wait_for_device_probe() is sufficient for ensuring all scanning is complete. Signed-off-by: Dan Williams Cc: Rafael J. Wysocki Tested-by: Eldad Zack Signed-off-by: James Bottomley commit 485e82a03725ccb6205c0043f11993dcc3e47f0b Author: Dan Williams Date: Mon Jul 9 19:33:35 2012 -0700 [SCSI] queue async scan work to an async_schedule domain This is preparation to enable async_synchronize_full() to be used as a replacement for scsi_complete_async_scans(), i.e. to stop leaking scsi internal details where they are not needed. Signed-off-by: Dan Williams Tested-by: Eldad Zack Signed-off-by: James Bottomley commit 7e6043ea251ab8fc516f3b24b391646c05386fbb Author: Dan Williams Date: Mon Jul 9 19:33:30 2012 -0700 [SCSI] async: make async_synchronize_full() flush all work regardless of domain In response to an async related regression James noted: "My theory is that this is an init problem: The assumption in a lot of our code is that async_synchronize_full() waits for everything ... even the domain specific async schedules, which isn't true." ...so make this assumption true. Each domain, including the default one, registers itself on a global domain list when work is scheduled. Once all entries complete it exits that list. Waiting for the list to be empty syncs all in-flight work across all domains. Domains can opt-out of global syncing if they are declared as exclusive ASYNC_DOMAIN_EXCLUSIVE(). All stack-based domains have been declared exclusive since the domain may go out of scope as soon as the last work item completes. Statically declared domains are mostly ok, but async_unregister_domain() is there to close any theoretical races with pending async_synchronize_full waiters at module removal time. Signed-off-by: Dan Williams Acked-by: Arjan van de Ven Reported-by: Meelis Roos Reported-by: Eldad Zack Tested-by: Eldad Zack Signed-off-by: James Bottomley commit d463fcc0487a3a5f833c030a51efc260ca960140 Author: Dan Williams Date: Mon Jul 9 19:33:25 2012 -0700 [SCSI] async: introduce 'async_domain' type This is in preparation for teaching async_synchronize_full() to sync all pending async work, and not just on the async_running domain. This conversion is functionally equivalent, just embedding the existing list in a new async_domain type. The .registered attribute is used in a later patch to distinguish between domains that want to be flushed by async_synchronize_full() versus those that only expect async_synchronize_{full|cookie}_domain to be used for flushing. [jejb: add async.h to scsi_priv.h for struct async_domain] Signed-off-by: Dan Williams Acked-by: Arjan van de Ven Acked-by: Mark Brown Tested-by: Eldad Zack Signed-off-by: James Bottomley