summaryrefslogtreecommitdiff
path: root/drivers/md/bcache/features.h
diff options
context:
space:
mode:
authorColy Li <colyli@suse.de>2021-01-04 15:41:20 +0800
committerJens Axboe <axboe@kernel.dk>2021-01-09 09:21:03 -0700
commit1dfc0686c29a9bbd3a446a29f9ccde3dec3bc75a (patch)
treee05ae84eb520f5c17721c61690aa9f0e2a92fe72 /drivers/md/bcache/features.h
parentf7b4943dea48a572ad751ce1f18a245d43debe7e (diff)
downloadlinux-1dfc0686c29a9bbd3a446a29f9ccde3dec3bc75a.tar.gz
bcache: check unsupported feature sets for bcache register
This patch adds the check for features which is incompatible for current supported feature sets. Now if the bcache device created by bcache-tools has features that current kernel doesn't support, read_super() will fail with error messoage. E.g. if an unsupported incompatible feature detected, bcache register will fail with dmesg "bcache: register_bcache() error : Unsupported incompatible feature found". Fixes: d721a43ff69c ("bcache: increase super block version for cache device and backing device") Fixes: ffa470327572 ("bcache: add bucket_size_hi into struct cache_sb_disk for large bucket") Signed-off-by: Coly Li <colyli@suse.de> Cc: stable@vger.kernel.org # 5.9+ Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/md/bcache/features.h')
-rw-r--r--drivers/md/bcache/features.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/md/bcache/features.h b/drivers/md/bcache/features.h
index 32c5bbda2f0d..e73724c2b49b 100644
--- a/drivers/md/bcache/features.h
+++ b/drivers/md/bcache/features.h
@@ -79,6 +79,21 @@ static inline void bch_clear_feature_##name(struct cache_sb *sb) \
BCH_FEATURE_INCOMPAT_FUNCS(large_bucket, LARGE_BUCKET);
+static inline bool bch_has_unknown_compat_features(struct cache_sb *sb)
+{
+ return ((sb->feature_compat & ~BCH_FEATURE_COMPAT_SUPP) != 0);
+}
+
+static inline bool bch_has_unknown_ro_compat_features(struct cache_sb *sb)
+{
+ return ((sb->feature_ro_compat & ~BCH_FEATURE_RO_COMPAT_SUPP) != 0);
+}
+
+static inline bool bch_has_unknown_incompat_features(struct cache_sb *sb)
+{
+ return ((sb->feature_incompat & ~BCH_FEATURE_INCOMPAT_SUPP) != 0);
+}
+
int bch_print_cache_set_feature_compat(struct cache_set *c, char *buf, int size);
int bch_print_cache_set_feature_ro_compat(struct cache_set *c, char *buf, int size);
int bch_print_cache_set_feature_incompat(struct cache_set *c, char *buf, int size);