diff options
author | Kent Overstreet <kmo@daterainc.com> | 2014-03-19 20:49:37 -0400 |
---|---|---|
committer | Kent Overstreet <kmo@daterainc.com> | 2014-08-04 18:23:02 -0400 |
commit | 5b1016e62f74c53e0330403025954c8d95384c03 (patch) | |
tree | 2ca2e94a73af4a5fa51e9dc13d8c68df3d3babf5 | |
parent | 4c834452aad01531db949414f94f817a86348d59 (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.c | 9 |
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 | } |