Blame view

fs/nilfs2/sysfs.h 5.66 KB
aebe17f68   Vyacheslav Dubeyko   nilfs2: add /sys/...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  /*
   * sysfs.h - sysfs support declarations.
   *
   * Copyright (C) 2005-2014 Nippon Telegraph and Telephone Corporation.
   * Copyright (C) 2014 HGST, Inc., a Western Digital Company.
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation; either version 2 of the License, or
   * (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
   * Written by Vyacheslav Dubeyko <Vyacheslav.Dubeyko@hgst.com>
   */
  
  #ifndef _NILFS_SYSFS_H
  #define _NILFS_SYSFS_H
  
  #include <linux/sysfs.h>
  
  #define NILFS_ROOT_GROUP_NAME	"nilfs2"
caa05d49d   Vyacheslav Dubeyko   nilfs2: add /sys/...
26
27
28
29
  /*
   * struct nilfs_sysfs_dev_subgroups - device subgroup kernel objects
   * @sg_superblock_kobj: /sys/fs/<nilfs>/<device>/superblock
   * @sg_superblock_kobj_unregister: completion state
abc968dbf   Vyacheslav Dubeyko   nilfs2: add /sys/...
30
31
   * @sg_segctor_kobj: /sys/fs/<nilfs>/<device>/segctor
   * @sg_segctor_kobj_unregister: completion state
a2ecb791a   Vyacheslav Dubeyko   nilfs2: add /sys/...
32
33
   * @sg_mounted_snapshots_kobj: /sys/fs/<nilfs>/<device>/mounted_snapshots
   * @sg_mounted_snapshots_kobj_unregister: completion state
02a0ba1c6   Vyacheslav Dubeyko   nilfs2: add /sys/...
34
35
   * @sg_checkpoints_kobj: /sys/fs/<nilfs>/<device>/checkpoints
   * @sg_checkpoints_kobj_unregister: completion state
ef43d5cd8   Vyacheslav Dubeyko   nilfs2: add /sys/...
36
37
   * @sg_segments_kobj: /sys/fs/<nilfs>/<device>/segments
   * @sg_segments_kobj_unregister: completion state
caa05d49d   Vyacheslav Dubeyko   nilfs2: add /sys/...
38
39
40
41
42
   */
  struct nilfs_sysfs_dev_subgroups {
  	/* /sys/fs/<nilfs>/<device>/superblock */
  	struct kobject sg_superblock_kobj;
  	struct completion sg_superblock_kobj_unregister;
abc968dbf   Vyacheslav Dubeyko   nilfs2: add /sys/...
43
44
45
46
  
  	/* /sys/fs/<nilfs>/<device>/segctor */
  	struct kobject sg_segctor_kobj;
  	struct completion sg_segctor_kobj_unregister;
ef43d5cd8   Vyacheslav Dubeyko   nilfs2: add /sys/...
47

a2ecb791a   Vyacheslav Dubeyko   nilfs2: add /sys/...
48
49
50
  	/* /sys/fs/<nilfs>/<device>/mounted_snapshots */
  	struct kobject sg_mounted_snapshots_kobj;
  	struct completion sg_mounted_snapshots_kobj_unregister;
02a0ba1c6   Vyacheslav Dubeyko   nilfs2: add /sys/...
51
52
53
  	/* /sys/fs/<nilfs>/<device>/checkpoints */
  	struct kobject sg_checkpoints_kobj;
  	struct completion sg_checkpoints_kobj_unregister;
ef43d5cd8   Vyacheslav Dubeyko   nilfs2: add /sys/...
54
55
56
  	/* /sys/fs/<nilfs>/<device>/segments */
  	struct kobject sg_segments_kobj;
  	struct completion sg_segments_kobj_unregister;
caa05d49d   Vyacheslav Dubeyko   nilfs2: add /sys/...
57
  };
aebe17f68   Vyacheslav Dubeyko   nilfs2: add /sys/...
58
59
60
61
62
63
64
  #define NILFS_COMMON_ATTR_STRUCT(name) \
  struct nilfs_##name##_attr { \
  	struct attribute attr; \
  	ssize_t (*show)(struct kobject *, struct attribute *, \
  			char *); \
  	ssize_t (*store)(struct kobject *, struct attribute *, \
  			 const char *, size_t); \
facb9ec5e   Ryusuke Konishi   nilfs2: clean tra...
65
  }
aebe17f68   Vyacheslav Dubeyko   nilfs2: add /sys/...
66
67
  
  NILFS_COMMON_ATTR_STRUCT(feature);
da7141fb7   Vyacheslav Dubeyko   nilfs2: add /sys/...
68
69
70
71
72
73
74
  #define NILFS_DEV_ATTR_STRUCT(name) \
  struct nilfs_##name##_attr { \
  	struct attribute attr; \
  	ssize_t (*show)(struct nilfs_##name##_attr *, struct the_nilfs *, \
  			char *); \
  	ssize_t (*store)(struct nilfs_##name##_attr *, struct the_nilfs *, \
  			 const char *, size_t); \
facb9ec5e   Ryusuke Konishi   nilfs2: clean tra...
75
  }
da7141fb7   Vyacheslav Dubeyko   nilfs2: add /sys/...
76
77
  
  NILFS_DEV_ATTR_STRUCT(dev);
ef43d5cd8   Vyacheslav Dubeyko   nilfs2: add /sys/...
78
  NILFS_DEV_ATTR_STRUCT(segments);
a2ecb791a   Vyacheslav Dubeyko   nilfs2: add /sys/...
79
  NILFS_DEV_ATTR_STRUCT(mounted_snapshots);
02a0ba1c6   Vyacheslav Dubeyko   nilfs2: add /sys/...
80
  NILFS_DEV_ATTR_STRUCT(checkpoints);
caa05d49d   Vyacheslav Dubeyko   nilfs2: add /sys/...
81
  NILFS_DEV_ATTR_STRUCT(superblock);
abc968dbf   Vyacheslav Dubeyko   nilfs2: add /sys/...
82
  NILFS_DEV_ATTR_STRUCT(segctor);
da7141fb7   Vyacheslav Dubeyko   nilfs2: add /sys/...
83

a5a7332a2   Vyacheslav Dubeyko   nilfs2: add /sys/...
84
85
86
87
88
89
90
  #define NILFS_CP_ATTR_STRUCT(name) \
  struct nilfs_##name##_attr { \
  	struct attribute attr; \
  	ssize_t (*show)(struct nilfs_##name##_attr *, struct nilfs_root *, \
  			char *); \
  	ssize_t (*store)(struct nilfs_##name##_attr *, struct nilfs_root *, \
  			 const char *, size_t); \
facb9ec5e   Ryusuke Konishi   nilfs2: clean tra...
91
  }
a5a7332a2   Vyacheslav Dubeyko   nilfs2: add /sys/...
92
93
  
  NILFS_CP_ATTR_STRUCT(snapshot);
aebe17f68   Vyacheslav Dubeyko   nilfs2: add /sys/...
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
  #define NILFS_ATTR(type, name, mode, show, store) \
  	static struct nilfs_##type##_attr nilfs_##type##_attr_##name = \
  		__ATTR(name, mode, show, store)
  
  #define NILFS_INFO_ATTR(type, name) \
  	NILFS_ATTR(type, name, 0444, NULL, NULL)
  #define NILFS_RO_ATTR(type, name) \
  	NILFS_ATTR(type, name, 0444, nilfs_##type##_##name##_show, NULL)
  #define NILFS_RW_ATTR(type, name) \
  	NILFS_ATTR(type, name, 0644, \
  		    nilfs_##type##_##name##_show, \
  		    nilfs_##type##_##name##_store)
  
  #define NILFS_FEATURE_INFO_ATTR(name) \
  	NILFS_INFO_ATTR(feature, name)
  #define NILFS_FEATURE_RO_ATTR(name) \
  	NILFS_RO_ATTR(feature, name)
  #define NILFS_FEATURE_RW_ATTR(name) \
  	NILFS_RW_ATTR(feature, name)
da7141fb7   Vyacheslav Dubeyko   nilfs2: add /sys/...
113
114
115
116
117
118
  #define NILFS_DEV_INFO_ATTR(name) \
  	NILFS_INFO_ATTR(dev, name)
  #define NILFS_DEV_RO_ATTR(name) \
  	NILFS_RO_ATTR(dev, name)
  #define NILFS_DEV_RW_ATTR(name) \
  	NILFS_RW_ATTR(dev, name)
ef43d5cd8   Vyacheslav Dubeyko   nilfs2: add /sys/...
119
120
121
122
  #define NILFS_SEGMENTS_RO_ATTR(name) \
  	NILFS_RO_ATTR(segments, name)
  #define NILFS_SEGMENTS_RW_ATTR(name) \
  	NILFS_RW_ATTR(segs_info, name)
a2ecb791a   Vyacheslav Dubeyko   nilfs2: add /sys/...
123
124
  #define NILFS_MOUNTED_SNAPSHOTS_RO_ATTR(name) \
  	NILFS_RO_ATTR(mounted_snapshots, name)
02a0ba1c6   Vyacheslav Dubeyko   nilfs2: add /sys/...
125
126
127
128
  #define NILFS_CHECKPOINTS_RO_ATTR(name) \
  	NILFS_RO_ATTR(checkpoints, name)
  #define NILFS_CHECKPOINTS_RW_ATTR(name) \
  	NILFS_RW_ATTR(checkpoints, name)
a5a7332a2   Vyacheslav Dubeyko   nilfs2: add /sys/...
129
130
131
132
133
134
  #define NILFS_SNAPSHOT_INFO_ATTR(name) \
  	NILFS_INFO_ATTR(snapshot, name)
  #define NILFS_SNAPSHOT_RO_ATTR(name) \
  	NILFS_RO_ATTR(snapshot, name)
  #define NILFS_SNAPSHOT_RW_ATTR(name) \
  	NILFS_RW_ATTR(snapshot, name)
caa05d49d   Vyacheslav Dubeyko   nilfs2: add /sys/...
135
136
137
138
  #define NILFS_SUPERBLOCK_RO_ATTR(name) \
  	NILFS_RO_ATTR(superblock, name)
  #define NILFS_SUPERBLOCK_RW_ATTR(name) \
  	NILFS_RW_ATTR(superblock, name)
abc968dbf   Vyacheslav Dubeyko   nilfs2: add /sys/...
139
140
141
142
143
144
  #define NILFS_SEGCTOR_INFO_ATTR(name) \
  	NILFS_INFO_ATTR(segctor, name)
  #define NILFS_SEGCTOR_RO_ATTR(name) \
  	NILFS_RO_ATTR(segctor, name)
  #define NILFS_SEGCTOR_RW_ATTR(name) \
  	NILFS_RW_ATTR(segctor, name)
aebe17f68   Vyacheslav Dubeyko   nilfs2: add /sys/...
145
146
  #define NILFS_FEATURE_ATTR_LIST(name) \
  	(&nilfs_feature_attr_##name.attr)
da7141fb7   Vyacheslav Dubeyko   nilfs2: add /sys/...
147
148
  #define NILFS_DEV_ATTR_LIST(name) \
  	(&nilfs_dev_attr_##name.attr)
ef43d5cd8   Vyacheslav Dubeyko   nilfs2: add /sys/...
149
150
  #define NILFS_SEGMENTS_ATTR_LIST(name) \
  	(&nilfs_segments_attr_##name.attr)
a2ecb791a   Vyacheslav Dubeyko   nilfs2: add /sys/...
151
152
  #define NILFS_MOUNTED_SNAPSHOTS_ATTR_LIST(name) \
  	(&nilfs_mounted_snapshots_attr_##name.attr)
02a0ba1c6   Vyacheslav Dubeyko   nilfs2: add /sys/...
153
154
  #define NILFS_CHECKPOINTS_ATTR_LIST(name) \
  	(&nilfs_checkpoints_attr_##name.attr)
a5a7332a2   Vyacheslav Dubeyko   nilfs2: add /sys/...
155
156
  #define NILFS_SNAPSHOT_ATTR_LIST(name) \
  	(&nilfs_snapshot_attr_##name.attr)
caa05d49d   Vyacheslav Dubeyko   nilfs2: add /sys/...
157
158
  #define NILFS_SUPERBLOCK_ATTR_LIST(name) \
  	(&nilfs_superblock_attr_##name.attr)
abc968dbf   Vyacheslav Dubeyko   nilfs2: add /sys/...
159
160
  #define NILFS_SEGCTOR_ATTR_LIST(name) \
  	(&nilfs_segctor_attr_##name.attr)
aebe17f68   Vyacheslav Dubeyko   nilfs2: add /sys/...
161
162
  
  #endif /* _NILFS_SYSFS_H */