1 From 0df28cad06eb41cc36bfea69d9c882fb567fd0d6 Mon Sep 17 00:00:00 2001
2 From: Coly Li <colyli@suse.de>
3 Date: Thu, 28 Jan 2021 18:48:47 +0800
4 Subject: bcache: only check feature sets when sb->version >= BCACHE_SB_VERSION_CDEV_WITH_FEATURES
6 From: Coly Li <colyli@suse.de>
8 commit 0df28cad06eb41cc36bfea69d9c882fb567fd0d6 upstream.
10 For super block version < BCACHE_SB_VERSION_CDEV_WITH_FEATURES, it
11 doesn't make sense to check the feature sets. This patch checks
12 super block version in bch_has_feature_* routines, if the version
13 doesn't have feature sets yet, returns 0 (false) to the caller.
15 Fixes: 5342fd425502 ("bcache: set bcache device into read-only mode for BCH_FEATURE_INCOMPAT_OBSO_LARGE_BUCKET")
16 Fixes: ffa470327572 ("bcache: add bucket_size_hi into struct cache_sb_disk for large bucket")
17 Cc: stable@vger.kernel.org # 5.9+
18 Reported-and-tested-by: Bockholdt Arne <a.bockholdt@precitec-optronik.de>
19 Signed-off-by: Coly Li <colyli@suse.de>
20 Signed-off-by: Jens Axboe <axboe@kernel.dk>
21 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
24 drivers/md/bcache/features.h | 6 ++++++
25 1 file changed, 6 insertions(+)
27 --- a/drivers/md/bcache/features.h
28 +++ b/drivers/md/bcache/features.h
30 #define BCH_FEATURE_COMPAT_FUNCS(name, flagname) \
31 static inline int bch_has_feature_##name(struct cache_sb *sb) \
33 + if (sb->version < BCACHE_SB_VERSION_CDEV_WITH_FEATURES) \
35 return (((sb)->feature_compat & \
36 BCH##_FEATURE_COMPAT_##flagname) != 0); \
38 @@ -50,6 +52,8 @@ static inline void bch_clear_feature_##n
39 #define BCH_FEATURE_RO_COMPAT_FUNCS(name, flagname) \
40 static inline int bch_has_feature_##name(struct cache_sb *sb) \
42 + if (sb->version < BCACHE_SB_VERSION_CDEV_WITH_FEATURES) \
44 return (((sb)->feature_ro_compat & \
45 BCH##_FEATURE_RO_COMPAT_##flagname) != 0); \
47 @@ -67,6 +71,8 @@ static inline void bch_clear_feature_##n
48 #define BCH_FEATURE_INCOMPAT_FUNCS(name, flagname) \
49 static inline int bch_has_feature_##name(struct cache_sb *sb) \
51 + if (sb->version < BCACHE_SB_VERSION_CDEV_WITH_FEATURES) \
53 return (((sb)->feature_incompat & \
54 BCH##_FEATURE_INCOMPAT_##flagname) != 0); \