2013-11-01 21:06:57 +04:00
# ifndef _BTRFS_SYSFS_H_
# define _BTRFS_SYSFS_H_
2014-02-05 18:36:18 +04:00
/*
* Data exported through sysfs
*/
extern u64 btrfs_debugfs_test ;
2013-11-01 21:06:57 +04:00
enum btrfs_feature_set {
FEAT_COMPAT ,
FEAT_COMPAT_RO ,
FEAT_INCOMPAT ,
FEAT_MAX
} ;
# define __INIT_KOBJ_ATTR(_name, _mode, _show, _store) \
{ \
. attr = { . name = __stringify ( _name ) , . mode = _mode } , \
. show = _show , \
. store = _store , \
}
2013-11-01 21:06:58 +04:00
# define BTRFS_ATTR_RW(_name, _mode, _show, _store) \
2014-07-30 16:04:08 +04:00
static struct kobj_attribute btrfs_attr_ # # _name = \
2013-11-01 21:06:58 +04:00
__INIT_KOBJ_ATTR ( _name , _mode , _show , _store )
2014-07-30 16:04:08 +04:00
# define BTRFS_ATTR(_name, _show) \
BTRFS_ATTR_RW ( _name , 0444 , _show , NULL )
2013-11-01 21:06:58 +04:00
# define BTRFS_ATTR_PTR(_name) (&btrfs_attr_##_name.attr)
2013-11-01 21:07:04 +04:00
# define BTRFS_RAID_ATTR(_name, _show) \
2014-07-30 16:04:08 +04:00
static struct kobj_attribute btrfs_raid_attr_ # # _name = \
2013-11-01 21:07:04 +04:00
__INIT_KOBJ_ATTR ( _name , 0444 , _show , NULL )
2014-07-30 16:04:08 +04:00
2013-11-01 21:07:04 +04:00
# define BTRFS_RAID_ATTR_PTR(_name) (&btrfs_raid_attr_##_name.attr)
2013-11-01 21:06:57 +04:00
struct btrfs_feature_attr {
struct kobj_attribute kobj_attr ;
enum btrfs_feature_set feature_set ;
u64 feature_bit ;
} ;
# define BTRFS_FEAT_ATTR(_name, _feature_set, _prefix, _feature_bit) \
static struct btrfs_feature_attr btrfs_attr_ # # _name = { \
. kobj_attr = __INIT_KOBJ_ATTR ( _name , S_IRUGO , \
2013-11-01 21:07:01 +04:00
btrfs_feature_attr_show , \
btrfs_feature_attr_store ) , \
2013-11-01 21:06:57 +04:00
. feature_set = _feature_set , \
. feature_bit = _prefix # # _ # # _feature_bit , \
}
# define BTRFS_FEAT_ATTR_PTR(_name) (&btrfs_attr_##_name.kobj_attr.attr)
# define BTRFS_FEAT_ATTR_COMPAT(name, feature) \
BTRFS_FEAT_ATTR ( name , FEAT_COMPAT , BTRFS_FEATURE_COMPAT , feature )
# define BTRFS_FEAT_ATTR_COMPAT_RO(name, feature) \
BTRFS_FEAT_ATTR ( name , FEAT_COMPAT_RO , BTRFS_FEATURE_COMPAT , feature )
# define BTRFS_FEAT_ATTR_INCOMPAT(name, feature) \
BTRFS_FEAT_ATTR ( name , FEAT_INCOMPAT , BTRFS_FEATURE_INCOMPAT , feature )
/* convert from attribute */
# define to_btrfs_feature_attr(a) \
container_of ( a , struct btrfs_feature_attr , kobj_attr )
2013-11-01 21:06:58 +04:00
# define attr_to_btrfs_attr(a) container_of(a, struct kobj_attribute, attr)
# define attr_to_btrfs_feature_attr(a) \
to_btrfs_feature_attr ( attr_to_btrfs_attr ( a ) )
2013-11-01 21:07:02 +04:00
char * btrfs_printable_features ( enum btrfs_feature_set set , u64 flags ) ;
extern const char * const btrfs_feature_set_names [ 3 ] ;
2013-11-01 21:07:04 +04:00
extern struct kobj_type space_info_ktype ;
extern struct kobj_type btrfs_raid_ktype ;
2014-06-03 07:36:01 +04:00
int btrfs_kobj_add_device ( struct btrfs_fs_info * fs_info ,
struct btrfs_device * one_device ) ;
2014-06-03 07:36:00 +04:00
int btrfs_kobj_rm_device ( struct btrfs_fs_info * fs_info ,
struct btrfs_device * one_device ) ;
2013-11-01 21:06:57 +04:00
# endif /* _BTRFS_SYSFS_H_ */