When calling bch_set_feature_* routines, it indicates the super block supports feature set and its version of cache device should at least be BCACHE_SB_VERSION_CDEV_WITH_FEATURES. In order to always keep the cache device super block version being updated, this patch checks whether the super block version is set correctly when calling bch_set_feature_* routines, if not then set the version to BCACHE_SB_VERSION_CDEV_WITH_FEATURES. Signed-off-by: Coly Li <colyli@xxxxxxx> --- bcache.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bcache.h b/bcache.h index 6dcdbb7..46d9683 100644 --- a/bcache.h +++ b/bcache.h @@ -228,6 +228,8 @@ static inline int bch_has_feature_##name(struct cache_sb *sb) \ } \ static inline void bch_set_feature_##name(struct cache_sb *sb) \ { \ + if ((sb)->version < BCACHE_SB_VERSION_CDEV_WITH_FEATURES) \ + (sb)->version = BCACHE_SB_VERSION_CDEV_WITH_FEATURES; \ (sb)->feature_compat |= \ BCH##_FEATURE_COMPAT_##flagname; \ } \ @@ -245,6 +247,8 @@ static inline int bch_has_feature_##name(struct cache_sb *sb) \ } \ static inline void bch_set_feature_##name(struct cache_sb *sb) \ { \ + if ((sb)->version < BCACHE_SB_VERSION_CDEV_WITH_FEATURES) \ + (sb)->version = BCACHE_SB_VERSION_CDEV_WITH_FEATURES; \ (sb)->feature_ro_compat |= \ BCH##_FEATURE_RO_COMPAT_##flagname; \ } \ @@ -262,6 +266,8 @@ static inline int bch_has_feature_##name(struct cache_sb *sb) \ } \ static inline void bch_set_feature_##name(struct cache_sb *sb) \ { \ + if ((sb)->version < BCACHE_SB_VERSION_CDEV_WITH_FEATURES) \ + (sb)->version = BCACHE_SB_VERSION_CDEV_WITH_FEATURES; \ (sb)->feature_incompat |= \ BCH##_FEATURE_INCOMPAT_##flagname; \ } \ -- 2.26.2