bcache: check and set sync status on cache's in-memory super block
authorColy Li <colyli@suse.de>
Thu, 1 Oct 2020 06:50:55 +0000 (14:50 +0800)
committerJens Axboe <axboe@kernel.dk>
Fri, 2 Oct 2020 20:25:30 +0000 (14:25 -0600)
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>
drivers/md/bcache/alloc.c
drivers/md/bcache/journal.c
drivers/md/bcache/super.c
drivers/md/bcache/sysfs.c

index 1b83109..65fdbde 100644 (file)
@@ -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
index ab0d06e..cd46f33 100644 (file)
@@ -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));
index 1450c06..9632340 100644 (file)
@@ -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;
                }
 
index 4bfe98f..554e3af 100644 (file)
@@ -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);
                }
        }