Commit 6f9414e0 authored by Coly Li's avatar Coly Li Committed by Jens Axboe
Browse files

bcache: check and set sync status on cache's in-memory super block



Currently the cache's sync status is checked and set on cache set's in-
memory partial super block. After removing the embedded struct cache_sb
from cache set and reference cache's in-memory super block from struct
cache_set, the sync status can set and check directly on cache's super
block.

This patch checks and sets the cache sync status directly on cache's
in-memory super block. This is a preparation for later removing embedded
struct cache_sb from struct cache_set.

Signed-off-by: default avatarColy Li <colyli@suse.de>
Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent ebaa1ac1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -361,7 +361,7 @@ retry_invalidate:
		 * new stuff to them:
		 */
		allocator_wait(ca, !atomic_read(&ca->set->prio_blocked));
		if (CACHE_SYNC(&ca->set->sb)) {
		if (CACHE_SYNC(&ca->sb)) {
			/*
			 * This could deadlock if an allocation with a btree
			 * node locked ever blocked - having the btree node
+1 −1
Original line number Diff line number Diff line
@@ -915,7 +915,7 @@ atomic_t *bch_journal(struct cache_set *c,
	if (unlikely(test_bit(CACHE_SET_IO_DISABLE, &c->flags)))
		return NULL;

	if (!CACHE_SYNC(&c->sb))
	if (!CACHE_SYNC(&c->cache->sb))
		return NULL;

	w = journal_wait_for_write(c, bch_keylist_nkeys(keys));
+2 −5
Original line number Diff line number Diff line
@@ -1969,7 +1969,7 @@ static int run_cache_set(struct cache_set *c)
	c->nbuckets = ca->sb.nbuckets;
	set_gc_sectors(c);

	if (CACHE_SYNC(&c->sb)) {
	if (CACHE_SYNC(&c->cache->sb)) {
		struct bkey *k;
		struct jset *j;

@@ -2092,7 +2092,7 @@ static int run_cache_set(struct cache_set *c)
		 * everything is set up - fortunately journal entries won't be
		 * written until the SET_CACHE_SYNC() here:
		 */
		SET_CACHE_SYNC(&c->sb, true);
		SET_CACHE_SYNC(&c->cache->sb, true);

		bch_journal_next(&c->journal);
		bch_journal_meta(c, &cl);
@@ -2138,9 +2138,6 @@ static const char *register_cache_set(struct cache *ca)
			if (c->cache)
				return "duplicate cache set member";

			if (!CACHE_SYNC(&ca->sb))
				SET_CACHE_SYNC(&c->sb, false);

			goto found;
		}

+3 −3
Original line number Diff line number Diff line
@@ -711,7 +711,7 @@ SHOW(__bch_cache_set)
{
	struct cache_set *c = container_of(kobj, struct cache_set, kobj);

	sysfs_print(synchronous,		CACHE_SYNC(&c->sb));
	sysfs_print(synchronous,		CACHE_SYNC(&c->cache->sb));
	sysfs_print(journal_delay_ms,		c->journal_delay_ms);
	sysfs_hprint(bucket_size,		bucket_bytes(c->cache));
	sysfs_hprint(block_size,		block_bytes(c->cache));
@@ -812,8 +812,8 @@ STORE(__bch_cache_set)
	if (attr == &sysfs_synchronous) {
		bool sync = strtoul_or_return(buf);

		if (sync != CACHE_SYNC(&c->sb)) {
			SET_CACHE_SYNC(&c->sb, sync);
		if (sync != CACHE_SYNC(&c->cache->sb)) {
			SET_CACHE_SYNC(&c->cache->sb, sync);
			bcache_write_super(c);
		}
	}