diff options
author | Kent Overstreet <kmo@daterainc.com> | 2014-06-11 22:44:49 -0400 |
---|---|---|
committer | Kent Overstreet <kmo@daterainc.com> | 2014-08-04 18:23:04 -0400 |
commit | d83353b319d47ef8cce82467da6a25c2d558253f (patch) | |
tree | 1918360706a591c805c468cd212e0ecfea4d8887 /drivers/md/bcache | |
parent | 400ffaa2acd72274e2c7293a9724382383bebf3e (diff) |
bcache: Fix more early shutdown bugs
Signed-off-by: Kent Overstreet <kmo@daterainc.com>
Diffstat (limited to 'drivers/md/bcache')
-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 */ |