sysfs.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. /*
  2. * sysfs.h - sysfs support declarations.
  3. *
  4. * Copyright (C) 2005-2014 Nippon Telegraph and Telephone Corporation.
  5. * Copyright (C) 2014 HGST, Inc., a Western Digital Company.
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * Written by Vyacheslav Dubeyko <Vyacheslav.Dubeyko@hgst.com>
  18. */
  19. #ifndef _NILFS_SYSFS_H
  20. #define _NILFS_SYSFS_H
  21. #include <linux/sysfs.h>
  22. #define NILFS_ROOT_GROUP_NAME "nilfs2"
  23. /*
  24. * struct nilfs_sysfs_dev_subgroups - device subgroup kernel objects
  25. * @sg_superblock_kobj: /sys/fs/<nilfs>/<device>/superblock
  26. * @sg_superblock_kobj_unregister: completion state
  27. * @sg_segctor_kobj: /sys/fs/<nilfs>/<device>/segctor
  28. * @sg_segctor_kobj_unregister: completion state
  29. * @sg_mounted_snapshots_kobj: /sys/fs/<nilfs>/<device>/mounted_snapshots
  30. * @sg_mounted_snapshots_kobj_unregister: completion state
  31. * @sg_checkpoints_kobj: /sys/fs/<nilfs>/<device>/checkpoints
  32. * @sg_checkpoints_kobj_unregister: completion state
  33. * @sg_segments_kobj: /sys/fs/<nilfs>/<device>/segments
  34. * @sg_segments_kobj_unregister: completion state
  35. */
  36. struct nilfs_sysfs_dev_subgroups {
  37. /* /sys/fs/<nilfs>/<device>/superblock */
  38. struct kobject sg_superblock_kobj;
  39. struct completion sg_superblock_kobj_unregister;
  40. /* /sys/fs/<nilfs>/<device>/segctor */
  41. struct kobject sg_segctor_kobj;
  42. struct completion sg_segctor_kobj_unregister;
  43. /* /sys/fs/<nilfs>/<device>/mounted_snapshots */
  44. struct kobject sg_mounted_snapshots_kobj;
  45. struct completion sg_mounted_snapshots_kobj_unregister;
  46. /* /sys/fs/<nilfs>/<device>/checkpoints */
  47. struct kobject sg_checkpoints_kobj;
  48. struct completion sg_checkpoints_kobj_unregister;
  49. /* /sys/fs/<nilfs>/<device>/segments */
  50. struct kobject sg_segments_kobj;
  51. struct completion sg_segments_kobj_unregister;
  52. };
  53. #define NILFS_COMMON_ATTR_STRUCT(name) \
  54. struct nilfs_##name##_attr { \
  55. struct attribute attr; \
  56. ssize_t (*show)(struct kobject *, struct attribute *, \
  57. char *); \
  58. ssize_t (*store)(struct kobject *, struct attribute *, \
  59. const char *, size_t); \
  60. };
  61. NILFS_COMMON_ATTR_STRUCT(feature);
  62. #define NILFS_DEV_ATTR_STRUCT(name) \
  63. struct nilfs_##name##_attr { \
  64. struct attribute attr; \
  65. ssize_t (*show)(struct nilfs_##name##_attr *, struct the_nilfs *, \
  66. char *); \
  67. ssize_t (*store)(struct nilfs_##name##_attr *, struct the_nilfs *, \
  68. const char *, size_t); \
  69. };
  70. NILFS_DEV_ATTR_STRUCT(dev);
  71. NILFS_DEV_ATTR_STRUCT(segments);
  72. NILFS_DEV_ATTR_STRUCT(mounted_snapshots);
  73. NILFS_DEV_ATTR_STRUCT(checkpoints);
  74. NILFS_DEV_ATTR_STRUCT(superblock);
  75. NILFS_DEV_ATTR_STRUCT(segctor);
  76. #define NILFS_CP_ATTR_STRUCT(name) \
  77. struct nilfs_##name##_attr { \
  78. struct attribute attr; \
  79. ssize_t (*show)(struct nilfs_##name##_attr *, struct nilfs_root *, \
  80. char *); \
  81. ssize_t (*store)(struct nilfs_##name##_attr *, struct nilfs_root *, \
  82. const char *, size_t); \
  83. };
  84. NILFS_CP_ATTR_STRUCT(snapshot);
  85. #define NILFS_ATTR(type, name, mode, show, store) \
  86. static struct nilfs_##type##_attr nilfs_##type##_attr_##name = \
  87. __ATTR(name, mode, show, store)
  88. #define NILFS_INFO_ATTR(type, name) \
  89. NILFS_ATTR(type, name, 0444, NULL, NULL)
  90. #define NILFS_RO_ATTR(type, name) \
  91. NILFS_ATTR(type, name, 0444, nilfs_##type##_##name##_show, NULL)
  92. #define NILFS_RW_ATTR(type, name) \
  93. NILFS_ATTR(type, name, 0644, \
  94. nilfs_##type##_##name##_show, \
  95. nilfs_##type##_##name##_store)
  96. #define NILFS_FEATURE_INFO_ATTR(name) \
  97. NILFS_INFO_ATTR(feature, name)
  98. #define NILFS_FEATURE_RO_ATTR(name) \
  99. NILFS_RO_ATTR(feature, name)
  100. #define NILFS_FEATURE_RW_ATTR(name) \
  101. NILFS_RW_ATTR(feature, name)
  102. #define NILFS_DEV_INFO_ATTR(name) \
  103. NILFS_INFO_ATTR(dev, name)
  104. #define NILFS_DEV_RO_ATTR(name) \
  105. NILFS_RO_ATTR(dev, name)
  106. #define NILFS_DEV_RW_ATTR(name) \
  107. NILFS_RW_ATTR(dev, name)
  108. #define NILFS_SEGMENTS_RO_ATTR(name) \
  109. NILFS_RO_ATTR(segments, name)
  110. #define NILFS_SEGMENTS_RW_ATTR(name) \
  111. NILFS_RW_ATTR(segs_info, name)
  112. #define NILFS_MOUNTED_SNAPSHOTS_RO_ATTR(name) \
  113. NILFS_RO_ATTR(mounted_snapshots, name)
  114. #define NILFS_CHECKPOINTS_RO_ATTR(name) \
  115. NILFS_RO_ATTR(checkpoints, name)
  116. #define NILFS_CHECKPOINTS_RW_ATTR(name) \
  117. NILFS_RW_ATTR(checkpoints, name)
  118. #define NILFS_SNAPSHOT_INFO_ATTR(name) \
  119. NILFS_INFO_ATTR(snapshot, name)
  120. #define NILFS_SNAPSHOT_RO_ATTR(name) \
  121. NILFS_RO_ATTR(snapshot, name)
  122. #define NILFS_SNAPSHOT_RW_ATTR(name) \
  123. NILFS_RW_ATTR(snapshot, name)
  124. #define NILFS_SUPERBLOCK_RO_ATTR(name) \
  125. NILFS_RO_ATTR(superblock, name)
  126. #define NILFS_SUPERBLOCK_RW_ATTR(name) \
  127. NILFS_RW_ATTR(superblock, name)
  128. #define NILFS_SEGCTOR_INFO_ATTR(name) \
  129. NILFS_INFO_ATTR(segctor, name)
  130. #define NILFS_SEGCTOR_RO_ATTR(name) \
  131. NILFS_RO_ATTR(segctor, name)
  132. #define NILFS_SEGCTOR_RW_ATTR(name) \
  133. NILFS_RW_ATTR(segctor, name)
  134. #define NILFS_FEATURE_ATTR_LIST(name) \
  135. (&nilfs_feature_attr_##name.attr)
  136. #define NILFS_DEV_ATTR_LIST(name) \
  137. (&nilfs_dev_attr_##name.attr)
  138. #define NILFS_SEGMENTS_ATTR_LIST(name) \
  139. (&nilfs_segments_attr_##name.attr)
  140. #define NILFS_MOUNTED_SNAPSHOTS_ATTR_LIST(name) \
  141. (&nilfs_mounted_snapshots_attr_##name.attr)
  142. #define NILFS_CHECKPOINTS_ATTR_LIST(name) \
  143. (&nilfs_checkpoints_attr_##name.attr)
  144. #define NILFS_SNAPSHOT_ATTR_LIST(name) \
  145. (&nilfs_snapshot_attr_##name.attr)
  146. #define NILFS_SUPERBLOCK_ATTR_LIST(name) \
  147. (&nilfs_superblock_attr_##name.attr)
  148. #define NILFS_SEGCTOR_ATTR_LIST(name) \
  149. (&nilfs_segctor_attr_##name.attr)
  150. #endif /* _NILFS_SYSFS_H */