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