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: Coly Li <colyli@suse.de>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Coly Li 2020-10-01 14:50:55 +08:00 committed by Jens Axboe
parent ebaa1ac12b
commit 6f9414e0f6
4 changed files with 7 additions and 10 deletions

View File

@ -361,7 +361,7 @@ retry_invalidate:
* new stuff to them: * new stuff to them:
*/ */
allocator_wait(ca, !atomic_read(&ca->set->prio_blocked)); 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 * This could deadlock if an allocation with a btree
* node locked ever blocked - having the btree node * node locked ever blocked - having the btree node

View File

@ -915,7 +915,7 @@ atomic_t *bch_journal(struct cache_set *c,
if (unlikely(test_bit(CACHE_SET_IO_DISABLE, &c->flags))) if (unlikely(test_bit(CACHE_SET_IO_DISABLE, &c->flags)))
return NULL; return NULL;
if (!CACHE_SYNC(&c->sb)) if (!CACHE_SYNC(&c->cache->sb))
return NULL; return NULL;
w = journal_wait_for_write(c, bch_keylist_nkeys(keys)); w = journal_wait_for_write(c, bch_keylist_nkeys(keys));

View File

@ -1969,7 +1969,7 @@ static int run_cache_set(struct cache_set *c)
c->nbuckets = ca->sb.nbuckets; c->nbuckets = ca->sb.nbuckets;
set_gc_sectors(c); set_gc_sectors(c);
if (CACHE_SYNC(&c->sb)) { if (CACHE_SYNC(&c->cache->sb)) {
struct bkey *k; struct bkey *k;
struct jset *j; 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 * everything is set up - fortunately journal entries won't be
* written until the SET_CACHE_SYNC() here: * 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_next(&c->journal);
bch_journal_meta(c, &cl); bch_journal_meta(c, &cl);
@ -2138,9 +2138,6 @@ static const char *register_cache_set(struct cache *ca)
if (c->cache) if (c->cache)
return "duplicate cache set member"; return "duplicate cache set member";
if (!CACHE_SYNC(&ca->sb))
SET_CACHE_SYNC(&c->sb, false);
goto found; goto found;
} }

View File

@ -711,7 +711,7 @@ SHOW(__bch_cache_set)
{ {
struct cache_set *c = container_of(kobj, struct cache_set, kobj); 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_print(journal_delay_ms, c->journal_delay_ms);
sysfs_hprint(bucket_size, bucket_bytes(c->cache)); sysfs_hprint(bucket_size, bucket_bytes(c->cache));
sysfs_hprint(block_size, block_bytes(c->cache)); sysfs_hprint(block_size, block_bytes(c->cache));
@ -812,8 +812,8 @@ STORE(__bch_cache_set)
if (attr == &sysfs_synchronous) { if (attr == &sysfs_synchronous) {
bool sync = strtoul_or_return(buf); bool sync = strtoul_or_return(buf);
if (sync != CACHE_SYNC(&c->sb)) { if (sync != CACHE_SYNC(&c->cache->sb)) {
SET_CACHE_SYNC(&c->sb, sync); SET_CACHE_SYNC(&c->cache->sb, sync);
bcache_write_super(c); bcache_write_super(c);
} }
} }