features.h (1dfc0686c29a9bbd3a446a29f9ccde3dec3bc75a) features.h (b16671e8f493e3df40b1fb0dff4078f391c5099a)
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2#ifndef _BCACHE_FEATURES_H
3#define _BCACHE_FEATURES_H
4
5#include <linux/bcache.h>
6#include <linux/kernel.h>
7#include <linux/types.h>
8
9#define BCH_FEATURE_COMPAT 0
10#define BCH_FEATURE_RO_COMPAT 1
11#define BCH_FEATURE_INCOMPAT 2
12#define BCH_FEATURE_TYPE_MASK 0x03
13
14/* Feature set definition */
15/* Incompat feature set */
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2#ifndef _BCACHE_FEATURES_H
3#define _BCACHE_FEATURES_H
4
5#include <linux/bcache.h>
6#include <linux/kernel.h>
7#include <linux/types.h>
8
9#define BCH_FEATURE_COMPAT 0
10#define BCH_FEATURE_RO_COMPAT 1
11#define BCH_FEATURE_INCOMPAT 2
12#define BCH_FEATURE_TYPE_MASK 0x03
13
14/* Feature set definition */
15/* Incompat feature set */
16#define BCH_FEATURE_INCOMPAT_LARGE_BUCKET 0x0001 /* 32bit bucket size */
16/* 32bit bucket size, obsoleted */
17#define BCH_FEATURE_INCOMPAT_OBSO_LARGE_BUCKET 0x0001
18/* real bucket size is (1 << bucket_size) */
19#define BCH_FEATURE_INCOMPAT_LOG_LARGE_BUCKET_SIZE 0x0002
17
18#define BCH_FEATURE_COMPAT_SUPP 0
19#define BCH_FEATURE_RO_COMPAT_SUPP 0
20
21#define BCH_FEATURE_COMPAT_SUPP 0
22#define BCH_FEATURE_RO_COMPAT_SUPP 0
20#define BCH_FEATURE_INCOMPAT_SUPP BCH_FEATURE_INCOMPAT_LARGE_BUCKET
23#define BCH_FEATURE_INCOMPAT_SUPP (BCH_FEATURE_INCOMPAT_OBSO_LARGE_BUCKET| \
24 BCH_FEATURE_INCOMPAT_LOG_LARGE_BUCKET_SIZE)
21
22#define BCH_HAS_COMPAT_FEATURE(sb, mask) \
23 ((sb)->feature_compat & (mask))
24#define BCH_HAS_RO_COMPAT_FEATURE(sb, mask) \
25 ((sb)->feature_ro_compat & (mask))
26#define BCH_HAS_INCOMPAT_FEATURE(sb, mask) \
27 ((sb)->feature_incompat & (mask))
28

--- 43 unchanged lines hidden (view full) ---

72 BCH##_FEATURE_INCOMPAT_##flagname; \
73} \
74static inline void bch_clear_feature_##name(struct cache_sb *sb) \
75{ \
76 (sb)->feature_incompat &= \
77 ~BCH##_FEATURE_INCOMPAT_##flagname; \
78}
79
25
26#define BCH_HAS_COMPAT_FEATURE(sb, mask) \
27 ((sb)->feature_compat & (mask))
28#define BCH_HAS_RO_COMPAT_FEATURE(sb, mask) \
29 ((sb)->feature_ro_compat & (mask))
30#define BCH_HAS_INCOMPAT_FEATURE(sb, mask) \
31 ((sb)->feature_incompat & (mask))
32

--- 43 unchanged lines hidden (view full) ---

76 BCH##_FEATURE_INCOMPAT_##flagname; \
77} \
78static inline void bch_clear_feature_##name(struct cache_sb *sb) \
79{ \
80 (sb)->feature_incompat &= \
81 ~BCH##_FEATURE_INCOMPAT_##flagname; \
82}
83
80BCH_FEATURE_INCOMPAT_FUNCS(large_bucket, LARGE_BUCKET);
84BCH_FEATURE_INCOMPAT_FUNCS(obso_large_bucket, OBSO_LARGE_BUCKET);
85BCH_FEATURE_INCOMPAT_FUNCS(large_bucket, LOG_LARGE_BUCKET_SIZE);
81
82static inline bool bch_has_unknown_compat_features(struct cache_sb *sb)
83{
84 return ((sb->feature_compat & ~BCH_FEATURE_COMPAT_SUPP) != 0);
85}
86
87static inline bool bch_has_unknown_ro_compat_features(struct cache_sb *sb)
88{

--- 13 unchanged lines hidden ---
86
87static inline bool bch_has_unknown_compat_features(struct cache_sb *sb)
88{
89 return ((sb->feature_compat & ~BCH_FEATURE_COMPAT_SUPP) != 0);
90}
91
92static inline bool bch_has_unknown_ro_compat_features(struct cache_sb *sb)
93{

--- 13 unchanged lines hidden ---