fs.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Display helpers for generic filesystem items
  4. *
  5. * Author: Chuck Lever <chuck.lever@oracle.com>
  6. *
  7. * Copyright (c) 2020, Oracle and/or its affiliates.
  8. */
  9. #include <linux/fs.h>
  10. #define show_fs_dirent_type(x) \
  11. __print_symbolic(x, \
  12. { DT_UNKNOWN, "UNKNOWN" }, \
  13. { DT_FIFO, "FIFO" }, \
  14. { DT_CHR, "CHR" }, \
  15. { DT_DIR, "DIR" }, \
  16. { DT_BLK, "BLK" }, \
  17. { DT_REG, "REG" }, \
  18. { DT_LNK, "LNK" }, \
  19. { DT_SOCK, "SOCK" }, \
  20. { DT_WHT, "WHT" })
  21. #define show_fs_fcntl_open_flags(x) \
  22. __print_flags(x, "|", \
  23. { O_WRONLY, "O_WRONLY" }, \
  24. { O_RDWR, "O_RDWR" }, \
  25. { O_CREAT, "O_CREAT" }, \
  26. { O_EXCL, "O_EXCL" }, \
  27. { O_NOCTTY, "O_NOCTTY" }, \
  28. { O_TRUNC, "O_TRUNC" }, \
  29. { O_APPEND, "O_APPEND" }, \
  30. { O_NONBLOCK, "O_NONBLOCK" }, \
  31. { O_DSYNC, "O_DSYNC" }, \
  32. { O_DIRECT, "O_DIRECT" }, \
  33. { O_LARGEFILE, "O_LARGEFILE" }, \
  34. { O_DIRECTORY, "O_DIRECTORY" }, \
  35. { O_NOFOLLOW, "O_NOFOLLOW" }, \
  36. { O_NOATIME, "O_NOATIME" }, \
  37. { O_CLOEXEC, "O_CLOEXEC" })
  38. #define __fmode_flag(x) { (__force unsigned long)FMODE_##x, #x }
  39. #define show_fs_fmode_flags(x) \
  40. __print_flags(x, "|", \
  41. __fmode_flag(READ), \
  42. __fmode_flag(WRITE), \
  43. __fmode_flag(EXEC))
  44. #ifdef CONFIG_64BIT
  45. #define show_fs_fcntl_cmd(x) \
  46. __print_symbolic(x, \
  47. { F_DUPFD, "DUPFD" }, \
  48. { F_GETFD, "GETFD" }, \
  49. { F_SETFD, "SETFD" }, \
  50. { F_GETFL, "GETFL" }, \
  51. { F_SETFL, "SETFL" }, \
  52. { F_GETLK, "GETLK" }, \
  53. { F_SETLK, "SETLK" }, \
  54. { F_SETLKW, "SETLKW" }, \
  55. { F_SETOWN, "SETOWN" }, \
  56. { F_GETOWN, "GETOWN" }, \
  57. { F_SETSIG, "SETSIG" }, \
  58. { F_GETSIG, "GETSIG" }, \
  59. { F_SETOWN_EX, "SETOWN_EX" }, \
  60. { F_GETOWN_EX, "GETOWN_EX" }, \
  61. { F_GETOWNER_UIDS, "GETOWNER_UIDS" }, \
  62. { F_OFD_GETLK, "OFD_GETLK" }, \
  63. { F_OFD_SETLK, "OFD_SETLK" }, \
  64. { F_OFD_SETLKW, "OFD_SETLKW" })
  65. #else /* CONFIG_64BIT */
  66. #define show_fs_fcntl_cmd(x) \
  67. __print_symbolic(x, \
  68. { F_DUPFD, "DUPFD" }, \
  69. { F_GETFD, "GETFD" }, \
  70. { F_SETFD, "SETFD" }, \
  71. { F_GETFL, "GETFL" }, \
  72. { F_SETFL, "SETFL" }, \
  73. { F_GETLK, "GETLK" }, \
  74. { F_SETLK, "SETLK" }, \
  75. { F_SETLKW, "SETLKW" }, \
  76. { F_SETOWN, "SETOWN" }, \
  77. { F_GETOWN, "GETOWN" }, \
  78. { F_SETSIG, "SETSIG" }, \
  79. { F_GETSIG, "GETSIG" }, \
  80. { F_GETLK64, "GETLK64" }, \
  81. { F_SETLK64, "SETLK64" }, \
  82. { F_SETLKW64, "SETLKW64" }, \
  83. { F_SETOWN_EX, "SETOWN_EX" }, \
  84. { F_GETOWN_EX, "GETOWN_EX" }, \
  85. { F_GETOWNER_UIDS, "GETOWNER_UIDS" }, \
  86. { F_OFD_GETLK, "OFD_GETLK" }, \
  87. { F_OFD_SETLK, "OFD_SETLK" }, \
  88. { F_OFD_SETLKW, "OFD_SETLKW" })
  89. #endif /* CONFIG_64BIT */
  90. #define show_fs_fcntl_lock_type(x) \
  91. __print_symbolic(x, \
  92. { F_RDLCK, "RDLCK" }, \
  93. { F_WRLCK, "WRLCK" }, \
  94. { F_UNLCK, "UNLCK" })
  95. #define show_fs_lookup_flags(flags) \
  96. __print_flags(flags, "|", \
  97. { LOOKUP_FOLLOW, "FOLLOW" }, \
  98. { LOOKUP_DIRECTORY, "DIRECTORY" }, \
  99. { LOOKUP_AUTOMOUNT, "AUTOMOUNT" }, \
  100. { LOOKUP_EMPTY, "EMPTY" }, \
  101. { LOOKUP_DOWN, "DOWN" }, \
  102. { LOOKUP_MOUNTPOINT, "MOUNTPOINT" }, \
  103. { LOOKUP_REVAL, "REVAL" }, \
  104. { LOOKUP_RCU, "RCU" }, \
  105. { LOOKUP_OPEN, "OPEN" }, \
  106. { LOOKUP_CREATE, "CREATE" }, \
  107. { LOOKUP_EXCL, "EXCL" }, \
  108. { LOOKUP_RENAME_TARGET, "RENAME_TARGET" }, \
  109. { LOOKUP_PARENT, "PARENT" }, \
  110. { LOOKUP_NO_SYMLINKS, "NO_SYMLINKS" }, \
  111. { LOOKUP_NO_MAGICLINKS, "NO_MAGICLINKS" }, \
  112. { LOOKUP_NO_XDEV, "NO_XDEV" }, \
  113. { LOOKUP_BENEATH, "BENEATH" }, \
  114. { LOOKUP_IN_ROOT, "IN_ROOT" }, \
  115. { LOOKUP_CACHED, "CACHED" })
  116. #define show_ia_valid_flags(flags) \
  117. __print_flags(flags, "|", \
  118. { ATTR_MODE, "MODE" }, \
  119. { ATTR_UID, "UID" }, \
  120. { ATTR_GID, "GID" }, \
  121. { ATTR_SIZE, "SIZE" }, \
  122. { ATTR_ATIME, "ATIME" }, \
  123. { ATTR_MTIME, "MTIME" }, \
  124. { ATTR_CTIME, "CTIME" }, \
  125. { ATTR_ATIME_SET, "ATIME_SET" }, \
  126. { ATTR_MTIME_SET, "MTIME_SET" }, \
  127. { ATTR_FORCE, "FORCE" }, \
  128. { ATTR_KILL_SUID, "KILL_SUID" }, \
  129. { ATTR_KILL_SGID, "KILL_SGID" }, \
  130. { ATTR_FILE, "FILE" }, \
  131. { ATTR_KILL_PRIV, "KILL_PRIV" }, \
  132. { ATTR_OPEN, "OPEN" }, \
  133. { ATTR_TIMES_SET, "TIMES_SET" }, \
  134. { ATTR_TOUCH, "TOUCH"}, \
  135. { ATTR_DELEG, "DELEG"})
  136. #define show_statx_mask(flags) \
  137. __print_flags(flags, "|", \
  138. { STATX_TYPE, "TYPE" }, \
  139. { STATX_MODE, "MODE" }, \
  140. { STATX_NLINK, "NLINK" }, \
  141. { STATX_UID, "UID" }, \
  142. { STATX_GID, "GID" }, \
  143. { STATX_ATIME, "ATIME" }, \
  144. { STATX_MTIME, "MTIME" }, \
  145. { STATX_CTIME, "CTIME" }, \
  146. { STATX_INO, "INO" }, \
  147. { STATX_SIZE, "SIZE" }, \
  148. { STATX_BLOCKS, "BLOCKS" }, \
  149. { STATX_BASIC_STATS, "BASIC_STATS" }, \
  150. { STATX_BTIME, "BTIME" }, \
  151. { STATX_MNT_ID, "MNT_ID" }, \
  152. { STATX_DIOALIGN, "DIOALIGN" }, \
  153. { STATX_MNT_ID_UNIQUE, "MNT_ID_UNIQUE" }, \
  154. { STATX_SUBVOL, "SUBVOL" }, \
  155. { STATX_WRITE_ATOMIC, "WRITE_ATOMIC" }, \
  156. { STATX_DIO_READ_ALIGN, "DIO_READ_ALIGN" })