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