Commit 57c68d49 authored by Slava Pestov's avatar Slava Pestov Committed by Jiri Slaby

bcache: fix crash with incomplete cache set

commit bf0c55c9 upstream.

Change-Id: I6abde52afe917633480caaf4e2518f42a816d886
Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
parent 2c30554f
...@@ -663,9 +663,13 @@ struct gc_stat { ...@@ -663,9 +663,13 @@ struct gc_stat {
* CACHE_SET_STOPPING always gets set first when we're closing down a cache set; * CACHE_SET_STOPPING always gets set first when we're closing down a cache set;
* we'll continue to run normally for awhile with CACHE_SET_STOPPING set (i.e. * we'll continue to run normally for awhile with CACHE_SET_STOPPING set (i.e.
* flushing dirty data). * flushing dirty data).
*
* CACHE_SET_RUNNING means all cache devices have been registered and journal
* replay is complete.
*/ */
#define CACHE_SET_UNREGISTERING 0 #define CACHE_SET_UNREGISTERING 0
#define CACHE_SET_STOPPING 1 #define CACHE_SET_STOPPING 1
#define CACHE_SET_RUNNING 2
struct cache_set { struct cache_set {
struct closure cl; struct closure cl;
......
...@@ -1235,6 +1235,9 @@ int bch_flash_dev_create(struct cache_set *c, uint64_t size) ...@@ -1235,6 +1235,9 @@ int bch_flash_dev_create(struct cache_set *c, uint64_t size)
if (test_bit(CACHE_SET_STOPPING, &c->flags)) if (test_bit(CACHE_SET_STOPPING, &c->flags))
return -EINTR; return -EINTR;
if (!test_bit(CACHE_SET_RUNNING, &c->flags))
return -EPERM;
u = uuid_find_empty(c); u = uuid_find_empty(c);
if (!u) { if (!u) {
pr_err("Can't create volume, no room for UUID"); pr_err("Can't create volume, no room for UUID");
...@@ -1640,6 +1643,7 @@ static void run_cache_set(struct cache_set *c) ...@@ -1640,6 +1643,7 @@ static void run_cache_set(struct cache_set *c)
flash_devs_run(c); flash_devs_run(c);
set_bit(CACHE_SET_RUNNING, &c->flags);
return; return;
err_unlock_gc: err_unlock_gc:
closure_set_stopped(&c->gc.cl); closure_set_stopped(&c->gc.cl);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment