aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKent Overstreet <kmo@daterainc.com>2014-03-19 20:49:37 -0400
committerKent Overstreet <kmo@daterainc.com>2014-08-04 18:23:02 -0400
commit5b1016e62f74c53e0330403025954c8d95384c03 (patch)
tree2ca2e94a73af4a5fa51e9dc13d8c68df3d3babf5
parent4c834452aad01531db949414f94f817a86348d59 (diff)
bcache: Fix a bug when detaching
After detaching a backing device from a cache set, a bit wasn't getting reset meaning the second detach wouldn't work correctly. Signed-off-by: Kent Overstreet <kmo@daterainc.com>
-rw-r--r--drivers/md/bcache/super.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
index 926ded8ccbf5..1ea9fa27ee3c 100644
--- a/drivers/md/bcache/super.c
+++ b/drivers/md/bcache/super.c
@@ -927,6 +927,7 @@ static void cached_dev_detach_finish(struct work_struct *w)
927 list_move(&dc->list, &uncached_devices); 927 list_move(&dc->list, &uncached_devices);
928 928
929 clear_bit(BCACHE_DEV_DETACHING, &dc->disk.flags); 929 clear_bit(BCACHE_DEV_DETACHING, &dc->disk.flags);
930 clear_bit(BCACHE_DEV_UNLINK_DONE, &dc->disk.flags);
930 931
931 mutex_unlock(&bch_register_lock); 932 mutex_unlock(&bch_register_lock);
932 933
@@ -1405,9 +1406,11 @@ static void cache_set_flush(struct closure *cl)
1405 if (ca->alloc_thread) 1406 if (ca->alloc_thread)
1406 kthread_stop(ca->alloc_thread); 1407 kthread_stop(ca->alloc_thread);
1407 1408
1408 cancel_delayed_work_sync(&c->journal.work); 1409 if (c->journal.cur) {
1409 /* flush last journal entry if needed */ 1410 cancel_delayed_work_sync(&c->journal.work);
1410 c->journal.work.work.func(&c->journal.work.work); 1411 /* flush last journal entry if needed */
1412 c->journal.work.work.func(&c->journal.work.work);
1413 }
1411 1414
1412 closure_return(cl); 1415 closure_return(cl);
1413} 1416}