bcache: Fix more early shutdown bugs
authorKent Overstreet <kmo@daterainc.com>
Thu, 12 Jun 2014 02:44:49 +0000 (19:44 -0700)
committerBen Hutchings <ben@decadent.org.uk>
Sat, 30 Apr 2016 22:05:55 +0000 (00:05 +0200)
commit d83353b319d47ef8cce82467da6a25c2d558253f upstream.

Signed-off-by: Kent Overstreet <kmo@daterainc.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/md/bcache/super.c

index 70db24e4194786abbc810681d01f79f9c92dd238..00755784b3a1949cccd70ae7df0bdbd12880cd05 100644 (file)
@@ -735,8 +735,6 @@ static void bcache_device_detach(struct bcache_device *d)
 static void bcache_device_attach(struct bcache_device *d, struct cache_set *c,
                                 unsigned id)
 {
-       BUG_ON(test_bit(CACHE_SET_STOPPING, &c->flags));
-
        d->id = id;
        d->c = c;
        c->devices[id] = d;
@@ -1765,6 +1763,7 @@ static const char *register_cache_set(struct cache *ca)
                pr_debug("set version = %llu", c->sb.version);
        }
 
+       kobject_get(&ca->kobj);
        ca->set = c;
        ca->set->cache[ca->sb.nr_this_dev] = ca;
        c->cache_by_alloc[c->caches_loaded++] = ca;
@@ -1882,10 +1881,12 @@ static void register_cache(struct cache_sb *sb, struct page *sb_page,
                goto err;
 
        pr_info("registered cache device %s", bdevname(bdev, name));
+out:
+       kobject_put(&ca->kobj);
        return;
 err:
        pr_notice("error opening %s: %s", bdevname(bdev, name), err);
-       kobject_put(&ca->kobj);
+       goto out;
 }
 
 /* Global interfaces/init */