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