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