diff options
-rw-r--r-- | drivers/md/bcache/super.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c index 00cc42550f34..29dd1e8ae19f 100644 --- a/drivers/md/bcache/super.c +++ b/drivers/md/bcache/super.c | |||
@@ -733,8 +733,6 @@ static void bcache_device_detach(struct bcache_device *d) | |||
733 | static void bcache_device_attach(struct bcache_device *d, struct cache_set *c, | 733 | static void bcache_device_attach(struct bcache_device *d, struct cache_set *c, |
734 | unsigned id) | 734 | unsigned id) |
735 | { | 735 | { |
736 | BUG_ON(test_bit(CACHE_SET_STOPPING, &c->flags)); | ||
737 | |||
738 | d->id = id; | 736 | d->id = id; |
739 | d->c = c; | 737 | d->c = c; |
740 | c->devices[id] = d; | 738 | c->devices[id] = d; |
@@ -1771,6 +1769,7 @@ found: | |||
1771 | pr_debug("set version = %llu", c->sb.version); | 1769 | pr_debug("set version = %llu", c->sb.version); |
1772 | } | 1770 | } |
1773 | 1771 | ||
1772 | kobject_get(&ca->kobj); | ||
1774 | ca->set = c; | 1773 | ca->set = c; |
1775 | ca->set->cache[ca->sb.nr_this_dev] = ca; | 1774 | ca->set->cache[ca->sb.nr_this_dev] = ca; |
1776 | c->cache_by_alloc[c->caches_loaded++] = ca; | 1775 | c->cache_by_alloc[c->caches_loaded++] = ca; |
@@ -1888,10 +1887,12 @@ static void register_cache(struct cache_sb *sb, struct page *sb_page, | |||
1888 | goto err; | 1887 | goto err; |
1889 | 1888 | ||
1890 | pr_info("registered cache device %s", bdevname(bdev, name)); | 1889 | pr_info("registered cache device %s", bdevname(bdev, name)); |
1890 | out: | ||
1891 | kobject_put(&ca->kobj); | ||
1891 | return; | 1892 | return; |
1892 | err: | 1893 | err: |
1893 | pr_notice("error opening %s: %s", bdevname(bdev, name), err); | 1894 | pr_notice("error opening %s: %s", bdevname(bdev, name), err); |
1894 | kobject_put(&ca->kobj); | 1895 | goto out; |
1895 | } | 1896 | } |
1896 | 1897 | ||
1897 | /* Global interfaces/init */ | 1898 | /* Global interfaces/init */ |