bcache: only check feature sets when sb->version >= BCACHE_SB_VERSION_CDEV_WITH_FEATURES
authorColy Li <colyli@suse.de>
Thu, 28 Jan 2021 10:48:47 +0000 (18:48 +0800)
committerJens Axboe <axboe@kernel.dk>
Thu, 28 Jan 2021 14:35:07 +0000 (07:35 -0700)
For super block version < BCACHE_SB_VERSION_CDEV_WITH_FEATURES, it
doesn't make sense to check the feature sets. This patch checks
super block version in bch_has_feature_* routines, if the version
doesn't have feature sets yet, returns 0 (false) to the caller.

Fixes: 5342fd425502 ("bcache: set bcache device into read-only mode for BCH_FEATURE_INCOMPAT_OBSO_LARGE_BUCKET")
Fixes: ffa470327572 ("bcache: add bucket_size_hi into struct cache_sb_disk for large bucket")
Cc: stable@vger.kernel.org # 5.9+
Reported-and-tested-by: Bockholdt Arne <a.bockholdt@precitec-optronik.de>
Signed-off-by: Coly Li <colyli@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/md/bcache/features.h

index 84fc2c0..d1c8fd3 100644 (file)
@@ -33,6 +33,8 @@
 #define BCH_FEATURE_COMPAT_FUNCS(name, flagname) \
 static inline int bch_has_feature_##name(struct cache_sb *sb) \
 { \
+       if (sb->version < BCACHE_SB_VERSION_CDEV_WITH_FEATURES) \
+               return 0; \
        return (((sb)->feature_compat & \
                BCH##_FEATURE_COMPAT_##flagname) != 0); \
 } \
@@ -50,6 +52,8 @@ static inline void bch_clear_feature_##name(struct cache_sb *sb) \
 #define BCH_FEATURE_RO_COMPAT_FUNCS(name, flagname) \
 static inline int bch_has_feature_##name(struct cache_sb *sb) \
 { \
+       if (sb->version < BCACHE_SB_VERSION_CDEV_WITH_FEATURES) \
+               return 0; \
        return (((sb)->feature_ro_compat & \
                BCH##_FEATURE_RO_COMPAT_##flagname) != 0); \
 } \
@@ -67,6 +71,8 @@ static inline void bch_clear_feature_##name(struct cache_sb *sb) \
 #define BCH_FEATURE_INCOMPAT_FUNCS(name, flagname) \
 static inline int bch_has_feature_##name(struct cache_sb *sb) \
 { \
+       if (sb->version < BCACHE_SB_VERSION_CDEV_WITH_FEATURES) \
+               return 0; \
        return (((sb)->feature_incompat & \
                BCH##_FEATURE_INCOMPAT_##flagname) != 0); \
 } \