xref: /openbmc/linux/fs/nilfs2/sysfs.h (revision 94ee1d91)
1ae98043fSRyusuke Konishi /* SPDX-License-Identifier: GPL-2.0+ */
2aebe17f6SVyacheslav Dubeyko /*
3*94ee1d91SRyusuke Konishi  * Sysfs support declarations.
4aebe17f6SVyacheslav Dubeyko  *
5aebe17f6SVyacheslav Dubeyko  * Copyright (C) 2005-2014 Nippon Telegraph and Telephone Corporation.
6aebe17f6SVyacheslav Dubeyko  * Copyright (C) 2014 HGST, Inc., a Western Digital Company.
7aebe17f6SVyacheslav Dubeyko  *
8aebe17f6SVyacheslav Dubeyko  * Written by Vyacheslav Dubeyko <Vyacheslav.Dubeyko@hgst.com>
9aebe17f6SVyacheslav Dubeyko  */
10aebe17f6SVyacheslav Dubeyko 
11aebe17f6SVyacheslav Dubeyko #ifndef _NILFS_SYSFS_H
12aebe17f6SVyacheslav Dubeyko #define _NILFS_SYSFS_H
13aebe17f6SVyacheslav Dubeyko 
14aebe17f6SVyacheslav Dubeyko #include <linux/sysfs.h>
15aebe17f6SVyacheslav Dubeyko 
16aebe17f6SVyacheslav Dubeyko #define NILFS_ROOT_GROUP_NAME	"nilfs2"
17aebe17f6SVyacheslav Dubeyko 
18caa05d49SVyacheslav Dubeyko /*
19caa05d49SVyacheslav Dubeyko  * struct nilfs_sysfs_dev_subgroups - device subgroup kernel objects
20caa05d49SVyacheslav Dubeyko  * @sg_superblock_kobj: /sys/fs/<nilfs>/<device>/superblock
21caa05d49SVyacheslav Dubeyko  * @sg_superblock_kobj_unregister: completion state
22abc968dbSVyacheslav Dubeyko  * @sg_segctor_kobj: /sys/fs/<nilfs>/<device>/segctor
23abc968dbSVyacheslav Dubeyko  * @sg_segctor_kobj_unregister: completion state
24a2ecb791SVyacheslav Dubeyko  * @sg_mounted_snapshots_kobj: /sys/fs/<nilfs>/<device>/mounted_snapshots
25a2ecb791SVyacheslav Dubeyko  * @sg_mounted_snapshots_kobj_unregister: completion state
2602a0ba1cSVyacheslav Dubeyko  * @sg_checkpoints_kobj: /sys/fs/<nilfs>/<device>/checkpoints
2702a0ba1cSVyacheslav Dubeyko  * @sg_checkpoints_kobj_unregister: completion state
28ef43d5cdSVyacheslav Dubeyko  * @sg_segments_kobj: /sys/fs/<nilfs>/<device>/segments
29ef43d5cdSVyacheslav Dubeyko  * @sg_segments_kobj_unregister: completion state
30caa05d49SVyacheslav Dubeyko  */
31caa05d49SVyacheslav Dubeyko struct nilfs_sysfs_dev_subgroups {
32caa05d49SVyacheslav Dubeyko 	/* /sys/fs/<nilfs>/<device>/superblock */
33caa05d49SVyacheslav Dubeyko 	struct kobject sg_superblock_kobj;
34caa05d49SVyacheslav Dubeyko 	struct completion sg_superblock_kobj_unregister;
35abc968dbSVyacheslav Dubeyko 
36abc968dbSVyacheslav Dubeyko 	/* /sys/fs/<nilfs>/<device>/segctor */
37abc968dbSVyacheslav Dubeyko 	struct kobject sg_segctor_kobj;
38abc968dbSVyacheslav Dubeyko 	struct completion sg_segctor_kobj_unregister;
39ef43d5cdSVyacheslav Dubeyko 
40a2ecb791SVyacheslav Dubeyko 	/* /sys/fs/<nilfs>/<device>/mounted_snapshots */
41a2ecb791SVyacheslav Dubeyko 	struct kobject sg_mounted_snapshots_kobj;
42a2ecb791SVyacheslav Dubeyko 	struct completion sg_mounted_snapshots_kobj_unregister;
43a2ecb791SVyacheslav Dubeyko 
4402a0ba1cSVyacheslav Dubeyko 	/* /sys/fs/<nilfs>/<device>/checkpoints */
4502a0ba1cSVyacheslav Dubeyko 	struct kobject sg_checkpoints_kobj;
4602a0ba1cSVyacheslav Dubeyko 	struct completion sg_checkpoints_kobj_unregister;
4702a0ba1cSVyacheslav Dubeyko 
48ef43d5cdSVyacheslav Dubeyko 	/* /sys/fs/<nilfs>/<device>/segments */
49ef43d5cdSVyacheslav Dubeyko 	struct kobject sg_segments_kobj;
50ef43d5cdSVyacheslav Dubeyko 	struct completion sg_segments_kobj_unregister;
51caa05d49SVyacheslav Dubeyko };
52caa05d49SVyacheslav Dubeyko 
53aebe17f6SVyacheslav Dubeyko #define NILFS_COMMON_ATTR_STRUCT(name) \
54aebe17f6SVyacheslav Dubeyko struct nilfs_##name##_attr { \
55aebe17f6SVyacheslav Dubeyko 	struct attribute attr; \
56aebe17f6SVyacheslav Dubeyko 	ssize_t (*show)(struct kobject *, struct attribute *, \
57aebe17f6SVyacheslav Dubeyko 			char *); \
58aebe17f6SVyacheslav Dubeyko 	ssize_t (*store)(struct kobject *, struct attribute *, \
59aebe17f6SVyacheslav Dubeyko 			 const char *, size_t); \
60facb9ec5SRyusuke Konishi }
61aebe17f6SVyacheslav Dubeyko 
62aebe17f6SVyacheslav Dubeyko NILFS_COMMON_ATTR_STRUCT(feature);
63aebe17f6SVyacheslav Dubeyko 
64da7141fbSVyacheslav Dubeyko #define NILFS_DEV_ATTR_STRUCT(name) \
65da7141fbSVyacheslav Dubeyko struct nilfs_##name##_attr { \
66da7141fbSVyacheslav Dubeyko 	struct attribute attr; \
67da7141fbSVyacheslav Dubeyko 	ssize_t (*show)(struct nilfs_##name##_attr *, struct the_nilfs *, \
68da7141fbSVyacheslav Dubeyko 			char *); \
69da7141fbSVyacheslav Dubeyko 	ssize_t (*store)(struct nilfs_##name##_attr *, struct the_nilfs *, \
70da7141fbSVyacheslav Dubeyko 			 const char *, size_t); \
71facb9ec5SRyusuke Konishi }
72da7141fbSVyacheslav Dubeyko 
73da7141fbSVyacheslav Dubeyko NILFS_DEV_ATTR_STRUCT(dev);
74ef43d5cdSVyacheslav Dubeyko NILFS_DEV_ATTR_STRUCT(segments);
75a2ecb791SVyacheslav Dubeyko NILFS_DEV_ATTR_STRUCT(mounted_snapshots);
7602a0ba1cSVyacheslav Dubeyko NILFS_DEV_ATTR_STRUCT(checkpoints);
77caa05d49SVyacheslav Dubeyko NILFS_DEV_ATTR_STRUCT(superblock);
78abc968dbSVyacheslav Dubeyko NILFS_DEV_ATTR_STRUCT(segctor);
79da7141fbSVyacheslav Dubeyko 
80a5a7332aSVyacheslav Dubeyko #define NILFS_CP_ATTR_STRUCT(name) \
81a5a7332aSVyacheslav Dubeyko struct nilfs_##name##_attr { \
82a5a7332aSVyacheslav Dubeyko 	struct attribute attr; \
83a5a7332aSVyacheslav Dubeyko 	ssize_t (*show)(struct nilfs_##name##_attr *, struct nilfs_root *, \
84a5a7332aSVyacheslav Dubeyko 			char *); \
85a5a7332aSVyacheslav Dubeyko 	ssize_t (*store)(struct nilfs_##name##_attr *, struct nilfs_root *, \
86a5a7332aSVyacheslav Dubeyko 			 const char *, size_t); \
87facb9ec5SRyusuke Konishi }
88a5a7332aSVyacheslav Dubeyko 
89a5a7332aSVyacheslav Dubeyko NILFS_CP_ATTR_STRUCT(snapshot);
90a5a7332aSVyacheslav Dubeyko 
91aebe17f6SVyacheslav Dubeyko #define NILFS_ATTR(type, name, mode, show, store) \
92aebe17f6SVyacheslav Dubeyko 	static struct nilfs_##type##_attr nilfs_##type##_attr_##name = \
93aebe17f6SVyacheslav Dubeyko 		__ATTR(name, mode, show, store)
94aebe17f6SVyacheslav Dubeyko 
95aebe17f6SVyacheslav Dubeyko #define NILFS_INFO_ATTR(type, name) \
96aebe17f6SVyacheslav Dubeyko 	NILFS_ATTR(type, name, 0444, NULL, NULL)
97aebe17f6SVyacheslav Dubeyko #define NILFS_RO_ATTR(type, name) \
98aebe17f6SVyacheslav Dubeyko 	NILFS_ATTR(type, name, 0444, nilfs_##type##_##name##_show, NULL)
99aebe17f6SVyacheslav Dubeyko #define NILFS_RW_ATTR(type, name) \
100aebe17f6SVyacheslav Dubeyko 	NILFS_ATTR(type, name, 0644, \
101aebe17f6SVyacheslav Dubeyko 		    nilfs_##type##_##name##_show, \
102aebe17f6SVyacheslav Dubeyko 		    nilfs_##type##_##name##_store)
103aebe17f6SVyacheslav Dubeyko 
104aebe17f6SVyacheslav Dubeyko #define NILFS_FEATURE_INFO_ATTR(name) \
105aebe17f6SVyacheslav Dubeyko 	NILFS_INFO_ATTR(feature, name)
106aebe17f6SVyacheslav Dubeyko #define NILFS_FEATURE_RO_ATTR(name) \
107aebe17f6SVyacheslav Dubeyko 	NILFS_RO_ATTR(feature, name)
108aebe17f6SVyacheslav Dubeyko #define NILFS_FEATURE_RW_ATTR(name) \
109aebe17f6SVyacheslav Dubeyko 	NILFS_RW_ATTR(feature, name)
110aebe17f6SVyacheslav Dubeyko 
111da7141fbSVyacheslav Dubeyko #define NILFS_DEV_INFO_ATTR(name) \
112da7141fbSVyacheslav Dubeyko 	NILFS_INFO_ATTR(dev, name)
113da7141fbSVyacheslav Dubeyko #define NILFS_DEV_RO_ATTR(name) \
114da7141fbSVyacheslav Dubeyko 	NILFS_RO_ATTR(dev, name)
115da7141fbSVyacheslav Dubeyko #define NILFS_DEV_RW_ATTR(name) \
116da7141fbSVyacheslav Dubeyko 	NILFS_RW_ATTR(dev, name)
117da7141fbSVyacheslav Dubeyko 
118ef43d5cdSVyacheslav Dubeyko #define NILFS_SEGMENTS_RO_ATTR(name) \
119ef43d5cdSVyacheslav Dubeyko 	NILFS_RO_ATTR(segments, name)
120ef43d5cdSVyacheslav Dubeyko #define NILFS_SEGMENTS_RW_ATTR(name) \
121ef43d5cdSVyacheslav Dubeyko 	NILFS_RW_ATTR(segs_info, name)
122ef43d5cdSVyacheslav Dubeyko 
123a2ecb791SVyacheslav Dubeyko #define NILFS_MOUNTED_SNAPSHOTS_RO_ATTR(name) \
124a2ecb791SVyacheslav Dubeyko 	NILFS_RO_ATTR(mounted_snapshots, name)
125a2ecb791SVyacheslav Dubeyko 
12602a0ba1cSVyacheslav Dubeyko #define NILFS_CHECKPOINTS_RO_ATTR(name) \
12702a0ba1cSVyacheslav Dubeyko 	NILFS_RO_ATTR(checkpoints, name)
12802a0ba1cSVyacheslav Dubeyko #define NILFS_CHECKPOINTS_RW_ATTR(name) \
12902a0ba1cSVyacheslav Dubeyko 	NILFS_RW_ATTR(checkpoints, name)
13002a0ba1cSVyacheslav Dubeyko 
131a5a7332aSVyacheslav Dubeyko #define NILFS_SNAPSHOT_INFO_ATTR(name) \
132a5a7332aSVyacheslav Dubeyko 	NILFS_INFO_ATTR(snapshot, name)
133a5a7332aSVyacheslav Dubeyko #define NILFS_SNAPSHOT_RO_ATTR(name) \
134a5a7332aSVyacheslav Dubeyko 	NILFS_RO_ATTR(snapshot, name)
135a5a7332aSVyacheslav Dubeyko #define NILFS_SNAPSHOT_RW_ATTR(name) \
136a5a7332aSVyacheslav Dubeyko 	NILFS_RW_ATTR(snapshot, name)
137a5a7332aSVyacheslav Dubeyko 
138caa05d49SVyacheslav Dubeyko #define NILFS_SUPERBLOCK_RO_ATTR(name) \
139caa05d49SVyacheslav Dubeyko 	NILFS_RO_ATTR(superblock, name)
140caa05d49SVyacheslav Dubeyko #define NILFS_SUPERBLOCK_RW_ATTR(name) \
141caa05d49SVyacheslav Dubeyko 	NILFS_RW_ATTR(superblock, name)
142caa05d49SVyacheslav Dubeyko 
143abc968dbSVyacheslav Dubeyko #define NILFS_SEGCTOR_INFO_ATTR(name) \
144abc968dbSVyacheslav Dubeyko 	NILFS_INFO_ATTR(segctor, name)
145abc968dbSVyacheslav Dubeyko #define NILFS_SEGCTOR_RO_ATTR(name) \
146abc968dbSVyacheslav Dubeyko 	NILFS_RO_ATTR(segctor, name)
147abc968dbSVyacheslav Dubeyko #define NILFS_SEGCTOR_RW_ATTR(name) \
148abc968dbSVyacheslav Dubeyko 	NILFS_RW_ATTR(segctor, name)
149abc968dbSVyacheslav Dubeyko 
150aebe17f6SVyacheslav Dubeyko #define NILFS_FEATURE_ATTR_LIST(name) \
151aebe17f6SVyacheslav Dubeyko 	(&nilfs_feature_attr_##name.attr)
152da7141fbSVyacheslav Dubeyko #define NILFS_DEV_ATTR_LIST(name) \
153da7141fbSVyacheslav Dubeyko 	(&nilfs_dev_attr_##name.attr)
154ef43d5cdSVyacheslav Dubeyko #define NILFS_SEGMENTS_ATTR_LIST(name) \
155ef43d5cdSVyacheslav Dubeyko 	(&nilfs_segments_attr_##name.attr)
156a2ecb791SVyacheslav Dubeyko #define NILFS_MOUNTED_SNAPSHOTS_ATTR_LIST(name) \
157a2ecb791SVyacheslav Dubeyko 	(&nilfs_mounted_snapshots_attr_##name.attr)
15802a0ba1cSVyacheslav Dubeyko #define NILFS_CHECKPOINTS_ATTR_LIST(name) \
15902a0ba1cSVyacheslav Dubeyko 	(&nilfs_checkpoints_attr_##name.attr)
160a5a7332aSVyacheslav Dubeyko #define NILFS_SNAPSHOT_ATTR_LIST(name) \
161a5a7332aSVyacheslav Dubeyko 	(&nilfs_snapshot_attr_##name.attr)
162caa05d49SVyacheslav Dubeyko #define NILFS_SUPERBLOCK_ATTR_LIST(name) \
163caa05d49SVyacheslav Dubeyko 	(&nilfs_superblock_attr_##name.attr)
164abc968dbSVyacheslav Dubeyko #define NILFS_SEGCTOR_ATTR_LIST(name) \
165abc968dbSVyacheslav Dubeyko 	(&nilfs_segctor_attr_##name.attr)
166aebe17f6SVyacheslav Dubeyko 
167aebe17f6SVyacheslav Dubeyko #endif /* _NILFS_SYSFS_H */
168