Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5caa52af authored by Kent Overstreet's avatar Kent Overstreet
Browse files

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: default avatarKent Overstreet <kmo@daterainc.com>
Cc: linux-stable <stable@vger.kernel.org> # >= v3.10
parent c9502ea4
Loading
Loading
Loading
Loading
+11 −7
Original line number Diff line number Diff line
@@ -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]))
		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);