forked from Minki/linux
bcache: improve bcache_reboot()
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 <colyli@suse.de> Reviewed-by: Hannes Reinecke <hare@suse.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
63d63b51d7
commit
eb8cbb6df3
@ -2397,10 +2397,19 @@ 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);
|
||||
|
||||
/*
|
||||
* Give an early chance for other kthreads and
|
||||
* kworkers to stop themselves
|
||||
*/
|
||||
schedule();
|
||||
|
||||
/* 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);
|
||||
|
||||
@ -2412,7 +2421,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);
|
||||
|
Loading…
Reference in New Issue
Block a user