diff mbox series

bcache: only check feature sets when sb->version >= BCACHE_SB_VERSION_CDEV_WITH_FEATURES

Message ID 20210128104847.22773-1-colyli@suse.de (mailing list archive)
State New, archived
Headers show
Series bcache: only check feature sets when sb->version >= BCACHE_SB_VERSION_CDEV_WITH_FEATURES | expand

Commit Message

Coly Li Jan. 28, 2021, 10:48 a.m. UTC
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>
---
 drivers/md/bcache/features.h | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Coly Li Jan. 28, 2021, 10:57 a.m. UTC | #1
On 1/28/21 6:48 PM, Coly Li wrote:
> 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>

Hi Jens,

Please take this patch for v5.11-rc6, this is necessary to go with other
fixes in previous wave.

Thank you in advance.

Coly Li


> ---
>  drivers/md/bcache/features.h | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/md/bcache/features.h b/drivers/md/bcache/features.h
> index 84fc2c0f0101..d1c8fd3977fc 100644
> --- a/drivers/md/bcache/features.h
> +++ b/drivers/md/bcache/features.h
> @@ -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); \
>  } \
>
Jens Axboe Jan. 28, 2021, 2:35 p.m. UTC | #2
On 1/28/21 3:48 AM, Coly Li wrote:
> 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.

Applied, thanks.
diff mbox series

Patch

diff --git a/drivers/md/bcache/features.h b/drivers/md/bcache/features.h
index 84fc2c0f0101..d1c8fd3977fc 100644
--- a/drivers/md/bcache/features.h
+++ b/drivers/md/bcache/features.h
@@ -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); \
 } \