This patch tries to release mutex bch_register_lock early, to give
chance to stop cache set and bcache device early.

This patch also expends time out of stopping all bcache device from
2 seconds to 10 seconds, because stopping writeback rate update worker
may delay for 5 seconds, 2 seconds is not enough.

After this patch applied, stopping bcache devices during system reboot
or shutdown is very hard to be observed any more.

Signed-off-by: Coly Li <[email protected]>
---
 drivers/md/bcache/super.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
index e988e46a6479..2d377a4a182f 100644
--- a/drivers/md/bcache/super.c
+++ b/drivers/md/bcache/super.c
@@ -2453,10 +2453,13 @@ static int bcache_reboot(struct notifier_block *n, 
unsigned long code, void *x)
                list_for_each_entry_safe(dc, tdc, &uncached_devices, list)
                        bcache_device_stop(&dc->disk);
 
+               mutex_unlock(&bch_register_lock);
+
                /* What's a condition variable? */
                while (1) {
-                       long timeout = start + 2 * HZ - jiffies;
+                       long timeout = start + 10 * HZ - jiffies;
 
+                       mutex_lock(&bch_register_lock);
                        stopped = list_empty(&bch_cache_sets) &&
                                list_empty(&uncached_devices);
 
@@ -2468,7 +2471,6 @@ static int bcache_reboot(struct notifier_block *n, 
unsigned long code, void *x)
 
                        mutex_unlock(&bch_register_lock);
                        schedule_timeout(timeout);
-                       mutex_lock(&bch_register_lock);
                }
 
                finish_wait(&unregister_wait, &wait);
-- 
2.16.4

Reply via email to