Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0+ */
0002 /*
0003  * Sysfs support declarations.
0004  *
0005  * Copyright (C) 2005-2014 Nippon Telegraph and Telephone Corporation.
0006  * Copyright (C) 2014 HGST, Inc., a Western Digital Company.
0007  *
0008  * Written by Vyacheslav Dubeyko <Vyacheslav.Dubeyko@hgst.com>
0009  */
0010 
0011 #ifndef _NILFS_SYSFS_H
0012 #define _NILFS_SYSFS_H
0013 
0014 #include <linux/sysfs.h>
0015 
0016 #define NILFS_ROOT_GROUP_NAME   "nilfs2"
0017 
0018 /*
0019  * struct nilfs_sysfs_dev_subgroups - device subgroup kernel objects
0020  * @sg_superblock_kobj: /sys/fs/<nilfs>/<device>/superblock
0021  * @sg_superblock_kobj_unregister: completion state
0022  * @sg_segctor_kobj: /sys/fs/<nilfs>/<device>/segctor
0023  * @sg_segctor_kobj_unregister: completion state
0024  * @sg_mounted_snapshots_kobj: /sys/fs/<nilfs>/<device>/mounted_snapshots
0025  * @sg_mounted_snapshots_kobj_unregister: completion state
0026  * @sg_checkpoints_kobj: /sys/fs/<nilfs>/<device>/checkpoints
0027  * @sg_checkpoints_kobj_unregister: completion state
0028  * @sg_segments_kobj: /sys/fs/<nilfs>/<device>/segments
0029  * @sg_segments_kobj_unregister: completion state
0030  */
0031 struct nilfs_sysfs_dev_subgroups {
0032     /* /sys/fs/<nilfs>/<device>/superblock */
0033     struct kobject sg_superblock_kobj;
0034     struct completion sg_superblock_kobj_unregister;
0035 
0036     /* /sys/fs/<nilfs>/<device>/segctor */
0037     struct kobject sg_segctor_kobj;
0038     struct completion sg_segctor_kobj_unregister;
0039 
0040     /* /sys/fs/<nilfs>/<device>/mounted_snapshots */
0041     struct kobject sg_mounted_snapshots_kobj;
0042     struct completion sg_mounted_snapshots_kobj_unregister;
0043 
0044     /* /sys/fs/<nilfs>/<device>/checkpoints */
0045     struct kobject sg_checkpoints_kobj;
0046     struct completion sg_checkpoints_kobj_unregister;
0047 
0048     /* /sys/fs/<nilfs>/<device>/segments */
0049     struct kobject sg_segments_kobj;
0050     struct completion sg_segments_kobj_unregister;
0051 };
0052 
0053 #define NILFS_COMMON_ATTR_STRUCT(name) \
0054 struct nilfs_##name##_attr { \
0055     struct attribute attr; \
0056     ssize_t (*show)(struct kobject *, struct attribute *, \
0057             char *); \
0058     ssize_t (*store)(struct kobject *, struct attribute *, \
0059              const char *, size_t); \
0060 }
0061 
0062 NILFS_COMMON_ATTR_STRUCT(feature);
0063 
0064 #define NILFS_DEV_ATTR_STRUCT(name) \
0065 struct nilfs_##name##_attr { \
0066     struct attribute attr; \
0067     ssize_t (*show)(struct nilfs_##name##_attr *, struct the_nilfs *, \
0068             char *); \
0069     ssize_t (*store)(struct nilfs_##name##_attr *, struct the_nilfs *, \
0070              const char *, size_t); \
0071 }
0072 
0073 NILFS_DEV_ATTR_STRUCT(dev);
0074 NILFS_DEV_ATTR_STRUCT(segments);
0075 NILFS_DEV_ATTR_STRUCT(mounted_snapshots);
0076 NILFS_DEV_ATTR_STRUCT(checkpoints);
0077 NILFS_DEV_ATTR_STRUCT(superblock);
0078 NILFS_DEV_ATTR_STRUCT(segctor);
0079 
0080 #define NILFS_CP_ATTR_STRUCT(name) \
0081 struct nilfs_##name##_attr { \
0082     struct attribute attr; \
0083     ssize_t (*show)(struct nilfs_##name##_attr *, struct nilfs_root *, \
0084             char *); \
0085     ssize_t (*store)(struct nilfs_##name##_attr *, struct nilfs_root *, \
0086              const char *, size_t); \
0087 }
0088 
0089 NILFS_CP_ATTR_STRUCT(snapshot);
0090 
0091 #define NILFS_ATTR(type, name, mode, show, store) \
0092     static struct nilfs_##type##_attr nilfs_##type##_attr_##name = \
0093         __ATTR(name, mode, show, store)
0094 
0095 #define NILFS_INFO_ATTR(type, name) \
0096     NILFS_ATTR(type, name, 0444, NULL, NULL)
0097 #define NILFS_RO_ATTR(type, name) \
0098     NILFS_ATTR(type, name, 0444, nilfs_##type##_##name##_show, NULL)
0099 #define NILFS_RW_ATTR(type, name) \
0100     NILFS_ATTR(type, name, 0644, \
0101             nilfs_##type##_##name##_show, \
0102             nilfs_##type##_##name##_store)
0103 
0104 #define NILFS_FEATURE_INFO_ATTR(name) \
0105     NILFS_INFO_ATTR(feature, name)
0106 #define NILFS_FEATURE_RO_ATTR(name) \
0107     NILFS_RO_ATTR(feature, name)
0108 #define NILFS_FEATURE_RW_ATTR(name) \
0109     NILFS_RW_ATTR(feature, name)
0110 
0111 #define NILFS_DEV_INFO_ATTR(name) \
0112     NILFS_INFO_ATTR(dev, name)
0113 #define NILFS_DEV_RO_ATTR(name) \
0114     NILFS_RO_ATTR(dev, name)
0115 #define NILFS_DEV_RW_ATTR(name) \
0116     NILFS_RW_ATTR(dev, name)
0117 
0118 #define NILFS_SEGMENTS_RO_ATTR(name) \
0119     NILFS_RO_ATTR(segments, name)
0120 #define NILFS_SEGMENTS_RW_ATTR(name) \
0121     NILFS_RW_ATTR(segs_info, name)
0122 
0123 #define NILFS_MOUNTED_SNAPSHOTS_RO_ATTR(name) \
0124     NILFS_RO_ATTR(mounted_snapshots, name)
0125 
0126 #define NILFS_CHECKPOINTS_RO_ATTR(name) \
0127     NILFS_RO_ATTR(checkpoints, name)
0128 #define NILFS_CHECKPOINTS_RW_ATTR(name) \
0129     NILFS_RW_ATTR(checkpoints, name)
0130 
0131 #define NILFS_SNAPSHOT_INFO_ATTR(name) \
0132     NILFS_INFO_ATTR(snapshot, name)
0133 #define NILFS_SNAPSHOT_RO_ATTR(name) \
0134     NILFS_RO_ATTR(snapshot, name)
0135 #define NILFS_SNAPSHOT_RW_ATTR(name) \
0136     NILFS_RW_ATTR(snapshot, name)
0137 
0138 #define NILFS_SUPERBLOCK_RO_ATTR(name) \
0139     NILFS_RO_ATTR(superblock, name)
0140 #define NILFS_SUPERBLOCK_RW_ATTR(name) \
0141     NILFS_RW_ATTR(superblock, name)
0142 
0143 #define NILFS_SEGCTOR_INFO_ATTR(name) \
0144     NILFS_INFO_ATTR(segctor, name)
0145 #define NILFS_SEGCTOR_RO_ATTR(name) \
0146     NILFS_RO_ATTR(segctor, name)
0147 #define NILFS_SEGCTOR_RW_ATTR(name) \
0148     NILFS_RW_ATTR(segctor, name)
0149 
0150 #define NILFS_FEATURE_ATTR_LIST(name) \
0151     (&nilfs_feature_attr_##name.attr)
0152 #define NILFS_DEV_ATTR_LIST(name) \
0153     (&nilfs_dev_attr_##name.attr)
0154 #define NILFS_SEGMENTS_ATTR_LIST(name) \
0155     (&nilfs_segments_attr_##name.attr)
0156 #define NILFS_MOUNTED_SNAPSHOTS_ATTR_LIST(name) \
0157     (&nilfs_mounted_snapshots_attr_##name.attr)
0158 #define NILFS_CHECKPOINTS_ATTR_LIST(name) \
0159     (&nilfs_checkpoints_attr_##name.attr)
0160 #define NILFS_SNAPSHOT_ATTR_LIST(name) \
0161     (&nilfs_snapshot_attr_##name.attr)
0162 #define NILFS_SUPERBLOCK_ATTR_LIST(name) \
0163     (&nilfs_superblock_attr_##name.attr)
0164 #define NILFS_SEGCTOR_ATTR_LIST(name) \
0165     (&nilfs_segctor_attr_##name.attr)
0166 
0167 #endif /* _NILFS_SYSFS_H */