mirror of
https://github.com/torvalds/linux.git
synced 2024-12-18 09:02:17 +00:00
bcache: Shutdown fix
Stopping a cache set is supposed to make it stop attached backing devices, but somewhere along the way that code got lost. Fixing this mainly has the effect of fixing our reboot notifier. Signed-off-by: Kent Overstreet <kmo@daterainc.com> Cc: linux-stable <stable@vger.kernel.org> # >= v3.10
This commit is contained in:
parent
c9502ea442
commit
5caa52afc5
@ -1354,18 +1354,22 @@ static void cache_set_flush(struct closure *cl)
|
||||
static void __cache_set_unregister(struct closure *cl)
|
||||
{
|
||||
struct cache_set *c = container_of(cl, struct cache_set, caching);
|
||||
struct cached_dev *dc, *t;
|
||||
struct cached_dev *dc;
|
||||
size_t i;
|
||||
|
||||
mutex_lock(&bch_register_lock);
|
||||
|
||||
if (test_bit(CACHE_SET_UNREGISTERING, &c->flags))
|
||||
list_for_each_entry_safe(dc, t, &c->cached_devs, list)
|
||||
bch_cached_dev_detach(dc);
|
||||
|
||||
for (i = 0; i < c->nr_uuids; i++)
|
||||
if (c->devices[i] && UUID_FLASH_ONLY(&c->uuids[i]))
|
||||
bcache_device_stop(c->devices[i]);
|
||||
if (c->devices[i]) {
|
||||
if (!UUID_FLASH_ONLY(&c->uuids[i]) &&
|
||||
test_bit(CACHE_SET_UNREGISTERING, &c->flags)) {
|
||||
dc = container_of(c->devices[i],
|
||||
struct cached_dev, disk);
|
||||
bch_cached_dev_detach(dc);
|
||||
} else {
|
||||
bcache_device_stop(c->devices[i]);
|
||||
}
|
||||
}
|
||||
|
||||
mutex_unlock(&bch_register_lock);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user