Guest User

Untitled

a guest
Jun 26th, 2019
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 345.23 KB | None | 0 0
  1. Starting build of type regular ...
  2. Skipping setjmp_test2.S test on non-x86
  3. ...patience...
  4. ...found 941 target(s)...
  5. ...updating 13 target(s)...
  6. C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Attribute.o
  7. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  8. from ../headers/private/kernel/util/AVLTree.h:9,
  9. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  10. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  11. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  12. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  13. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  14. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  15. ../headers/private/fs_shell/fssh_api_wrapper.h:1646: warning: "R_OK" redefined
  16. 1646 | #define R_OK FSSH_R_OK
  17. |
  18. In file included from /usr/include/zconf.h:475,
  19. from /usr/include/zlib.h:34,
  20. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  21. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  22. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  23. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  24. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  25. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  26. /usr/include/unistd.h:281: note: this is the location of the previous definition
  27. 281 | #define R_OK 4 /* Test for read permission. */
  28. |
  29. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  30. from ../headers/private/kernel/util/AVLTree.h:9,
  31. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  32. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  33. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  34. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  35. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  36. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  37. ../headers/private/fs_shell/fssh_api_wrapper.h:1647: warning: "W_OK" redefined
  38. 1647 | #define W_OK FSSH_W_OK
  39. |
  40. In file included from /usr/include/zconf.h:475,
  41. from /usr/include/zlib.h:34,
  42. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  43. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  44. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  45. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  46. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  47. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  48. /usr/include/unistd.h:282: note: this is the location of the previous definition
  49. 282 | #define W_OK 2 /* Test for write permission. */
  50. |
  51. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  52. from ../headers/private/kernel/util/AVLTree.h:9,
  53. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  54. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  55. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  56. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  57. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  58. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  59. ../headers/private/fs_shell/fssh_api_wrapper.h:1648: warning: "X_OK" redefined
  60. 1648 | #define X_OK FSSH_X_OK
  61. |
  62. In file included from /usr/include/zconf.h:475,
  63. from /usr/include/zlib.h:34,
  64. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  65. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  66. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  67. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  68. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  69. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  70. /usr/include/unistd.h:283: note: this is the location of the previous definition
  71. 283 | #define X_OK 1 /* Test for execute permission. */
  72. |
  73. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  74. from ../headers/private/kernel/util/AVLTree.h:9,
  75. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  76. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  77. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  78. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  79. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  80. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  81. ../headers/private/fs_shell/fssh_api_wrapper.h:1649: warning: "F_OK" redefined
  82. 1649 | #define F_OK FSSH_F_OK
  83. |
  84. In file included from /usr/include/zconf.h:475,
  85. from /usr/include/zlib.h:34,
  86. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  87. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  88. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  89. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  90. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  91. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  92. /usr/include/unistd.h:284: note: this is the location of the previous definition
  93. 284 | #define F_OK 0 /* Test for existence. */
  94. |
  95. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  96. from ../headers/private/kernel/util/AVLTree.h:9,
  97. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  98. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  99. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  100. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  101. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  102. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  103. ../headers/private/fs_shell/fssh_api_wrapper.h:1652: warning: "STDIN_FILENO" redefined
  104. 1652 | #define STDIN_FILENO FSSH_STDIN_FILENO
  105. |
  106. In file included from /usr/include/zconf.h:475,
  107. from /usr/include/zlib.h:34,
  108. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  109. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  110. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  111. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  112. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  113. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  114. /usr/include/unistd.h:210: note: this is the location of the previous definition
  115. 210 | #define STDIN_FILENO 0 /* Standard input. */
  116. |
  117. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  118. from ../headers/private/kernel/util/AVLTree.h:9,
  119. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  120. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  121. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  122. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  123. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  124. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  125. ../headers/private/fs_shell/fssh_api_wrapper.h:1653: warning: "STDOUT_FILENO" redefined
  126. 1653 | #define STDOUT_FILENO FSSH_STDOUT_FILENO
  127. |
  128. In file included from /usr/include/zconf.h:475,
  129. from /usr/include/zlib.h:34,
  130. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  131. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  132. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  133. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  134. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  135. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  136. /usr/include/unistd.h:211: note: this is the location of the previous definition
  137. 211 | #define STDOUT_FILENO 1 /* Standard output. */
  138. |
  139. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  140. from ../headers/private/kernel/util/AVLTree.h:9,
  141. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  142. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  143. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  144. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  145. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  146. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  147. ../headers/private/fs_shell/fssh_api_wrapper.h:1654: warning: "STDERR_FILENO" redefined
  148. 1654 | #define STDERR_FILENO FSSH_STDERR_FILENO
  149. |
  150. In file included from /usr/include/zconf.h:475,
  151. from /usr/include/zlib.h:34,
  152. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  153. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  154. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  155. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  156. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  157. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  158. /usr/include/unistd.h:212: note: this is the location of the previous definition
  159. 212 | #define STDERR_FILENO 2 /* Standard error output. */
  160. |
  161. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  162. from ../headers/private/kernel/util/AVLTree.h:9,
  163. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  164. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  165. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  166. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  167. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  168. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  169. ../headers/private/fs_shell/fssh_api_wrapper.h:1657: warning: "SEEK_SET" redefined
  170. 1657 | #define SEEK_SET FSSH_SEEK_SET
  171. |
  172. In file included from /usr/include/zconf.h:475,
  173. from /usr/include/zlib.h:34,
  174. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  175. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  176. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  177. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  178. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  179. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  180. /usr/include/unistd.h:311: note: this is the location of the previous definition
  181. 311 | # define SEEK_SET 0 /* Seek from beginning of file. */
  182. |
  183. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  184. from ../headers/private/kernel/util/AVLTree.h:9,
  185. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  186. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  187. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  188. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  189. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  190. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  191. ../headers/private/fs_shell/fssh_api_wrapper.h:1658: warning: "SEEK_CUR" redefined
  192. 1658 | #define SEEK_CUR FSSH_SEEK_CUR
  193. |
  194. In file included from /usr/include/zconf.h:475,
  195. from /usr/include/zlib.h:34,
  196. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  197. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  198. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  199. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  200. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  201. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  202. /usr/include/unistd.h:312: note: this is the location of the previous definition
  203. 312 | # define SEEK_CUR 1 /* Seek from current position. */
  204. |
  205. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  206. from ../headers/private/kernel/util/AVLTree.h:9,
  207. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  208. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  209. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  210. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  211. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  212. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  213. ../headers/private/fs_shell/fssh_api_wrapper.h:1659: warning: "SEEK_END" redefined
  214. 1659 | #define SEEK_END FSSH_SEEK_END
  215. |
  216. In file included from /usr/include/zconf.h:475,
  217. from /usr/include/zlib.h:34,
  218. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  219. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  220. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  221. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  222. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  223. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  224. /usr/include/unistd.h:313: note: this is the location of the previous definition
  225. 313 | # define SEEK_END 2 /* Seek from end of file. */
  226. |
  227. In file included from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  228. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  229. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  230. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp:12:
  231. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:100:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  232. 100 | uuid_t fsid;
  233. | ^~~~~~
  234. | uid_t
  235. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:103:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  236. 103 | uuid_t chunk_tree_uuid;
  237. | ^~~~~~
  238. | uid_t
  239. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:169:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  240. 169 | uuid_t device_uuid;
  241. | ^~~~~~
  242. | uid_t
  243. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:215:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  244. 215 | uuid_t uuid;
  245. | ^~~~~~
  246. | uid_t
  247. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:216:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  248. 216 | uuid_t fsid;
  249. | ^~~~~~
  250. | uid_t
  251. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:222:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  252. 222 | uuid_t fsid;
  253. | ^~~~~~
  254. | uid_t
  255.  
  256. gcc -c "../src/add-ons/kernel/file_systems/btrfs/Attribute.cpp" -O2 -Wall -Wno-trigraphs -Wno-ctor-dtor-privacy -Woverloaded-virtual -Wpointer-arith -Wcast-align -Wsign-compare -Wno-multichar -DFS_SHELL -DTRACE_BTRFS -Wno-multichar -fno-rtti -DHAIKU_BUILD_COMPATIBILITY_H -DARCH_x86_64 -D_NO_INLINE_ASM -D__NO_INLINE__ -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DHAIKU_HOST_USE_XATTR_REF -DHAIKU_HOST_PLATFORM_LINUX -DHAIKU_HOST_PLATFORM_64_BIT -DHAIKU_PACKAGING_ARCH=\"x86_64\" -iquote ../build/user_config_headers -iquote ../build/config_headers -iquote ../src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/linux/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/haiku/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote ../src/add-ons/kernel/file_systems/btrfs -iquote ../src/tools/fs_shell -I ../headers/build -I ../headers/build/os -I ../headers/build/os/support -I ../headers/private/. -I ../headers/private/kernel -I ../headers/private/libroot -I ../headers/private/shared -I ../headers/private/kernel/boot/platform/bios_ia32 -I ../headers/private/kernel/arch/x86 -I objects/haiku/x86_64/common/system/kernel -I ../headers/private/. -I ../headers/private/system -I ../headers/private/system/arch/x86_64 -I ../headers/private/shared -I ../headers/private/storage -I ../headers/private/fs_shell -I ../headers/private -I ../headers/build/host/linux -o "objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Attribute.o"
  257.  
  258. ...failed C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Attribute.o ...
  259. C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/AttributeIterator.o
  260. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  261. from ../headers/private/kernel/util/AVLTree.h:9,
  262. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  263. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  264. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  265. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  266. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  267. ../headers/private/fs_shell/fssh_api_wrapper.h:1646: warning: "R_OK" redefined
  268. 1646 | #define R_OK FSSH_R_OK
  269. |
  270. In file included from /usr/include/zconf.h:475,
  271. from /usr/include/zlib.h:34,
  272. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  273. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  274. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  275. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  276. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  277. /usr/include/unistd.h:281: note: this is the location of the previous definition
  278. 281 | #define R_OK 4 /* Test for read permission. */
  279. |
  280. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  281. from ../headers/private/kernel/util/AVLTree.h:9,
  282. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  283. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  284. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  285. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  286. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  287. ../headers/private/fs_shell/fssh_api_wrapper.h:1647: warning: "W_OK" redefined
  288. 1647 | #define W_OK FSSH_W_OK
  289. |
  290. In file included from /usr/include/zconf.h:475,
  291. from /usr/include/zlib.h:34,
  292. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  293. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  294. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  295. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  296. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  297. /usr/include/unistd.h:282: note: this is the location of the previous definition
  298. 282 | #define W_OK 2 /* Test for write permission. */
  299. |
  300. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  301. from ../headers/private/kernel/util/AVLTree.h:9,
  302. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  303. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  304. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  305. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  306. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  307. ../headers/private/fs_shell/fssh_api_wrapper.h:1648: warning: "X_OK" redefined
  308. 1648 | #define X_OK FSSH_X_OK
  309. |
  310. In file included from /usr/include/zconf.h:475,
  311. from /usr/include/zlib.h:34,
  312. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  313. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  314. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  315. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  316. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  317. /usr/include/unistd.h:283: note: this is the location of the previous definition
  318. 283 | #define X_OK 1 /* Test for execute permission. */
  319. |
  320. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  321. from ../headers/private/kernel/util/AVLTree.h:9,
  322. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  323. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  324. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  325. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  326. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  327. ../headers/private/fs_shell/fssh_api_wrapper.h:1649: warning: "F_OK" redefined
  328. 1649 | #define F_OK FSSH_F_OK
  329. |
  330. In file included from /usr/include/zconf.h:475,
  331. from /usr/include/zlib.h:34,
  332. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  333. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  334. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  335. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  336. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  337. /usr/include/unistd.h:284: note: this is the location of the previous definition
  338. 284 | #define F_OK 0 /* Test for existence. */
  339. |
  340. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  341. from ../headers/private/kernel/util/AVLTree.h:9,
  342. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  343. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  344. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  345. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  346. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  347. ../headers/private/fs_shell/fssh_api_wrapper.h:1652: warning: "STDIN_FILENO" redefined
  348. 1652 | #define STDIN_FILENO FSSH_STDIN_FILENO
  349. |
  350. In file included from /usr/include/zconf.h:475,
  351. from /usr/include/zlib.h:34,
  352. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  353. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  354. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  355. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  356. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  357. /usr/include/unistd.h:210: note: this is the location of the previous definition
  358. 210 | #define STDIN_FILENO 0 /* Standard input. */
  359. |
  360. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  361. from ../headers/private/kernel/util/AVLTree.h:9,
  362. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  363. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  364. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  365. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  366. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  367. ../headers/private/fs_shell/fssh_api_wrapper.h:1653: warning: "STDOUT_FILENO" redefined
  368. 1653 | #define STDOUT_FILENO FSSH_STDOUT_FILENO
  369. |
  370. In file included from /usr/include/zconf.h:475,
  371. from /usr/include/zlib.h:34,
  372. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  373. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  374. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  375. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  376. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  377. /usr/include/unistd.h:211: note: this is the location of the previous definition
  378. 211 | #define STDOUT_FILENO 1 /* Standard output. */
  379. |
  380. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  381. from ../headers/private/kernel/util/AVLTree.h:9,
  382. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  383. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  384. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  385. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  386. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  387. ../headers/private/fs_shell/fssh_api_wrapper.h:1654: warning: "STDERR_FILENO" redefined
  388. 1654 | #define STDERR_FILENO FSSH_STDERR_FILENO
  389. |
  390. In file included from /usr/include/zconf.h:475,
  391. from /usr/include/zlib.h:34,
  392. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  393. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  394. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  395. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  396. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  397. /usr/include/unistd.h:212: note: this is the location of the previous definition
  398. 212 | #define STDERR_FILENO 2 /* Standard error output. */
  399. |
  400. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  401. from ../headers/private/kernel/util/AVLTree.h:9,
  402. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  403. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  404. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  405. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  406. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  407. ../headers/private/fs_shell/fssh_api_wrapper.h:1657: warning: "SEEK_SET" redefined
  408. 1657 | #define SEEK_SET FSSH_SEEK_SET
  409. |
  410. In file included from /usr/include/zconf.h:475,
  411. from /usr/include/zlib.h:34,
  412. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  413. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  414. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  415. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  416. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  417. /usr/include/unistd.h:311: note: this is the location of the previous definition
  418. 311 | # define SEEK_SET 0 /* Seek from beginning of file. */
  419. |
  420. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  421. from ../headers/private/kernel/util/AVLTree.h:9,
  422. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  423. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  424. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  425. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  426. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  427. ../headers/private/fs_shell/fssh_api_wrapper.h:1658: warning: "SEEK_CUR" redefined
  428. 1658 | #define SEEK_CUR FSSH_SEEK_CUR
  429. |
  430. In file included from /usr/include/zconf.h:475,
  431. from /usr/include/zlib.h:34,
  432. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  433. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  434. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  435. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  436. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  437. /usr/include/unistd.h:312: note: this is the location of the previous definition
  438. 312 | # define SEEK_CUR 1 /* Seek from current position. */
  439. |
  440. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  441. from ../headers/private/kernel/util/AVLTree.h:9,
  442. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  443. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  444. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  445. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  446. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  447. ../headers/private/fs_shell/fssh_api_wrapper.h:1659: warning: "SEEK_END" redefined
  448. 1659 | #define SEEK_END FSSH_SEEK_END
  449. |
  450. In file included from /usr/include/zconf.h:475,
  451. from /usr/include/zlib.h:34,
  452. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  453. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  454. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  455. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  456. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  457. /usr/include/unistd.h:313: note: this is the location of the previous definition
  458. 313 | # define SEEK_END 2 /* Seek from end of file. */
  459. |
  460. In file included from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  461. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.h:10,
  462. from ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:8:
  463. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:100:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  464. 100 | uuid_t fsid;
  465. | ^~~~~~
  466. | uid_t
  467. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:103:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  468. 103 | uuid_t chunk_tree_uuid;
  469. | ^~~~~~
  470. | uid_t
  471. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:169:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  472. 169 | uuid_t device_uuid;
  473. | ^~~~~~
  474. | uid_t
  475. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:215:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  476. 215 | uuid_t uuid;
  477. | ^~~~~~
  478. | uid_t
  479. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:216:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  480. 216 | uuid_t fsid;
  481. | ^~~~~~
  482. | uid_t
  483. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:222:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  484. 222 | uuid_t fsid;
  485. | ^~~~~~
  486. | uid_t
  487. ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp: In member function ‘fssh_status_t AttributeIterator::GetNext(char*, fssh_size_t*)’:
  488. ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:13:30: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘uint32_t’ {aka ‘unsigned int’} [-Wformat=]
  489. 13 | # define TRACE(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  490. | ^~~~~~~~~~~~~~~~~~~~~~~~~
  491. 14 | #else
  492. | ~~~~~
  493. 15 | # define TRACE(x...) ;
  494. | ~~~~~~~~~~~~~~~~~~~~~~
  495. 16 | #endif
  496. | ~~~~~~
  497. 17 | # define ERROR(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  498. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  499. 18 |
  500. |
  501. 19 |
  502. |
  503. 20 | AttributeIterator::AttributeIterator(Inode* inode)
  504. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  505. 21 | :
  506. | ~
  507. 22 | fOffset(-1ULL),
  508. | ~~~~~~~~~~~~~~~
  509. 23 | fInode(inode),
  510. | ~~~~~~~~~~~~~~
  511. 24 | fIterator(NULL)
  512. | ~~~~~~~~~~~~~~~
  513. 25 | {
  514. | ~
  515. 26 | btrfs_key key;
  516. | ~~~~~~~~~~~~~~
  517. 27 | key.SetType(BTRFS_KEY_TYPE_XATTR_ITEM);
  518. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  519. 28 | key.SetObjectID(inode->ID());
  520. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  521. 29 | key.SetOffset(BTREE_BEGIN);
  522. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  523. 30 | fIterator = new(std::nothrow) TreeIterator(inode->GetVolume()->FSTree(),
  524. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  525. 31 | key);
  526. | ~~~~~
  527. 32 | }
  528. | ~
  529. 33 |
  530. |
  531. 34 |
  532. |
  533. 35 | AttributeIterator::~AttributeIterator()
  534. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  535. 36 | {
  536. | ~
  537. 37 | delete fIterator;
  538. | ~~~~~~~~~~~~~~~~~
  539. 38 | fIterator = NULL;
  540. | ~~~~~~~~~~~~~~~~~
  541. 39 | }
  542. | ~
  543. 40 |
  544. |
  545. 41 |
  546. |
  547. 42 | status_t
  548. | ~~~~~~~~
  549. 43 | AttributeIterator::InitCheck()
  550. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  551. 44 | {
  552. | ~
  553. 45 | return fIterator != NULL ? B_OK : B_NO_MEMORY;
  554. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  555. 46 | }
  556. | ~
  557. 47 |
  558. |
  559. 48 |
  560. |
  561. 49 | status_t
  562. | ~~~~~~~~
  563. 50 | AttributeIterator::GetNext(char* name, size_t* _nameLength)
  564. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  565. 51 | {
  566. | ~
  567. 52 | btrfs_dir_entry* entries;
  568. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  569. 53 | uint32 entries_length;
  570. | ~~~~~~~~~~~~~~~~~~~~~~
  571. 54 | status_t status = fIterator->GetPreviousEntry((void**)&entries,
  572. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  573. 55 | &entries_length);
  574. | ~~~~~~~~~~~~~~~~~
  575. 56 | if (status != B_OK)
  576. | ~~~~~~~~~~~~~~~~~~~
  577. 57 | return status;
  578. | ~~~~~~~~~~~~~~
  579. 58 |
  580. |
  581. 59 | btrfs_dir_entry* entry = entries;
  582. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  583. 60 | uint16 current = 0;
  584. | ~~~~~~~~~~~~~~~~~~~
  585. 61 | while (current < entries_length) {
  586. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  587. 62 | current += entry->Length();
  588. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  589. 63 | break;
  590. | ~~~~~~
  591. 64 | // TODO there could be several entries with the same name hash
  592. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  593. 65 | entry = (btrfs_dir_entry*)((uint8*)entry + entry->Length());
  594. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  595. 66 | }
  596. | ~
  597. 67 |
  598. |
  599. 68 | TRACE("DirectoryIterator::GetNext() entries_length %ld name_length %d\n",
  600. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  601. 69 | entries_length, entry->NameLength());
  602. | ~~~~~~~~~~~~~~
  603. | |
  604. | uint32_t {aka unsigned int}
  605. ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:68:2: note: in expansion of macro ‘TRACE’
  606. 68 | TRACE("DirectoryIterator::GetNext() entries_length %ld name_length %d\n",
  607. | ^~~~~
  608. ../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp:68:55: note: format string is defined here
  609. 68 | TRACE("DirectoryIterator::GetNext() entries_length %ld name_length %d\n",
  610. | ~~^
  611. | |
  612. | long int
  613. | %d
  614.  
  615. gcc -c "../src/add-ons/kernel/file_systems/btrfs/AttributeIterator.cpp" -O2 -Wall -Wno-trigraphs -Wno-ctor-dtor-privacy -Woverloaded-virtual -Wpointer-arith -Wcast-align -Wsign-compare -Wno-multichar -DFS_SHELL -DTRACE_BTRFS -Wno-multichar -fno-rtti -DHAIKU_BUILD_COMPATIBILITY_H -DARCH_x86_64 -D_NO_INLINE_ASM -D__NO_INLINE__ -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DHAIKU_HOST_USE_XATTR_REF -DHAIKU_HOST_PLATFORM_LINUX -DHAIKU_HOST_PLATFORM_64_BIT -DHAIKU_PACKAGING_ARCH=\"x86_64\" -iquote ../build/user_config_headers -iquote ../build/config_headers -iquote ../src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/linux/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/haiku/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote ../src/add-ons/kernel/file_systems/btrfs -iquote ../src/tools/fs_shell -I ../headers/build -I ../headers/build/os -I ../headers/build/os/support -I ../headers/private/. -I ../headers/private/kernel -I ../headers/private/libroot -I ../headers/private/shared -I ../headers/private/kernel/boot/platform/bios_ia32 -I ../headers/private/kernel/arch/x86 -I objects/haiku/x86_64/common/system/kernel -I ../headers/private/. -I ../headers/private/system -I ../headers/private/system/arch/x86_64 -I ../headers/private/shared -I ../headers/private/storage -I ../headers/private/fs_shell -I ../headers/private -I ../headers/build/host/linux -o "objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/AttributeIterator.o"
  616.  
  617. ...failed C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/AttributeIterator.o ...
  618. C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/BTree.o
  619. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  620. from ../headers/private/kernel/util/AVLTree.h:9,
  621. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  622. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  623. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  624. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  625. ../headers/private/fs_shell/fssh_api_wrapper.h:1646: warning: "R_OK" redefined
  626. 1646 | #define R_OK FSSH_R_OK
  627. |
  628. In file included from /usr/include/zconf.h:475,
  629. from /usr/include/zlib.h:34,
  630. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  631. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  632. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  633. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  634. /usr/include/unistd.h:281: note: this is the location of the previous definition
  635. 281 | #define R_OK 4 /* Test for read permission. */
  636. |
  637. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  638. from ../headers/private/kernel/util/AVLTree.h:9,
  639. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  640. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  641. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  642. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  643. ../headers/private/fs_shell/fssh_api_wrapper.h:1647: warning: "W_OK" redefined
  644. 1647 | #define W_OK FSSH_W_OK
  645. |
  646. In file included from /usr/include/zconf.h:475,
  647. from /usr/include/zlib.h:34,
  648. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  649. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  650. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  651. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  652. /usr/include/unistd.h:282: note: this is the location of the previous definition
  653. 282 | #define W_OK 2 /* Test for write permission. */
  654. |
  655. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  656. from ../headers/private/kernel/util/AVLTree.h:9,
  657. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  658. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  659. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  660. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  661. ../headers/private/fs_shell/fssh_api_wrapper.h:1648: warning: "X_OK" redefined
  662. 1648 | #define X_OK FSSH_X_OK
  663. |
  664. In file included from /usr/include/zconf.h:475,
  665. from /usr/include/zlib.h:34,
  666. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  667. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  668. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  669. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  670. /usr/include/unistd.h:283: note: this is the location of the previous definition
  671. 283 | #define X_OK 1 /* Test for execute permission. */
  672. |
  673. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  674. from ../headers/private/kernel/util/AVLTree.h:9,
  675. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  676. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  677. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  678. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  679. ../headers/private/fs_shell/fssh_api_wrapper.h:1649: warning: "F_OK" redefined
  680. 1649 | #define F_OK FSSH_F_OK
  681. |
  682. In file included from /usr/include/zconf.h:475,
  683. from /usr/include/zlib.h:34,
  684. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  685. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  686. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  687. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  688. /usr/include/unistd.h:284: note: this is the location of the previous definition
  689. 284 | #define F_OK 0 /* Test for existence. */
  690. |
  691. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  692. from ../headers/private/kernel/util/AVLTree.h:9,
  693. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  694. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  695. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  696. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  697. ../headers/private/fs_shell/fssh_api_wrapper.h:1652: warning: "STDIN_FILENO" redefined
  698. 1652 | #define STDIN_FILENO FSSH_STDIN_FILENO
  699. |
  700. In file included from /usr/include/zconf.h:475,
  701. from /usr/include/zlib.h:34,
  702. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  703. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  704. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  705. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  706. /usr/include/unistd.h:210: note: this is the location of the previous definition
  707. 210 | #define STDIN_FILENO 0 /* Standard input. */
  708. |
  709. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  710. from ../headers/private/kernel/util/AVLTree.h:9,
  711. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  712. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  713. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  714. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  715. ../headers/private/fs_shell/fssh_api_wrapper.h:1653: warning: "STDOUT_FILENO" redefined
  716. 1653 | #define STDOUT_FILENO FSSH_STDOUT_FILENO
  717. |
  718. In file included from /usr/include/zconf.h:475,
  719. from /usr/include/zlib.h:34,
  720. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  721. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  722. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  723. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  724. /usr/include/unistd.h:211: note: this is the location of the previous definition
  725. 211 | #define STDOUT_FILENO 1 /* Standard output. */
  726. |
  727. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  728. from ../headers/private/kernel/util/AVLTree.h:9,
  729. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  730. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  731. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  732. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  733. ../headers/private/fs_shell/fssh_api_wrapper.h:1654: warning: "STDERR_FILENO" redefined
  734. 1654 | #define STDERR_FILENO FSSH_STDERR_FILENO
  735. |
  736. In file included from /usr/include/zconf.h:475,
  737. from /usr/include/zlib.h:34,
  738. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  739. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  740. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  741. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  742. /usr/include/unistd.h:212: note: this is the location of the previous definition
  743. 212 | #define STDERR_FILENO 2 /* Standard error output. */
  744. |
  745. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  746. from ../headers/private/kernel/util/AVLTree.h:9,
  747. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  748. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  749. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  750. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  751. ../headers/private/fs_shell/fssh_api_wrapper.h:1657: warning: "SEEK_SET" redefined
  752. 1657 | #define SEEK_SET FSSH_SEEK_SET
  753. |
  754. In file included from /usr/include/zconf.h:475,
  755. from /usr/include/zlib.h:34,
  756. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  757. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  758. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  759. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  760. /usr/include/unistd.h:311: note: this is the location of the previous definition
  761. 311 | # define SEEK_SET 0 /* Seek from beginning of file. */
  762. |
  763. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  764. from ../headers/private/kernel/util/AVLTree.h:9,
  765. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  766. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  767. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  768. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  769. ../headers/private/fs_shell/fssh_api_wrapper.h:1658: warning: "SEEK_CUR" redefined
  770. 1658 | #define SEEK_CUR FSSH_SEEK_CUR
  771. |
  772. In file included from /usr/include/zconf.h:475,
  773. from /usr/include/zlib.h:34,
  774. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  775. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  776. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  777. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  778. /usr/include/unistd.h:312: note: this is the location of the previous definition
  779. 312 | # define SEEK_CUR 1 /* Seek from current position. */
  780. |
  781. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  782. from ../headers/private/kernel/util/AVLTree.h:9,
  783. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  784. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  785. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  786. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  787. ../headers/private/fs_shell/fssh_api_wrapper.h:1659: warning: "SEEK_END" redefined
  788. 1659 | #define SEEK_END FSSH_SEEK_END
  789. |
  790. In file included from /usr/include/zconf.h:475,
  791. from /usr/include/zlib.h:34,
  792. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  793. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  794. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  795. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  796. /usr/include/unistd.h:313: note: this is the location of the previous definition
  797. 313 | # define SEEK_END 2 /* Seek from end of file. */
  798. |
  799. In file included from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  800. from ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:12:
  801. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:100:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  802. 100 | uuid_t fsid;
  803. | ^~~~~~
  804. | uid_t
  805. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:103:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  806. 103 | uuid_t chunk_tree_uuid;
  807. | ^~~~~~
  808. | uid_t
  809. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:169:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  810. 169 | uuid_t device_uuid;
  811. | ^~~~~~
  812. | uid_t
  813. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:215:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  814. 215 | uuid_t uuid;
  815. | ^~~~~~
  816. | uid_t
  817. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:216:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  818. 216 | uuid_t fsid;
  819. | ^~~~~~
  820. | uid_t
  821. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:222:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  822. 222 | uuid_t fsid;
  823. | ^~~~~~
  824. | uid_t
  825. ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp: In member function ‘int BTree::Path::Move(int, int)’:
  826. ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:387:20: warning: comparison of integer expressions of different signedness: ‘int’ and ‘uint32_t’ {aka ‘unsigned int’} [-Wsign-compare]
  827. 387 | if (fSlots[level] >= fNodes[level]->ItemCount())
  828. | ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  829. ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp: In member function ‘fssh_status_t BTree::Path::GetEntry(int, btrfs_key*, void**, uint32_t*, uint32_t*)’:
  830. ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:398:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘uint32_t’ {aka ‘unsigned int’} [-Wsign-compare]
  831. 398 | if (slot < 0 || slot >= leaf->ItemCount())
  832. | ~~~~~^~~~~~~~~~~~~~~~~~~~
  833. ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp: In member function ‘fssh_status_t BTree::MakeEntries(Transaction&, BTree::Path*, const btrfs_key&, int, int)’:
  834. ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:20:30: warning: ' ' flag used with ‘%u’ gnu_printf format [-Wformat=]
  835. 20 | # define TRACE(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  836. | ^~~~~~~~~~~~~~~~~~~~~~~~~
  837. 21 | #else
  838. | ~~~~~
  839. 22 | # define TRACE(x...) ;
  840. | ~~~~~~~~~~~~~~~~~~~~~~
  841. 23 | #endif
  842. | ~~~~~~
  843. 24 | # define ERROR(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  844. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  845. 25 |
  846. |
  847. 26 |
  848. |
  849. 27 | BTree::Node::Node(Volume* volume)
  850. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  851. 28 | :
  852. | ~
  853. 29 | fNode(NULL),
  854. | ~~~~~~~~~~~~
  855. 30 | fVolume(volume),
  856. | ~~~~~~~~~~~~~~~~
  857. 31 | fBlockNumber(0),
  858. | ~~~~~~~~~~~~~~~~
  859. 32 | fWritable(false)
  860. | ~~~~~~~~~~~~~~~~
  861. 33 | {
  862. | ~
  863. 34 | }
  864. | ~
  865. 35 |
  866. |
  867. 36 |
  868. |
  869. 37 | BTree::Node::Node(Volume* volume, off_t block)
  870. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  871. 38 | :
  872. | ~
  873. 39 | fNode(NULL),
  874. | ~~~~~~~~~~~~
  875. 40 | fVolume(volume),
  876. | ~~~~~~~~~~~~~~~~
  877. 41 | fBlockNumber(0),
  878. | ~~~~~~~~~~~~~~~~
  879. 42 | fWritable(false)
  880. | ~~~~~~~~~~~~~~~~
  881. 43 | {
  882. | ~
  883. 44 | SetTo(block);
  884. | ~~~~~~~~~~~~~
  885. 45 | }
  886. | ~
  887. 46 |
  888. |
  889. 47 |
  890. |
  891. 48 | BTree::Node::~Node()
  892. | ~~~~~~~~~~~~~~~~~~~~
  893. 49 | {
  894. | ~
  895. 50 | Unset();
  896. | ~~~~~~~~
  897. 51 | }
  898. | ~
  899. 52 |
  900. |
  901. 53 |
  902. |
  903. 54 | void
  904. | ~~~~
  905. 55 | BTree::Node::Keep()
  906. | ~~~~~~~~~~~~~~~~~~~
  907. 56 | {
  908. | ~
  909. 57 | fNode = NULL;
  910. | ~~~~~~~~~~~~~
  911. 58 | }
  912. | ~
  913. 59 |
  914. |
  915. 60 |
  916. |
  917. 61 | void
  918. | ~~~~
  919. 62 | BTree::Node::Unset()
  920. | ~~~~~~~~~~~~~~~~~~~~
  921. 63 | {
  922. | ~
  923. 64 | if (fNode != NULL) {
  924. | ~~~~~~~~~~~~~~~~~~~~
  925. 65 | block_cache_put(fVolume->BlockCache(), fBlockNumber);
  926. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  927. 66 | fNode = NULL;
  928. | ~~~~~~~~~~~~~
  929. 67 | }
  930. | ~
  931. 68 | }
  932. | ~
  933. 69 |
  934. |
  935. 70 |
  936. |
  937. 71 | void
  938. | ~~~~
  939. 72 | BTree::Node::SetTo(off_t block)
  940. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  941. 73 | {
  942. | ~
  943. 74 | Unset();
  944. | ~~~~~~~~
  945. 75 | fBlockNumber = block;
  946. | ~~~~~~~~~~~~~~~~~~~~~
  947. 76 | fNode = (btrfs_stream*)block_cache_get(fVolume->BlockCache(), block);
  948. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  949. 77 | }
  950. | ~
  951. 78 |
  952. |
  953. 79 |
  954. |
  955. 80 | void
  956. | ~~~~
  957. 81 | BTree::Node::SetToWritable(off_t block, int32 transactionId, bool empty)
  958. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  959. 82 | {
  960. | ~
  961. 83 | Unset();
  962. | ~~~~~~~~
  963. 84 | fBlockNumber = block;
  964. | ~~~~~~~~~~~~~~~~~~~~~
  965. 85 | fWritable = true;
  966. | ~~~~~~~~~~~~~~~~~
  967. 86 | if (empty) {
  968. | ~~~~~~~~~~~~
  969. 87 | fNode = (btrfs_stream*)block_cache_get_empty(fVolume->BlockCache(),
  970. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  971. 88 | block, transactionId);
  972. | ~~~~~~~~~~~~~~~~~~~~~~
  973. 89 | } else {
  974. | ~~~~~~~~
  975. 90 | fNode = (btrfs_stream*)block_cache_get_writable(fVolume->BlockCache(),
  976. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  977. 91 | block, transactionId);
  978. | ~~~~~~~~~~~~~~~~~~~~~~
  979. 92 | }
  980. | ~
  981. 93 | }
  982. | ~
  983. 94 |
  984. |
  985. 95 |
  986. |
  987. 96 | status_t
  988. | ~~~~~~~~
  989. 97 | BTree::Node::SearchSlot(const btrfs_key& key, int* slot, btree_traversing type)
  990. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  991. 98 | const
  992. | ~~~~~
  993. 99 | {
  994. | ~
  995. 100 | // binary search for item slot in a node
  996. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  997. 101 | int entrySize = sizeof(btrfs_entry);
  998. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  999. 102 | if (Level() != 0) {
  1000. | ~~~~~~~~~~~~~~~~~~~
  1001. 103 | // internal node
  1002. | ~~~~~~~~~~~~~~~~
  1003. 104 | entrySize = sizeof(btrfs_index);
  1004. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1005. 105 | }
  1006. | ~
  1007. 106 |
  1008. |
  1009. 107 | int high = ItemCount();
  1010. | ~~~~~~~~~~~~~~~~~~~~~~~
  1011. 108 | int low = 0, mid = 0, comp = 0;
  1012. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1013. 109 | uint8* base = (uint8*)fNode + sizeof(btrfs_header);
  1014. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1015. 110 | const btrfs_key* other;
  1016. | ~~~~~~~~~~~~~~~~~~~~~~~
  1017. 111 | while (low < high) {
  1018. | ~~~~~~~~~~~~~~~~~~~~
  1019. 112 | mid = (low + high) / 2;
  1020. | ~~~~~~~~~~~~~~~~~~~~~~~
  1021. 113 | other = (const btrfs_key*)(base + mid * entrySize);
  1022. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1023. 114 | comp = key.Compare(*other);
  1024. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1025. 115 | if (comp < 0)
  1026. | ~~~~~~~~~~~~~
  1027. 116 | high = mid;
  1028. | ~~~~~~~~~~~
  1029. 117 | else if (comp > 0)
  1030. | ~~~~~~~~~~~~~~~~~~
  1031. 118 | low = mid + 1;
  1032. | ~~~~~~~~~~~~~~
  1033. 119 | else {
  1034. | ~~~~~~
  1035. 120 | *slot = mid;
  1036. | ~~~~~~~~~~~~
  1037. 121 | return B_OK; // if key is in node
  1038. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1039. 122 | }
  1040. | ~
  1041. 123 | }
  1042. | ~
  1043. 124 |
  1044. |
  1045. 125 | // |--item1--|--item2--|--item3--|--etc--|
  1046. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1047. 126 | // m-1 m m+1
  1048. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1049. 127 | // k : comp < 0
  1050. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1051. 128 | // k : comp > 0
  1052. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1053. 129 | if (type == BTREE_BACKWARD && comp < 0)
  1054. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1055. 130 | mid--;
  1056. | ~~~~~~
  1057. 131 | else if (type == BTREE_FORWARD && comp > 0)
  1058. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1059. 132 | mid++;
  1060. | ~~~~~~
  1061. 133 |
  1062. |
  1063. 134 | if (type == BTREE_EXACT || mid < 0)
  1064. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1065. 135 | return B_ENTRY_NOT_FOUND;
  1066. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  1067. 136 |
  1068. |
  1069. 137 | *slot = mid;
  1070. | ~~~~~~~~~~~~
  1071. 138 | TRACE("SearchSlot() found slot %" B_PRId32 " comp %" B_PRId32 "\n",
  1072. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1073. 139 | *slot, comp);
  1074. | ~~~~~~~~~~~~~
  1075. 140 | return B_OK;
  1076. | ~~~~~~~~~~~~
  1077. 141 | }
  1078. | ~
  1079. 142 |
  1080. |
  1081. 143 |
  1082. |
  1083. 144 | /*
  1084. | ~~
  1085. 145 | * calculate used space except the header.
  1086. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1087. 146 | * type is only for leaf node
  1088. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1089. 147 | * type 1: only item space
  1090. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  1091. 148 | * type 2: only item data space
  1092. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1093. 149 | * type 3: both type 1 and 2
  1094. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1095. 150 | */
  1096. | ~~
  1097. 151 | int
  1098. | ~~~
  1099. 152 | BTree::Node::_CalculateSpace(uint32 from, uint32 to, uint8 type) const
  1100. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1101. 153 | {
  1102. | ~
  1103. 154 | if (to < from || to >= ItemCount())
  1104. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1105. 155 | return 0;
  1106. | ~~~~~~~~~
  1107. 156 |
  1108. |
  1109. 157 | if (Level() != 0)
  1110. | ~~~~~~~~~~~~~~~~~
  1111. 158 | return sizeof(btrfs_index) * (to - from + 1);
  1112. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1113. 159 |
  1114. |
  1115. 160 | uint32 result = 0;
  1116. | ~~~~~~~~~~~~~~~~~~
  1117. 161 | if ((type & 1) == 1) {
  1118. | ~~~~~~~~~~~~~~~~~~~~~~
  1119. 162 | result += sizeof(btrfs_entry) * (to - from + 1);
  1120. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1121. 163 | }
  1122. | ~
  1123. 164 | if ((type & 2) == 2) {
  1124. | ~~~~~~~~~~~~~~~~~~~~~~
  1125. 165 | result += Item(from)->Offset() + Item(from)->Size()
  1126. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1127. 166 | - Item(to)->Offset();
  1128. | ~~~~~~~~~~~~~~~~~~~~~
  1129. 167 | }
  1130. | ~
  1131. 168 |
  1132. |
  1133. 169 | return result;
  1134. | ~~~~~~~~~~~~~~
  1135. 170 | }
  1136. | ~
  1137. 171 |
  1138. |
  1139. 172 |
  1140. |
  1141. 173 | int
  1142. | ~~~
  1143. 174 | BTree::Node::SpaceUsed() const
  1144. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1145. 175 | {
  1146. | ~
  1147. 176 | if (Level() == 0)
  1148. | ~~~~~~~~~~~~~~~~~
  1149. 177 | return _CalculateSpace(0, ItemCount() - 1, 3);
  1150. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1151. 178 | return _CalculateSpace(0, ItemCount() - 1, 0);
  1152. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1153. 179 | }
  1154. | ~
  1155. 180 |
  1156. |
  1157. 181 |
  1158. |
  1159. 182 | int
  1160. | ~~~
  1161. 183 | BTree::Node::SpaceLeft() const
  1162. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1163. 184 | {
  1164. | ~
  1165. 185 | return fVolume->BlockSize() - SpaceUsed() - sizeof(btrfs_header);
  1166. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1167. 186 | }
  1168. | ~
  1169. 187 |
  1170. |
  1171. 188 |
  1172. |
  1173. 189 | void
  1174. | ~~~~
  1175. 190 | BTree::Node::_Copy(const Node* origin, uint32 at, uint32 from, uint32 to,
  1176. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1177. 191 | int length) const
  1178. | ~~~~~~~~~~~~~~~~~
  1179. 192 | {
  1180. | ~
  1181. 193 | TRACE("Node::_Copy() at: %d from: %d to: %d length: %d\n",
  1182. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1183. 194 | at, from, to, length);
  1184. | ~~~~~~~~~~~~~~~~~~~~~~
  1185. 195 |
  1186. |
  1187. 196 | if (Level() == 0) {
  1188. | ~~~~~~~~~~~~~~~~~~~
  1189. 197 | memcpy(Item(at), origin->Item(from), origin->_CalculateSpace(from, to));
  1190. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1191. 198 | // Item offset of copied node must be changed to get the
  1192. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1193. 199 | // item data offset correctly. length can be zero
  1194. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1195. 200 | // but let it there doesn't harm anything.
  1196. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1197. 201 | for (uint32 i = at; i - at <= to - from; ++i)
  1198. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1199. 202 | Item(i)->SetOffset(Item(i)->Offset() - length);
  1200. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1201. 203 |
  1202. |
  1203. 204 | memcpy(ItemData(at + to - from), origin->ItemData(to),
  1204. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1205. 205 | origin->_CalculateSpace(from, to, 2));
  1206. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1207. 206 | } else {
  1208. | ~~~~~~~~
  1209. 207 | memcpy(Index(at), origin->Index(from),
  1210. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1211. 208 | origin->_CalculateSpace(from, to));
  1212. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1213. 209 | }
  1214. | ~
  1215. 210 | }
  1216. | ~
  1217. 211 |
  1218. |
  1219. 212 |
  1220. |
  1221. 213 | status_t
  1222. | ~~~~~~~~
  1223. 214 | BTree::Node::_SpaceCheck(int length) const
  1224. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1225. 215 | {
  1226. | ~
  1227. 216 | // this is a little bit weird here because we can't find
  1228. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1229. 217 | // any suitable error code
  1230. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  1231. 218 | if (length < 0 && std::abs(length) >= SpaceUsed())
  1232. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1233. 219 | return B_DIRECTORY_NOT_EMPTY; // not enough data to delete
  1234. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1235. 220 | if (length > 0 && length >= SpaceLeft())
  1236. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1237. 221 | return B_DEVICE_FULL; // no spare space
  1238. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1239. 222 | return B_OK;
  1240. | ~~~~~~~~~~~~
  1241. 223 | }
  1242. | ~
  1243. 224 |
  1244. |
  1245. 225 |
  1246. |
  1247. 226 | /*
  1248. | ~~
  1249. 227 | * copy node header, items and items data
  1250. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1251. 228 | * length is size to insert/remove
  1252. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1253. 229 | * if node is a internal node, length isnt used
  1254. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1255. 230 | * length = 0: Copy a whole
  1256. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  1257. 231 | * length < 0: removing
  1258. | ~~~~~~~~~~~~~~~~~~~~~~
  1259. 232 | * length > 0: inserting
  1260. | ~~~~~~~~~~~~~~~~~~~~~~~
  1261. 233 | */
  1262. | ~~
  1263. 234 | status_t
  1264. | ~~~~~~~~
  1265. 235 | BTree::Node::Copy(const Node* origin, uint32 start, uint32 end, int length)
  1266. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1267. 236 | const
  1268. | ~~~~~
  1269. 237 | {
  1270. | ~
  1271. 238 | status_t status = origin->_SpaceCheck(length);
  1272. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1273. 239 | if (status != B_OK)
  1274. | ~~~~~~~~~~~~~~~~~~~
  1275. 240 | return status;
  1276. | ~~~~~~~~~~~~~~
  1277. 241 |
  1278. |
  1279. 242 | memcpy(fNode, origin->fNode, sizeof(btrfs_header));
  1280. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1281. 243 | if (length == 0) {
  1282. | ~~~~~~~~~~~~~~~~~~
  1283. 244 | // like removing [0, start - 1] and keeping [start, end]
  1284. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1285. 245 | length = -origin->_CalculateSpace(0, start - 1, 2);
  1286. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1287. 246 | _Copy(origin, 0, start, end, length);
  1288. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1289. 247 | } else if (length < 0) {
  1290. | ~~~~~~~~~~~~~~~~~~~~~~~~
  1291. 248 | // removing all items in [start, end]
  1292. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1293. 249 | if (start > 0)
  1294. | ~~~~~~~~~~~~~~
  1295. 250 | _Copy(origin, 0, 0, start - 1, 0); // <-- [start,...
  1296. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1297. 251 | if (end + 1 < origin->ItemCount()) {
  1298. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1299. 252 | // ..., end] -->
  1300. | ~~~~~~~~~~~~~~~~
  1301. 253 | // we only care data size
  1302. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  1303. 254 | length += origin->_CalculateSpace(start, end);
  1304. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1305. 255 | _Copy(origin, start, end + 1, origin->ItemCount() - 1, length);
  1306. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1307. 256 | }
  1308. | ~
  1309. 257 | } else {
  1310. | ~~~~~~~~
  1311. 258 | // inserting in [start, end] - make a hole for later
  1312. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1313. 259 | if (start > 0)
  1314. | ~~~~~~~~~~~~~~
  1315. 260 | _Copy(origin, 0, 0, start - 1, 0);
  1316. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1317. 261 | if (start < origin->ItemCount()) {
  1318. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1319. 262 | length -= origin->_CalculateSpace(start, end);
  1320. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1321. 263 | _Copy(origin, end + 1, start, origin->ItemCount() - 1, length);
  1322. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1323. 264 | }
  1324. | ~
  1325. 265 | }
  1326. | ~
  1327. 266 |
  1328. |
  1329. 267 | return B_OK;
  1330. | ~~~~~~~~~~~~
  1331. 268 | }
  1332. | ~
  1333. 269 |
  1334. |
  1335. 270 |
  1336. |
  1337. 271 | /* Like copy but here we use memmove on current node.
  1338. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1339. 272 | */
  1340. | ~~
  1341. 273 | status_t
  1342. | ~~~~~~~~
  1343. 274 | BTree::Node::MoveEntries(uint32 start, uint32 end, int length) const
  1344. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1345. 275 | {
  1346. | ~
  1347. 276 | status_t status = _SpaceCheck(length);
  1348. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1349. 277 | if (status != B_OK || length == 0/*B_OK*/)
  1350. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1351. 278 | return status;
  1352. | ~~~~~~~~~~~~~~
  1353. 279 |
  1354. |
  1355. 280 | int entrySize = sizeof(btrfs_entry);
  1356. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1357. 281 | if (Level() != 0)
  1358. | ~~~~~~~~~~~~~~~~~
  1359. 282 | entrySize = sizeof(btrfs_index);
  1360. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1361. 283 |
  1362. |
  1363. 284 | uint8* base = (uint8*)fNode + sizeof(btrfs_header);
  1364. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1365. 285 | end++;
  1366. | ~~~~~~
  1367. 286 | if (length < 0) {
  1368. | ~~~~~~~~~~~~~~~~~
  1369. 287 | // removing [start, end]
  1370. | ~~~~~~~~~~~~~~~~~~~~~~~~
  1371. 288 | TRACE("Node::MoveEntries() removing ... start %" B_PRIu32 " end %"
  1372. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1373. 289 | B_PRIu32 " length %i\n", start, end, length);
  1374. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1375. 290 | length += _CalculateSpace(start, end - 1);
  1376. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1377. 291 | } else {
  1378. | ~~~~~~~~
  1379. 292 | // length > 0
  1380. | ~~~~~~~~~~~~~
  1381. 293 | // inserting into [start, end] - make room for later
  1382. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1383. 294 | TRACE("Node::MoveEntries() inserting ... start %" B_PRIu32 " end %"
  1384. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1385. 295 | B_PRIu32 " length %i\n", start, end, length);
  1386. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1387. 296 | length -= _CalculateSpace(start, end - 1);
  1388. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1389. 297 | std::swap(start, end);
  1390. | ~~~~~~~~~~~~~~~~~~~~~~
  1391. 298 | }
  1392. | ~
  1393. 299 |
  1394. |
  1395. 300 | if (end >= ItemCount())
  1396. | ~~~~~~~~~~~~~~~~~~~~~~~
  1397. 301 | return B_OK;
  1398. | ~~~~~~~~~~~~
  1399. 302 |
  1400. |
  1401. 303 | int dataSize = _CalculateSpace(end, ItemCount() - 1, 2);
  1402. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1403. 304 | // moving items/block pointers
  1404. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1405. 305 | memmove(base + start * entrySize, base + end * entrySize,
  1406. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1407. 306 | _CalculateSpace(end, ItemCount() - 1));
  1408. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1409. 307 | if (Level() == 0) {
  1410. | ~~~~~~~~~~~~~~~~~~~
  1411. 308 | // moving item data
  1412. | ~~~~~~~~~~~~~~~~~~~
  1413. 309 | int num = start - end;
  1414. | ~~~~~~~~~~~~~~~~~~~~~~
  1415. 310 | for (uint32 i = start; i < ItemCount() + num; ++i)
  1416. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1417. 311 | Item(i)->SetOffset(Item(i)->Offset() - length);
  1418. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1419. 312 |
  1420. |
  1421. 313 | memmove(ItemData(ItemCount() - 1) - length, ItemData(ItemCount() - 1),
  1422. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1423. 314 | dataSize);
  1424. | ~~~~~~~~~~
  1425. 315 | }
  1426. | ~
  1427. 316 |
  1428. |
  1429. 317 | return B_OK;
  1430. | ~~~~~~~~~~~~
  1431. 318 | }
  1432. | ~
  1433. 319 |
  1434. |
  1435. 320 |
  1436. |
  1437. 321 | // #pragma mark - BTree::Path implementation
  1438. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1439. 322 |
  1440. |
  1441. 323 |
  1442. |
  1443. 324 | BTree::Path::Path(BTree* tree)
  1444. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1445. 325 | :
  1446. | ~
  1447. 326 | fTree(tree)
  1448. | ~~~~~~~~~~~
  1449. 327 | {
  1450. | ~
  1451. 328 | for (int i = 0; i < BTRFS_MAX_TREE_DEPTH; ++i) {
  1452. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1453. 329 | fNodes[i] = NULL;
  1454. | ~~~~~~~~~~~~~~~~~
  1455. 330 | fSlots[i] = 0;
  1456. | ~~~~~~~~~~~~~~
  1457. 331 | }
  1458. | ~
  1459. 332 | }
  1460. | ~
  1461. 333 |
  1462. |
  1463. 334 |
  1464. |
  1465. 335 | BTree::Path::~Path()
  1466. | ~~~~~~~~~~~~~~~~~~~~
  1467. 336 | {
  1468. | ~
  1469. 337 | for (int i = 0; i < BTRFS_MAX_TREE_DEPTH; ++i) {
  1470. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1471. 338 | delete fNodes[i];
  1472. | ~~~~~~~~~~~~~~~~~
  1473. 339 | fNodes[i] = NULL;
  1474. | ~~~~~~~~~~~~~~~~~
  1475. 340 | fSlots[i] = 0;
  1476. | ~~~~~~~~~~~~~~
  1477. 341 | }
  1478. | ~
  1479. 342 | }
  1480. | ~
  1481. 343 |
  1482. |
  1483. 344 |
  1484. |
  1485. 345 | BTree::Node*
  1486. | ~~~~~~~~~~~~
  1487. 346 | BTree::Path::GetNode(int level, int* _slot) const
  1488. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1489. 347 | {
  1490. | ~
  1491. 348 | if (_slot != NULL)
  1492. | ~~~~~~~~~~~~~~~~~~
  1493. 349 | *_slot = fSlots[level];
  1494. | ~~~~~~~~~~~~~~~~~~~~~~~
  1495. 350 | return fNodes[level];
  1496. | ~~~~~~~~~~~~~~~~~~~~~
  1497. 351 | }
  1498. | ~
  1499. 352 |
  1500. |
  1501. 353 |
  1502. |
  1503. 354 | BTree::Node*
  1504. | ~~~~~~~~~~~~
  1505. 355 | BTree::Path::SetNode(off_t block, int slot)
  1506. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1507. 356 | {
  1508. | ~
  1509. 357 | Node node(fTree->SystemVolume(), block);
  1510. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1511. 358 | return SetNode(&node, slot);
  1512. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1513. 359 | }
  1514. | ~
  1515. 360 |
  1516. |
  1517. 361 |
  1518. |
  1519. 362 | BTree::Node*
  1520. | ~~~~~~~~~~~~
  1521. 363 | BTree::Path::SetNode(const Node* node, int slot)
  1522. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1523. 364 | {
  1524. | ~
  1525. 365 | uint8 level = node->Level();
  1526. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1527. 366 | if (fNodes[level] == NULL) {
  1528. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1529. 367 | fNodes[level] = new Node(fTree->SystemVolume(), node->BlockNum());
  1530. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1531. 368 | if (fNodes[level] == NULL)
  1532. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  1533. 369 | return NULL;
  1534. | ~~~~~~~~~~~~
  1535. 370 | } else
  1536. | ~~~~~~
  1537. 371 | fNodes[level]->SetTo(node->BlockNum());
  1538. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1539. 372 |
  1540. |
  1541. 373 | if (slot == -1)
  1542. | ~~~~~~~~~~~~~~~
  1543. 374 | fSlots[level] = fNodes[level]->ItemCount() - 1;
  1544. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1545. 375 | else
  1546. | ~~~~
  1547. 376 | fSlots[level] = slot;
  1548. | ~~~~~~~~~~~~~~~~~~~~~
  1549. 377 | return fNodes[level];
  1550. | ~~~~~~~~~~~~~~~~~~~~~
  1551. 378 | }
  1552. | ~
  1553. 379 |
  1554. |
  1555. 380 |
  1556. |
  1557. 381 | int
  1558. | ~~~
  1559. 382 | BTree::Path::Move(int level, int step)
  1560. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1561. 383 | {
  1562. | ~
  1563. 384 | fSlots[level] += step;
  1564. | ~~~~~~~~~~~~~~~~~~~~~~
  1565. 385 | if (fSlots[level] < 0)
  1566. | ~~~~~~~~~~~~~~~~~~~~~~
  1567. 386 | return -1;
  1568. | ~~~~~~~~~~
  1569. 387 | if (fSlots[level] >= fNodes[level]->ItemCount())
  1570. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1571. 388 | return 1;
  1572. | ~~~~~~~~~
  1573. 389 | return 0;
  1574. | ~~~~~~~~~
  1575. 390 | }
  1576. | ~
  1577. 391 |
  1578. |
  1579. 392 |
  1580. |
  1581. 393 | status_t
  1582. | ~~~~~~~~
  1583. 394 | BTree::Path::GetEntry(int slot, btrfs_key* _key, void** _value, uint32* _size,
  1584. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1585. 395 | uint32* _offset)
  1586. | ~~~~~~~~~~~~~~~~
  1587. 396 | {
  1588. | ~
  1589. 397 | BTree::Node* leaf = fNodes[0];
  1590. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1591. 398 | if (slot < 0 || slot >= leaf->ItemCount())
  1592. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1593. 399 | return B_ENTRY_NOT_FOUND;
  1594. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  1595. 400 |
  1596. |
  1597. 401 | if (_key != NULL)
  1598. | ~~~~~~~~~~~~~~~~~
  1599. 402 | *_key = leaf->Item(slot)->key;
  1600. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1601. 403 |
  1602. |
  1603. 404 | uint32 itemSize = leaf->Item(slot)->Size();
  1604. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1605. 405 | if (_value != NULL) {
  1606. | ~~~~~~~~~~~~~~~~~~~~~
  1607. 406 | *_value = malloc(itemSize);
  1608. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1609. 407 | if (*_value == NULL)
  1610. | ~~~~~~~~~~~~~~~~~~~~
  1611. 408 | return B_NO_MEMORY;
  1612. | ~~~~~~~~~~~~~~~~~~~
  1613. 409 |
  1614. |
  1615. 410 | memcpy(*_value, leaf->ItemData(slot), itemSize);
  1616. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1617. 411 | }
  1618. | ~
  1619. 412 |
  1620. |
  1621. 413 | if (_size != NULL)
  1622. | ~~~~~~~~~~~~~~~~~~
  1623. 414 | *_size = itemSize;
  1624. | ~~~~~~~~~~~~~~~~~~
  1625. 415 |
  1626. |
  1627. 416 | if (_offset != NULL)
  1628. | ~~~~~~~~~~~~~~~~~~~~
  1629. 417 | *_offset = leaf->Item(slot)->Offset();
  1630. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1631. 418 |
  1632. |
  1633. 419 | return B_OK;
  1634. | ~~~~~~~~~~~~
  1635. 420 | }
  1636. | ~
  1637. 421 |
  1638. |
  1639. 422 |
  1640. |
  1641. 423 | status_t
  1642. | ~~~~~~~~
  1643. 424 | BTree::Path::SetEntry(int slot, const btrfs_entry& entry, void* value)
  1644. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1645. 425 | {
  1646. | ~
  1647. 426 | if (slot < 0)
  1648. | ~~~~~~~~~~~~~
  1649. 427 | return B_ENTRY_NOT_FOUND;
  1650. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  1651. 428 |
  1652. |
  1653. 429 | memcpy(fNodes[0]->Item(slot), &entry, sizeof(btrfs_entry));
  1654. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1655. 430 | memcpy(fNodes[0]->ItemData(slot), value, entry.Size());
  1656. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1657. 431 | return B_OK;
  1658. | ~~~~~~~~~~~~
  1659. 432 | }
  1660. | ~
  1661. 433 |
  1662. |
  1663. 434 |
  1664. |
  1665. 435 | /*
  1666. | ~~
  1667. 436 | * Allocate and copy block and do all the changes that it can.
  1668. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1669. 437 | * for now, we only copy-on-write tree block,
  1670. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1671. 438 | * file data is "nocow" by default.
  1672. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1673. 439 | *
  1674. | ~
  1675. 440 | * o parent o
  1676. | ~~~~~~~~~~~~~
  1677. 441 | * | ===> \
  1678. | ~~~~~~~~~~~~~~
  1679. 442 | * o x o
  1680. | ~~~~~~~~~~~~~~~
  1681. 443 | */
  1682. | ~~
  1683. 444 | status_t
  1684. | ~~~~~~~~
  1685. 445 | BTree::Path::CopyOnWrite(Transaction& transaction, int level, uint32 start,
  1686. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1687. 446 | int num, int length)
  1688. | ~~~~~~~~~~~~~~~~~~~~
  1689. 447 | {
  1690. | ~
  1691. 448 | Node* node = fNodes[level];
  1692. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1693. 449 | if (node == NULL)
  1694. | ~~~~~~~~~~~~~~~~~
  1695. 450 | return B_BAD_VALUE;
  1696. | ~~~~~~~~~~~~~~~~~~~
  1697. 451 |
  1698. |
  1699. 452 | status_t status;
  1700. | ~~~~~~~~~~~~~~~~
  1701. 453 | if (transaction.HasBlock(node->BlockNum())) {
  1702. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1703. 454 | // cow-ed block can not be cow-ed again
  1704. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1705. 455 | status = node->MoveEntries(start, start + num - 1, length);
  1706. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1707. 456 | if (status != B_OK)
  1708. | ~~~~~~~~~~~~~~~~~~~
  1709. 457 | return status;
  1710. | ~~~~~~~~~~~~~~
  1711. 458 |
  1712. |
  1713. 459 | node->SetGeneration(transaction.SystemID());
  1714. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1715. 460 | if (length < 0)
  1716. | ~~~~~~~~~~~~~~~
  1717. 461 | node->SetItemCount(node->ItemCount() - num);
  1718. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1719. 462 | else if (length > 0)
  1720. | ~~~~~~~~~~~~~~~~~~~~
  1721. 463 | node->SetItemCount(node->ItemCount() + num);
  1722. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1723. 464 |
  1724. |
  1725. 465 | return B_OK;
  1726. | ~~~~~~~~~~~~
  1727. 466 | }
  1728. | ~
  1729. 467 |
  1730. |
  1731. 468 | uint64 address;
  1732. | ~~~~~~~~~~~~~~~
  1733. 469 | fsblock_t block;
  1734. | ~~~~~~~~~~~~~~~~
  1735. 470 | status = fTree->SystemVolume()->GetNewBlock(address, block);
  1736. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1737. 471 | if (status != B_OK)
  1738. | ~~~~~~~~~~~~~~~~~~~
  1739. 472 | return status;
  1740. | ~~~~~~~~~~~~~~
  1741. 473 |
  1742. |
  1743. 474 | fNodes[level] = new(std::nothrow) BTree::Node(fTree->SystemVolume());
  1744. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1745. 475 | if (fNodes[level] == NULL)
  1746. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  1747. 476 | return B_NO_MEMORY;
  1748. | ~~~~~~~~~~~~~~~~~~~
  1749. 477 |
  1750. |
  1751. 478 | fNodes[level]->SetToWritable(block, transaction.ID(), true);
  1752. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1753. 479 |
  1754. |
  1755. 480 | status = fNodes[level]->Copy(node, start, start + num - 1, length);
  1756. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1757. 481 | if (status != B_OK)
  1758. | ~~~~~~~~~~~~~~~~~~~
  1759. 482 | return status;
  1760. | ~~~~~~~~~~~~~~
  1761. 483 |
  1762. |
  1763. 484 | fNodes[level]->SetGeneration(transaction.SystemID());
  1764. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1765. 485 | fNodes[level]->SetLogicalAddress(address);
  1766. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1767. 486 | if (length < 0)
  1768. | ~~~~~~~~~~~~~~~
  1769. 487 | fNodes[level]->SetItemCount(node->ItemCount() - num);
  1770. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1771. 488 | else if (length > 0)
  1772. | ~~~~~~~~~~~~~~~~~~~~
  1773. 489 | fNodes[level]->SetItemCount(node->ItemCount() + num);
  1774. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1775. 490 | else
  1776. | ~~~~
  1777. 491 | fNodes[level]->SetItemCount(num);
  1778. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1779. 492 |
  1780. |
  1781. 493 | // change pointer of this node in parent
  1782. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1783. 494 | int parentSlot;
  1784. | ~~~~~~~~~~~~~~~
  1785. 495 | Node* parentNode = GetNode(level + 1, &parentSlot);
  1786. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1787. 496 | if (parentNode != NULL)
  1788. | ~~~~~~~~~~~~~~~~~~~~~~~
  1789. 497 | parentNode->Index(parentSlot)->SetLogicalAddress(address);
  1790. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1791. 498 |
  1792. |
  1793. 499 | if (level == fTree->RootLevel())
  1794. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1795. 500 | fTree->SetRoot(fNodes[level]);
  1796. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1797. 501 |
  1798. |
  1799. 502 | delete node;
  1800. | ~~~~~~~~~~~~
  1801. 503 | return B_OK;
  1802. | ~~~~~~~~~~~~
  1803. 504 | }
  1804. | ~
  1805. 505 |
  1806. |
  1807. 506 |
  1808. |
  1809. 507 | /* Copy-On-Write all internal nodes start from a specific level.
  1810. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1811. 508 | * level > 0: to root
  1812. | ~~~~~~~~~~~~~~~~~~~~
  1813. 509 | * level <= 0: to leaf
  1814. | ~~~~~~~~~~~~~~~~~~~~~
  1815. 510 | *
  1816. | ~
  1817. 511 | * path cow-path path cow-path
  1818. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1819. 512 | * =================================================
  1820. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1821. 513 | * root cow-root root level < 0
  1822. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1823. 514 | * | | |
  1824. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  1825. 515 | * n1 cow-n1 ...______
  1826. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1827. 516 | * | | | \
  1828. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1829. 517 | * n2 cow-n2 n1 cow-n1
  1830. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1831. 518 | * | / | |
  1832. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1833. 519 | * ...____/ n2 cow-n2
  1834. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1835. 520 | * | | |
  1836. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1837. 521 | * leaf level > 0 leaf cow-leaf
  1838. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1839. 522 | */
  1840. | ~~
  1841. 523 | status_t
  1842. | ~~~~~~~~
  1843. 524 | BTree::Path::InternalCopy(Transaction& transaction, int level)
  1844. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1845. 525 | {
  1846. | ~
  1847. 526 | if (std::abs(level) >= fTree->RootLevel())
  1848. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1849. 527 | return B_OK;
  1850. | ~~~~~~~~~~~~
  1851. 528 |
  1852. |
  1853. 529 | TRACE("Path::InternalCopy() level %i\n", level);
  1854. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1855. 530 | int from, to;
  1856. | ~~~~~~~~~~~~~
  1857. 531 | if (level > 0) {
  1858. | ~~~~~~~~~~~~~~~~
  1859. 532 | from = level;
  1860. | ~~~~~~~~~~~~~
  1861. 533 | to = fTree->RootLevel();
  1862. | ~~~~~~~~~~~~~~~~~~~~~~~~
  1863. 534 | } else {
  1864. | ~~~~~~~~
  1865. 535 | from = 0;
  1866. | ~~~~~~~~~
  1867. 536 | to = std::abs(level);
  1868. | ~~~~~~~~~~~~~~~~~~~~~
  1869. 537 | }
  1870. | ~
  1871. 538 |
  1872. |
  1873. 539 | Node* node = NULL;
  1874. | ~~~~~~~~~~~~~~~~~~
  1875. 540 | status_t status;
  1876. | ~~~~~~~~~~~~~~~~
  1877. 541 | while (from <= to) {
  1878. | ~~~~~~~~~~~~~~~~~~~~
  1879. 542 | node = fNodes[from];
  1880. | ~~~~~~~~~~~~~~~~~~~~
  1881. 543 | status = CopyOnWrite(transaction, from, 0, node->ItemCount(), 0);
  1882. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1883. 544 | from++;
  1884. | ~~~~~~~
  1885. 545 | if (status != B_OK)
  1886. | ~~~~~~~~~~~~~~~~~~~
  1887. 546 | return status;
  1888. | ~~~~~~~~~~~~~~
  1889. 547 | }
  1890. | ~
  1891. 548 |
  1892. |
  1893. 549 | return B_OK;
  1894. | ~~~~~~~~~~~~
  1895. 550 | }
  1896. | ~
  1897. 551 |
  1898. |
  1899. 552 |
  1900. |
  1901. 553 | // #pragma mark - BTree implementation
  1902. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1903. 554 |
  1904. |
  1905. 555 |
  1906. |
  1907. 556 | BTree::BTree(Volume* volume)
  1908. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1909. 557 | :
  1910. | ~
  1911. 558 | fRootBlock(0),
  1912. | ~~~~~~~~~~~~~~
  1913. 559 | fRootLevel(0),
  1914. | ~~~~~~~~~~~~~~
  1915. 560 | fVolume(volume)
  1916. | ~~~~~~~~~~~~~~~
  1917. 561 | {
  1918. | ~
  1919. 562 | mutex_init(&fIteratorLock, "btrfs b+tree iterator");
  1920. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1921. 563 | }
  1922. | ~
  1923. 564 |
  1924. |
  1925. 565 |
  1926. |
  1927. 566 | BTree::BTree(Volume* volume, btrfs_stream* stream)
  1928. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1929. 567 | :
  1930. | ~
  1931. 568 | fRootBlock(0),
  1932. | ~~~~~~~~~~~~~~
  1933. 569 | fRootLevel(0),
  1934. | ~~~~~~~~~~~~~~
  1935. 570 | fVolume(volume)
  1936. | ~~~~~~~~~~~~~~~
  1937. 571 | {
  1938. | ~
  1939. 572 | mutex_init(&fIteratorLock, "btrfs b+tree iterator");
  1940. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1941. 573 | }
  1942. | ~
  1943. 574 |
  1944. |
  1945. 575 |
  1946. |
  1947. 576 | BTree::BTree(Volume* volume, fsblock_t rootBlock)
  1948. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1949. 577 | :
  1950. | ~
  1951. 578 | fRootBlock(rootBlock),
  1952. | ~~~~~~~~~~~~~~~~~~~~~~
  1953. 579 | fVolume(volume)
  1954. | ~~~~~~~~~~~~~~~
  1955. 580 | {
  1956. | ~
  1957. 581 | mutex_init(&fIteratorLock, "btrfs b+tree iterator");
  1958. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1959. 582 | }
  1960. | ~
  1961. 583 |
  1962. |
  1963. 584 |
  1964. |
  1965. 585 | BTree::~BTree()
  1966. | ~~~~~~~~~~~~~~~
  1967. 586 | {
  1968. | ~
  1969. 587 | // if there are any TreeIterators left, we need to stop them
  1970. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1971. 588 | // (can happen when the tree's inode gets deleted while
  1972. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1973. 589 | // traversing the tree - a TreeIterator doesn't lock the inode)
  1974. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1975. 590 | mutex_lock(&fIteratorLock);
  1976. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1977. 591 |
  1978. |
  1979. 592 | SinglyLinkedList<TreeIterator>::Iterator iterator
  1980. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1981. 593 | = fIterators.GetIterator();
  1982. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1983. 594 | while (iterator.HasNext())
  1984. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  1985. 595 | iterator.Next()->Stop();
  1986. | ~~~~~~~~~~~~~~~~~~~~~~~~
  1987. 596 | mutex_destroy(&fIteratorLock);
  1988. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1989. 597 | }
  1990. | ~
  1991. 598 |
  1992. |
  1993. 599 |
  1994. |
  1995. 600 | int32
  1996. | ~~~~~
  1997. 601 | btrfs_key::Compare(const btrfs_key& key) const
  1998. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1999. 602 | {
  2000. | ~
  2001. 603 | if (ObjectID() > key.ObjectID())
  2002. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2003. 604 | return 1;
  2004. | ~~~~~~~~~
  2005. 605 | if (ObjectID() < key.ObjectID())
  2006. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2007. 606 | return -1;
  2008. | ~~~~~~~~~~
  2009. 607 | if (Type() > key.Type())
  2010. | ~~~~~~~~~~~~~~~~~~~~~~~~
  2011. 608 | return 1;
  2012. | ~~~~~~~~~
  2013. 609 | if (Type() < key.Type())
  2014. | ~~~~~~~~~~~~~~~~~~~~~~~~
  2015. 610 | return -1;
  2016. | ~~~~~~~~~~
  2017. 611 | if (Offset() > key.Offset())
  2018. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2019. 612 | return 1;
  2020. | ~~~~~~~~~
  2021. 613 | if (Offset() < key.Offset())
  2022. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2023. 614 | return -1;
  2024. | ~~~~~~~~~~
  2025. 615 | return 0;
  2026. | ~~~~~~~~~
  2027. 616 | }
  2028. | ~
  2029. 617 |
  2030. |
  2031. 618 |
  2032. |
  2033. 619 | /* Traverse from root to fill in the path along way its finding.
  2034. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2035. 620 | * Return current slot at leaf if successful.
  2036. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2037. 621 | */
  2038. | ~~
  2039. 622 | status_t
  2040. | ~~~~~~~~
  2041. 623 | BTree::Traverse(btree_traversing type, Path* path, const btrfs_key& key)
  2042. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2043. 624 | const
  2044. | ~~~~~
  2045. 625 | {
  2046. | ~
  2047. 626 | TRACE("BTree::Traverse() objectid %" B_PRId64 " type %d offset %"
  2048. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2049. 627 | B_PRId64 " \n", key.ObjectID(), key.Type(), key.Offset());
  2050. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2051. 628 | fsblock_t physicalBlock = fRootBlock;
  2052. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2053. 629 | Node node(fVolume, physicalBlock);
  2054. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2055. 630 | int slot;
  2056. | ~~~~~~~~~
  2057. 631 | status_t status = B_OK;
  2058. | ~~~~~~~~~~~~~~~~~~~~~~~
  2059. 632 |
  2060. |
  2061. 633 | while (node.Level() != 0) {
  2062. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2063. 634 | TRACE("BTree::Traverse() level %d count %d\n", node.Level(),
  2064. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2065. 635 | node.ItemCount());
  2066. | ~~~~~~~~~~~~~~~~~~
  2067. 636 | status = node.SearchSlot(key, &slot, BTREE_BACKWARD);
  2068. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2069. 637 | if (status != B_OK)
  2070. | ~~~~~~~~~~~~~~~~~~~
  2071. 638 | return status;
  2072. | ~~~~~~~~~~~~~~
  2073. 639 | if (path->SetNode(&node, slot) == NULL)
  2074. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2075. 640 | return B_NO_MEMORY;
  2076. | ~~~~~~~~~~~~~~~~~~~
  2077. 641 |
  2078. |
  2079. 642 | TRACE("BTree::Traverse() getting index %" B_PRIu32 "\n", slot);
  2080. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2081. 643 |
  2082. |
  2083. 644 | status = fVolume->FindBlock(node.Index(slot)->LogicalAddress(),
  2084. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2085. 645 | physicalBlock);
  2086. | ~~~~~~~~~~~~~~~
  2087. 646 | if (status != B_OK) {
  2088. | ~~~~~~~~~~~~~~~~~~~~~
  2089. 647 | ERROR("BTree::Traverse() unmapped block %" B_PRId64 "\n",
  2090. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2091. 648 | node.Index(slot)->LogicalAddress());
  2092. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2093. 649 | return status;
  2094. | ~~~~~~~~~~~~~~
  2095. 650 | }
  2096. | ~
  2097. 651 | node.SetTo(physicalBlock);
  2098. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  2099. 652 | }
  2100. | ~
  2101. 653 |
  2102. |
  2103. 654 | TRACE("BTree::Traverse() dump count %" B_PRId32 "\n", node.ItemCount());
  2104. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2105. 655 | status = node.SearchSlot(key, &slot, type);
  2106. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2107. 656 | if (status != B_OK)
  2108. | ~~~~~~~~~~~~~~~~~~~
  2109. 657 | return status;
  2110. | ~~~~~~~~~~~~~~
  2111. 658 | if (path->SetNode(&node, slot) == NULL)
  2112. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2113. 659 | return B_NO_MEMORY;
  2114. | ~~~~~~~~~~~~~~~~~~~
  2115. 660 |
  2116. |
  2117. 661 | TRACE("BTree::Traverse() found %" B_PRIu32 " %" B_PRIu32 "\n",
  2118. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2119. 662 | node.Item(slot)->Offset(), node.Item(slot)->Size());
  2120. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2121. 663 | return slot;
  2122. | ~~~~~~~~~~~~
  2123. 664 | }
  2124. | ~
  2125. 665 |
  2126. |
  2127. 666 |
  2128. |
  2129. 667 | /*! Searches the key in the tree, and stores the allocated found item in
  2130. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2131. 668 | _value, if successful.
  2132. | ~~~~~~~~~~~~~~~~~~~~~~
  2133. 669 | Returns B_OK when the key could be found, B_ENTRY_NOT_FOUND if not.
  2134. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2135. 670 | It can also return other errors to indicate that something went wrong.
  2136. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2137. 671 | */
  2138. | ~~
  2139. 672 | status_t
  2140. | ~~~~~~~~
  2141. 673 | BTree::_Find(Path* path, btrfs_key& wanted, void** _value, uint32* _size,
  2142. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2143. 674 | uint32* _offset, btree_traversing type) const
  2144. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2145. 675 | {
  2146. | ~
  2147. 676 | status_t status = Traverse(type, path, wanted);
  2148. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2149. 677 | if (status < B_OK)
  2150. | ~~~~~~~~~~~~~~~~~~
  2151. 678 | return status;
  2152. | ~~~~~~~~~~~~~~
  2153. 679 |
  2154. |
  2155. 680 | btrfs_key found;
  2156. | ~~~~~~~~~~~~~~~~
  2157. 681 | status = path->GetCurrentEntry(&found, _value, _size, _offset);
  2158. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2159. 682 | if (status != B_OK)
  2160. | ~~~~~~~~~~~~~~~~~~~
  2161. 683 | return status;
  2162. | ~~~~~~~~~~~~~~
  2163. 684 |
  2164. |
  2165. 685 | if (found.Type() != wanted.Type() && wanted.Type() != BTRFS_KEY_TYPE_ANY) {
  2166. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2167. 686 | ERROR("Find() not found wanted: %" B_PRIu64 " %" B_PRIu8 " %"
  2168. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2169. 687 | B_PRIu64 " found: %" B_PRIu64 " %" B_PRIu8 " %" B_PRIu64 "\n",
  2170. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2171. 688 | wanted.ObjectID(), wanted.Type(), wanted.Offset(), found.ObjectID(),
  2172. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2173. 689 | found.Type(), found.Offset());
  2174. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2175. 690 | return B_ENTRY_NOT_FOUND;
  2176. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  2177. 691 | }
  2178. | ~
  2179. 692 |
  2180. |
  2181. 693 | wanted = found;
  2182. | ~~~~~~~~~~~~~~~
  2183. 694 | return B_OK;
  2184. | ~~~~~~~~~~~~
  2185. 695 | }
  2186. | ~
  2187. 696 |
  2188. |
  2189. 697 |
  2190. |
  2191. 698 | status_t
  2192. | ~~~~~~~~
  2193. 699 | BTree::FindNext(Path* path, btrfs_key& key, void** _value, uint32* _size,
  2194. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2195. 700 | uint32* _offset) const
  2196. | ~~~~~~~~~~~~~~~~~~~~~~
  2197. 701 | {
  2198. | ~
  2199. 702 | return _Find(path, key, _value, _size, _offset, BTREE_FORWARD);
  2200. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2201. 703 | }
  2202. | ~
  2203. 704 |
  2204. |
  2205. 705 |
  2206. |
  2207. 706 | status_t
  2208. | ~~~~~~~~
  2209. 707 | BTree::FindPrevious(Path* path, btrfs_key& key, void** _value, uint32* _size,
  2210. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2211. 708 | uint32* _offset) const
  2212. | ~~~~~~~~~~~~~~~~~~~~~~
  2213. 709 | {
  2214. | ~
  2215. 710 | return _Find(path, key, _value, _size, _offset, BTREE_BACKWARD);
  2216. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2217. 711 | }
  2218. | ~
  2219. 712 |
  2220. |
  2221. 713 |
  2222. |
  2223. 714 | status_t
  2224. | ~~~~~~~~
  2225. 715 | BTree::FindExact(Path* path, btrfs_key& key, void** _value, uint32* _size,
  2226. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2227. 716 | uint32* _offset) const
  2228. | ~~~~~~~~~~~~~~~~~~~~~~
  2229. 717 | {
  2230. | ~
  2231. 718 | return _Find(path, key, _value, _size, _offset, BTREE_EXACT);
  2232. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2233. 719 | }
  2234. | ~
  2235. 720 |
  2236. |
  2237. 721 |
  2238. |
  2239. 722 | /*
  2240. | ~~
  2241. 723 | * Insert "num" of consecutive empty entries start with slot of "startKey"
  2242. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2243. 724 | * if successful return the starting slot, otherwise return error code.
  2244. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2245. 725 | */
  2246. | ~~
  2247. 726 | status_t
  2248. | ~~~~~~~~
  2249. 727 | BTree::MakeEntries(Transaction& transaction, Path* path,
  2250. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2251. 728 | const btrfs_key& startKey, int num, int length)
  2252. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2253. 729 | {
  2254. | ~
  2255. 730 | TRACE("BTree::MakeEntries() num %i key (% " B_PRIu64 " %" B_PRIu8 " %"
  2256. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2257. 731 | B_PRIu64 ")\n", num, startKey.ObjectID(), startKey.Type(),
  2258. | ~~~~~~~~~~~~~~
  2259. ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:730:2: note: in expansion of macro ‘TRACE’
  2260. 730 | TRACE("BTree::MakeEntries() num %i key (% " B_PRIu64 " %" B_PRIu8 " %"
  2261. | ^~~~~
  2262. ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp: In member function ‘fssh_status_t BTree::RemoveEntries(Transaction&, BTree::Path*, const btrfs_key&, void**, int)’:
  2263. ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:20:30: warning: ' ' flag used with ‘%u’ gnu_printf format [-Wformat=]
  2264. 20 | # define TRACE(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  2265. | ^~~~~~~~~~~~~~~~~~~~~~~~~
  2266. 21 | #else
  2267. | ~~~~~
  2268. 22 | # define TRACE(x...) ;
  2269. | ~~~~~~~~~~~~~~~~~~~~~~
  2270. 23 | #endif
  2271. | ~~~~~~
  2272. 24 | # define ERROR(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  2273. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2274. 25 |
  2275. |
  2276. 26 |
  2277. |
  2278. 27 | BTree::Node::Node(Volume* volume)
  2279. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2280. 28 | :
  2281. | ~
  2282. 29 | fNode(NULL),
  2283. | ~~~~~~~~~~~~
  2284. 30 | fVolume(volume),
  2285. | ~~~~~~~~~~~~~~~~
  2286. 31 | fBlockNumber(0),
  2287. | ~~~~~~~~~~~~~~~~
  2288. 32 | fWritable(false)
  2289. | ~~~~~~~~~~~~~~~~
  2290. 33 | {
  2291. | ~
  2292. 34 | }
  2293. | ~
  2294. 35 |
  2295. |
  2296. 36 |
  2297. |
  2298. 37 | BTree::Node::Node(Volume* volume, off_t block)
  2299. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2300. 38 | :
  2301. | ~
  2302. 39 | fNode(NULL),
  2303. | ~~~~~~~~~~~~
  2304. 40 | fVolume(volume),
  2305. | ~~~~~~~~~~~~~~~~
  2306. 41 | fBlockNumber(0),
  2307. | ~~~~~~~~~~~~~~~~
  2308. 42 | fWritable(false)
  2309. | ~~~~~~~~~~~~~~~~
  2310. 43 | {
  2311. | ~
  2312. 44 | SetTo(block);
  2313. | ~~~~~~~~~~~~~
  2314. 45 | }
  2315. | ~
  2316. 46 |
  2317. |
  2318. 47 |
  2319. |
  2320. 48 | BTree::Node::~Node()
  2321. | ~~~~~~~~~~~~~~~~~~~~
  2322. 49 | {
  2323. | ~
  2324. 50 | Unset();
  2325. | ~~~~~~~~
  2326. 51 | }
  2327. | ~
  2328. 52 |
  2329. |
  2330. 53 |
  2331. |
  2332. 54 | void
  2333. | ~~~~
  2334. 55 | BTree::Node::Keep()
  2335. | ~~~~~~~~~~~~~~~~~~~
  2336. 56 | {
  2337. | ~
  2338. 57 | fNode = NULL;
  2339. | ~~~~~~~~~~~~~
  2340. 58 | }
  2341. | ~
  2342. 59 |
  2343. |
  2344. 60 |
  2345. |
  2346. 61 | void
  2347. | ~~~~
  2348. 62 | BTree::Node::Unset()
  2349. | ~~~~~~~~~~~~~~~~~~~~
  2350. 63 | {
  2351. | ~
  2352. 64 | if (fNode != NULL) {
  2353. | ~~~~~~~~~~~~~~~~~~~~
  2354. 65 | block_cache_put(fVolume->BlockCache(), fBlockNumber);
  2355. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2356. 66 | fNode = NULL;
  2357. | ~~~~~~~~~~~~~
  2358. 67 | }
  2359. | ~
  2360. 68 | }
  2361. | ~
  2362. 69 |
  2363. |
  2364. 70 |
  2365. |
  2366. 71 | void
  2367. | ~~~~
  2368. 72 | BTree::Node::SetTo(off_t block)
  2369. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2370. 73 | {
  2371. | ~
  2372. 74 | Unset();
  2373. | ~~~~~~~~
  2374. 75 | fBlockNumber = block;
  2375. | ~~~~~~~~~~~~~~~~~~~~~
  2376. 76 | fNode = (btrfs_stream*)block_cache_get(fVolume->BlockCache(), block);
  2377. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2378. 77 | }
  2379. | ~
  2380. 78 |
  2381. |
  2382. 79 |
  2383. |
  2384. 80 | void
  2385. | ~~~~
  2386. 81 | BTree::Node::SetToWritable(off_t block, int32 transactionId, bool empty)
  2387. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2388. 82 | {
  2389. | ~
  2390. 83 | Unset();
  2391. | ~~~~~~~~
  2392. 84 | fBlockNumber = block;
  2393. | ~~~~~~~~~~~~~~~~~~~~~
  2394. 85 | fWritable = true;
  2395. | ~~~~~~~~~~~~~~~~~
  2396. 86 | if (empty) {
  2397. | ~~~~~~~~~~~~
  2398. 87 | fNode = (btrfs_stream*)block_cache_get_empty(fVolume->BlockCache(),
  2399. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2400. 88 | block, transactionId);
  2401. | ~~~~~~~~~~~~~~~~~~~~~~
  2402. 89 | } else {
  2403. | ~~~~~~~~
  2404. 90 | fNode = (btrfs_stream*)block_cache_get_writable(fVolume->BlockCache(),
  2405. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2406. 91 | block, transactionId);
  2407. | ~~~~~~~~~~~~~~~~~~~~~~
  2408. 92 | }
  2409. | ~
  2410. 93 | }
  2411. | ~
  2412. 94 |
  2413. |
  2414. 95 |
  2415. |
  2416. 96 | status_t
  2417. | ~~~~~~~~
  2418. 97 | BTree::Node::SearchSlot(const btrfs_key& key, int* slot, btree_traversing type)
  2419. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2420. 98 | const
  2421. | ~~~~~
  2422. 99 | {
  2423. | ~
  2424. 100 | // binary search for item slot in a node
  2425. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2426. 101 | int entrySize = sizeof(btrfs_entry);
  2427. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2428. 102 | if (Level() != 0) {
  2429. | ~~~~~~~~~~~~~~~~~~~
  2430. 103 | // internal node
  2431. | ~~~~~~~~~~~~~~~~
  2432. 104 | entrySize = sizeof(btrfs_index);
  2433. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2434. 105 | }
  2435. | ~
  2436. 106 |
  2437. |
  2438. 107 | int high = ItemCount();
  2439. | ~~~~~~~~~~~~~~~~~~~~~~~
  2440. 108 | int low = 0, mid = 0, comp = 0;
  2441. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2442. 109 | uint8* base = (uint8*)fNode + sizeof(btrfs_header);
  2443. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2444. 110 | const btrfs_key* other;
  2445. | ~~~~~~~~~~~~~~~~~~~~~~~
  2446. 111 | while (low < high) {
  2447. | ~~~~~~~~~~~~~~~~~~~~
  2448. 112 | mid = (low + high) / 2;
  2449. | ~~~~~~~~~~~~~~~~~~~~~~~
  2450. 113 | other = (const btrfs_key*)(base + mid * entrySize);
  2451. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2452. 114 | comp = key.Compare(*other);
  2453. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2454. 115 | if (comp < 0)
  2455. | ~~~~~~~~~~~~~
  2456. 116 | high = mid;
  2457. | ~~~~~~~~~~~
  2458. 117 | else if (comp > 0)
  2459. | ~~~~~~~~~~~~~~~~~~
  2460. 118 | low = mid + 1;
  2461. | ~~~~~~~~~~~~~~
  2462. 119 | else {
  2463. | ~~~~~~
  2464. 120 | *slot = mid;
  2465. | ~~~~~~~~~~~~
  2466. 121 | return B_OK; // if key is in node
  2467. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2468. 122 | }
  2469. | ~
  2470. 123 | }
  2471. | ~
  2472. 124 |
  2473. |
  2474. 125 | // |--item1--|--item2--|--item3--|--etc--|
  2475. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2476. 126 | // m-1 m m+1
  2477. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2478. 127 | // k : comp < 0
  2479. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2480. 128 | // k : comp > 0
  2481. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2482. 129 | if (type == BTREE_BACKWARD && comp < 0)
  2483. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2484. 130 | mid--;
  2485. | ~~~~~~
  2486. 131 | else if (type == BTREE_FORWARD && comp > 0)
  2487. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2488. 132 | mid++;
  2489. | ~~~~~~
  2490. 133 |
  2491. |
  2492. 134 | if (type == BTREE_EXACT || mid < 0)
  2493. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2494. 135 | return B_ENTRY_NOT_FOUND;
  2495. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  2496. 136 |
  2497. |
  2498. 137 | *slot = mid;
  2499. | ~~~~~~~~~~~~
  2500. 138 | TRACE("SearchSlot() found slot %" B_PRId32 " comp %" B_PRId32 "\n",
  2501. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2502. 139 | *slot, comp);
  2503. | ~~~~~~~~~~~~~
  2504. 140 | return B_OK;
  2505. | ~~~~~~~~~~~~
  2506. 141 | }
  2507. | ~
  2508. 142 |
  2509. |
  2510. 143 |
  2511. |
  2512. 144 | /*
  2513. | ~~
  2514. 145 | * calculate used space except the header.
  2515. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2516. 146 | * type is only for leaf node
  2517. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2518. 147 | * type 1: only item space
  2519. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  2520. 148 | * type 2: only item data space
  2521. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2522. 149 | * type 3: both type 1 and 2
  2523. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2524. 150 | */
  2525. | ~~
  2526. 151 | int
  2527. | ~~~
  2528. 152 | BTree::Node::_CalculateSpace(uint32 from, uint32 to, uint8 type) const
  2529. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2530. 153 | {
  2531. | ~
  2532. 154 | if (to < from || to >= ItemCount())
  2533. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2534. 155 | return 0;
  2535. | ~~~~~~~~~
  2536. 156 |
  2537. |
  2538. 157 | if (Level() != 0)
  2539. | ~~~~~~~~~~~~~~~~~
  2540. 158 | return sizeof(btrfs_index) * (to - from + 1);
  2541. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2542. 159 |
  2543. |
  2544. 160 | uint32 result = 0;
  2545. | ~~~~~~~~~~~~~~~~~~
  2546. 161 | if ((type & 1) == 1) {
  2547. | ~~~~~~~~~~~~~~~~~~~~~~
  2548. 162 | result += sizeof(btrfs_entry) * (to - from + 1);
  2549. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2550. 163 | }
  2551. | ~
  2552. 164 | if ((type & 2) == 2) {
  2553. | ~~~~~~~~~~~~~~~~~~~~~~
  2554. 165 | result += Item(from)->Offset() + Item(from)->Size()
  2555. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2556. 166 | - Item(to)->Offset();
  2557. | ~~~~~~~~~~~~~~~~~~~~~
  2558. 167 | }
  2559. | ~
  2560. 168 |
  2561. |
  2562. 169 | return result;
  2563. | ~~~~~~~~~~~~~~
  2564. 170 | }
  2565. | ~
  2566. 171 |
  2567. |
  2568. 172 |
  2569. |
  2570. 173 | int
  2571. | ~~~
  2572. 174 | BTree::Node::SpaceUsed() const
  2573. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2574. 175 | {
  2575. | ~
  2576. 176 | if (Level() == 0)
  2577. | ~~~~~~~~~~~~~~~~~
  2578. 177 | return _CalculateSpace(0, ItemCount() - 1, 3);
  2579. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2580. 178 | return _CalculateSpace(0, ItemCount() - 1, 0);
  2581. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2582. 179 | }
  2583. | ~
  2584. 180 |
  2585. |
  2586. 181 |
  2587. |
  2588. 182 | int
  2589. | ~~~
  2590. 183 | BTree::Node::SpaceLeft() const
  2591. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2592. 184 | {
  2593. | ~
  2594. 185 | return fVolume->BlockSize() - SpaceUsed() - sizeof(btrfs_header);
  2595. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2596. 186 | }
  2597. | ~
  2598. 187 |
  2599. |
  2600. 188 |
  2601. |
  2602. 189 | void
  2603. | ~~~~
  2604. 190 | BTree::Node::_Copy(const Node* origin, uint32 at, uint32 from, uint32 to,
  2605. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2606. 191 | int length) const
  2607. | ~~~~~~~~~~~~~~~~~
  2608. 192 | {
  2609. | ~
  2610. 193 | TRACE("Node::_Copy() at: %d from: %d to: %d length: %d\n",
  2611. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2612. 194 | at, from, to, length);
  2613. | ~~~~~~~~~~~~~~~~~~~~~~
  2614. 195 |
  2615. |
  2616. 196 | if (Level() == 0) {
  2617. | ~~~~~~~~~~~~~~~~~~~
  2618. 197 | memcpy(Item(at), origin->Item(from), origin->_CalculateSpace(from, to));
  2619. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2620. 198 | // Item offset of copied node must be changed to get the
  2621. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2622. 199 | // item data offset correctly. length can be zero
  2623. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2624. 200 | // but let it there doesn't harm anything.
  2625. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2626. 201 | for (uint32 i = at; i - at <= to - from; ++i)
  2627. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2628. 202 | Item(i)->SetOffset(Item(i)->Offset() - length);
  2629. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2630. 203 |
  2631. |
  2632. 204 | memcpy(ItemData(at + to - from), origin->ItemData(to),
  2633. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2634. 205 | origin->_CalculateSpace(from, to, 2));
  2635. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2636. 206 | } else {
  2637. | ~~~~~~~~
  2638. 207 | memcpy(Index(at), origin->Index(from),
  2639. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2640. 208 | origin->_CalculateSpace(from, to));
  2641. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2642. 209 | }
  2643. | ~
  2644. 210 | }
  2645. | ~
  2646. 211 |
  2647. |
  2648. 212 |
  2649. |
  2650. 213 | status_t
  2651. | ~~~~~~~~
  2652. 214 | BTree::Node::_SpaceCheck(int length) const
  2653. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2654. 215 | {
  2655. | ~
  2656. 216 | // this is a little bit weird here because we can't find
  2657. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2658. 217 | // any suitable error code
  2659. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  2660. 218 | if (length < 0 && std::abs(length) >= SpaceUsed())
  2661. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2662. 219 | return B_DIRECTORY_NOT_EMPTY; // not enough data to delete
  2663. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2664. 220 | if (length > 0 && length >= SpaceLeft())
  2665. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2666. 221 | return B_DEVICE_FULL; // no spare space
  2667. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2668. 222 | return B_OK;
  2669. | ~~~~~~~~~~~~
  2670. 223 | }
  2671. | ~
  2672. 224 |
  2673. |
  2674. 225 |
  2675. |
  2676. 226 | /*
  2677. | ~~
  2678. 227 | * copy node header, items and items data
  2679. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2680. 228 | * length is size to insert/remove
  2681. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2682. 229 | * if node is a internal node, length isnt used
  2683. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2684. 230 | * length = 0: Copy a whole
  2685. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  2686. 231 | * length < 0: removing
  2687. | ~~~~~~~~~~~~~~~~~~~~~~
  2688. 232 | * length > 0: inserting
  2689. | ~~~~~~~~~~~~~~~~~~~~~~~
  2690. 233 | */
  2691. | ~~
  2692. 234 | status_t
  2693. | ~~~~~~~~
  2694. 235 | BTree::Node::Copy(const Node* origin, uint32 start, uint32 end, int length)
  2695. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2696. 236 | const
  2697. | ~~~~~
  2698. 237 | {
  2699. | ~
  2700. 238 | status_t status = origin->_SpaceCheck(length);
  2701. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2702. 239 | if (status != B_OK)
  2703. | ~~~~~~~~~~~~~~~~~~~
  2704. 240 | return status;
  2705. | ~~~~~~~~~~~~~~
  2706. 241 |
  2707. |
  2708. 242 | memcpy(fNode, origin->fNode, sizeof(btrfs_header));
  2709. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2710. 243 | if (length == 0) {
  2711. | ~~~~~~~~~~~~~~~~~~
  2712. 244 | // like removing [0, start - 1] and keeping [start, end]
  2713. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2714. 245 | length = -origin->_CalculateSpace(0, start - 1, 2);
  2715. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2716. 246 | _Copy(origin, 0, start, end, length);
  2717. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2718. 247 | } else if (length < 0) {
  2719. | ~~~~~~~~~~~~~~~~~~~~~~~~
  2720. 248 | // removing all items in [start, end]
  2721. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2722. 249 | if (start > 0)
  2723. | ~~~~~~~~~~~~~~
  2724. 250 | _Copy(origin, 0, 0, start - 1, 0); // <-- [start,...
  2725. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2726. 251 | if (end + 1 < origin->ItemCount()) {
  2727. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2728. 252 | // ..., end] -->
  2729. | ~~~~~~~~~~~~~~~~
  2730. 253 | // we only care data size
  2731. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  2732. 254 | length += origin->_CalculateSpace(start, end);
  2733. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2734. 255 | _Copy(origin, start, end + 1, origin->ItemCount() - 1, length);
  2735. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2736. 256 | }
  2737. | ~
  2738. 257 | } else {
  2739. | ~~~~~~~~
  2740. 258 | // inserting in [start, end] - make a hole for later
  2741. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2742. 259 | if (start > 0)
  2743. | ~~~~~~~~~~~~~~
  2744. 260 | _Copy(origin, 0, 0, start - 1, 0);
  2745. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2746. 261 | if (start < origin->ItemCount()) {
  2747. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2748. 262 | length -= origin->_CalculateSpace(start, end);
  2749. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2750. 263 | _Copy(origin, end + 1, start, origin->ItemCount() - 1, length);
  2751. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2752. 264 | }
  2753. | ~
  2754. 265 | }
  2755. | ~
  2756. 266 |
  2757. |
  2758. 267 | return B_OK;
  2759. | ~~~~~~~~~~~~
  2760. 268 | }
  2761. | ~
  2762. 269 |
  2763. |
  2764. 270 |
  2765. |
  2766. 271 | /* Like copy but here we use memmove on current node.
  2767. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2768. 272 | */
  2769. | ~~
  2770. 273 | status_t
  2771. | ~~~~~~~~
  2772. 274 | BTree::Node::MoveEntries(uint32 start, uint32 end, int length) const
  2773. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2774. 275 | {
  2775. | ~
  2776. 276 | status_t status = _SpaceCheck(length);
  2777. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2778. 277 | if (status != B_OK || length == 0/*B_OK*/)
  2779. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2780. 278 | return status;
  2781. | ~~~~~~~~~~~~~~
  2782. 279 |
  2783. |
  2784. 280 | int entrySize = sizeof(btrfs_entry);
  2785. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2786. 281 | if (Level() != 0)
  2787. | ~~~~~~~~~~~~~~~~~
  2788. 282 | entrySize = sizeof(btrfs_index);
  2789. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2790. 283 |
  2791. |
  2792. 284 | uint8* base = (uint8*)fNode + sizeof(btrfs_header);
  2793. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2794. 285 | end++;
  2795. | ~~~~~~
  2796. 286 | if (length < 0) {
  2797. | ~~~~~~~~~~~~~~~~~
  2798. 287 | // removing [start, end]
  2799. | ~~~~~~~~~~~~~~~~~~~~~~~~
  2800. 288 | TRACE("Node::MoveEntries() removing ... start %" B_PRIu32 " end %"
  2801. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2802. 289 | B_PRIu32 " length %i\n", start, end, length);
  2803. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2804. 290 | length += _CalculateSpace(start, end - 1);
  2805. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2806. 291 | } else {
  2807. | ~~~~~~~~
  2808. 292 | // length > 0
  2809. | ~~~~~~~~~~~~~
  2810. 293 | // inserting into [start, end] - make room for later
  2811. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2812. 294 | TRACE("Node::MoveEntries() inserting ... start %" B_PRIu32 " end %"
  2813. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2814. 295 | B_PRIu32 " length %i\n", start, end, length);
  2815. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2816. 296 | length -= _CalculateSpace(start, end - 1);
  2817. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2818. 297 | std::swap(start, end);
  2819. | ~~~~~~~~~~~~~~~~~~~~~~
  2820. 298 | }
  2821. | ~
  2822. 299 |
  2823. |
  2824. 300 | if (end >= ItemCount())
  2825. | ~~~~~~~~~~~~~~~~~~~~~~~
  2826. 301 | return B_OK;
  2827. | ~~~~~~~~~~~~
  2828. 302 |
  2829. |
  2830. 303 | int dataSize = _CalculateSpace(end, ItemCount() - 1, 2);
  2831. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2832. 304 | // moving items/block pointers
  2833. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2834. 305 | memmove(base + start * entrySize, base + end * entrySize,
  2835. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2836. 306 | _CalculateSpace(end, ItemCount() - 1));
  2837. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2838. 307 | if (Level() == 0) {
  2839. | ~~~~~~~~~~~~~~~~~~~
  2840. 308 | // moving item data
  2841. | ~~~~~~~~~~~~~~~~~~~
  2842. 309 | int num = start - end;
  2843. | ~~~~~~~~~~~~~~~~~~~~~~
  2844. 310 | for (uint32 i = start; i < ItemCount() + num; ++i)
  2845. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2846. 311 | Item(i)->SetOffset(Item(i)->Offset() - length);
  2847. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2848. 312 |
  2849. |
  2850. 313 | memmove(ItemData(ItemCount() - 1) - length, ItemData(ItemCount() - 1),
  2851. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2852. 314 | dataSize);
  2853. | ~~~~~~~~~~
  2854. 315 | }
  2855. | ~
  2856. 316 |
  2857. |
  2858. 317 | return B_OK;
  2859. | ~~~~~~~~~~~~
  2860. 318 | }
  2861. | ~
  2862. 319 |
  2863. |
  2864. 320 |
  2865. |
  2866. 321 | // #pragma mark - BTree::Path implementation
  2867. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2868. 322 |
  2869. |
  2870. 323 |
  2871. |
  2872. 324 | BTree::Path::Path(BTree* tree)
  2873. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2874. 325 | :
  2875. | ~
  2876. 326 | fTree(tree)
  2877. | ~~~~~~~~~~~
  2878. 327 | {
  2879. | ~
  2880. 328 | for (int i = 0; i < BTRFS_MAX_TREE_DEPTH; ++i) {
  2881. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2882. 329 | fNodes[i] = NULL;
  2883. | ~~~~~~~~~~~~~~~~~
  2884. 330 | fSlots[i] = 0;
  2885. | ~~~~~~~~~~~~~~
  2886. 331 | }
  2887. | ~
  2888. 332 | }
  2889. | ~
  2890. 333 |
  2891. |
  2892. 334 |
  2893. |
  2894. 335 | BTree::Path::~Path()
  2895. | ~~~~~~~~~~~~~~~~~~~~
  2896. 336 | {
  2897. | ~
  2898. 337 | for (int i = 0; i < BTRFS_MAX_TREE_DEPTH; ++i) {
  2899. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2900. 338 | delete fNodes[i];
  2901. | ~~~~~~~~~~~~~~~~~
  2902. 339 | fNodes[i] = NULL;
  2903. | ~~~~~~~~~~~~~~~~~
  2904. 340 | fSlots[i] = 0;
  2905. | ~~~~~~~~~~~~~~
  2906. 341 | }
  2907. | ~
  2908. 342 | }
  2909. | ~
  2910. 343 |
  2911. |
  2912. 344 |
  2913. |
  2914. 345 | BTree::Node*
  2915. | ~~~~~~~~~~~~
  2916. 346 | BTree::Path::GetNode(int level, int* _slot) const
  2917. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2918. 347 | {
  2919. | ~
  2920. 348 | if (_slot != NULL)
  2921. | ~~~~~~~~~~~~~~~~~~
  2922. 349 | *_slot = fSlots[level];
  2923. | ~~~~~~~~~~~~~~~~~~~~~~~
  2924. 350 | return fNodes[level];
  2925. | ~~~~~~~~~~~~~~~~~~~~~
  2926. 351 | }
  2927. | ~
  2928. 352 |
  2929. |
  2930. 353 |
  2931. |
  2932. 354 | BTree::Node*
  2933. | ~~~~~~~~~~~~
  2934. 355 | BTree::Path::SetNode(off_t block, int slot)
  2935. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2936. 356 | {
  2937. | ~
  2938. 357 | Node node(fTree->SystemVolume(), block);
  2939. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2940. 358 | return SetNode(&node, slot);
  2941. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2942. 359 | }
  2943. | ~
  2944. 360 |
  2945. |
  2946. 361 |
  2947. |
  2948. 362 | BTree::Node*
  2949. | ~~~~~~~~~~~~
  2950. 363 | BTree::Path::SetNode(const Node* node, int slot)
  2951. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2952. 364 | {
  2953. | ~
  2954. 365 | uint8 level = node->Level();
  2955. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2956. 366 | if (fNodes[level] == NULL) {
  2957. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2958. 367 | fNodes[level] = new Node(fTree->SystemVolume(), node->BlockNum());
  2959. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2960. 368 | if (fNodes[level] == NULL)
  2961. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  2962. 369 | return NULL;
  2963. | ~~~~~~~~~~~~
  2964. 370 | } else
  2965. | ~~~~~~
  2966. 371 | fNodes[level]->SetTo(node->BlockNum());
  2967. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2968. 372 |
  2969. |
  2970. 373 | if (slot == -1)
  2971. | ~~~~~~~~~~~~~~~
  2972. 374 | fSlots[level] = fNodes[level]->ItemCount() - 1;
  2973. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2974. 375 | else
  2975. | ~~~~
  2976. 376 | fSlots[level] = slot;
  2977. | ~~~~~~~~~~~~~~~~~~~~~
  2978. 377 | return fNodes[level];
  2979. | ~~~~~~~~~~~~~~~~~~~~~
  2980. 378 | }
  2981. | ~
  2982. 379 |
  2983. |
  2984. 380 |
  2985. |
  2986. 381 | int
  2987. | ~~~
  2988. 382 | BTree::Path::Move(int level, int step)
  2989. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2990. 383 | {
  2991. | ~
  2992. 384 | fSlots[level] += step;
  2993. | ~~~~~~~~~~~~~~~~~~~~~~
  2994. 385 | if (fSlots[level] < 0)
  2995. | ~~~~~~~~~~~~~~~~~~~~~~
  2996. 386 | return -1;
  2997. | ~~~~~~~~~~
  2998. 387 | if (fSlots[level] >= fNodes[level]->ItemCount())
  2999. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3000. 388 | return 1;
  3001. | ~~~~~~~~~
  3002. 389 | return 0;
  3003. | ~~~~~~~~~
  3004. 390 | }
  3005. | ~
  3006. 391 |
  3007. |
  3008. 392 |
  3009. |
  3010. 393 | status_t
  3011. | ~~~~~~~~
  3012. 394 | BTree::Path::GetEntry(int slot, btrfs_key* _key, void** _value, uint32* _size,
  3013. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3014. 395 | uint32* _offset)
  3015. | ~~~~~~~~~~~~~~~~
  3016. 396 | {
  3017. | ~
  3018. 397 | BTree::Node* leaf = fNodes[0];
  3019. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3020. 398 | if (slot < 0 || slot >= leaf->ItemCount())
  3021. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3022. 399 | return B_ENTRY_NOT_FOUND;
  3023. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  3024. 400 |
  3025. |
  3026. 401 | if (_key != NULL)
  3027. | ~~~~~~~~~~~~~~~~~
  3028. 402 | *_key = leaf->Item(slot)->key;
  3029. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3030. 403 |
  3031. |
  3032. 404 | uint32 itemSize = leaf->Item(slot)->Size();
  3033. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3034. 405 | if (_value != NULL) {
  3035. | ~~~~~~~~~~~~~~~~~~~~~
  3036. 406 | *_value = malloc(itemSize);
  3037. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3038. 407 | if (*_value == NULL)
  3039. | ~~~~~~~~~~~~~~~~~~~~
  3040. 408 | return B_NO_MEMORY;
  3041. | ~~~~~~~~~~~~~~~~~~~
  3042. 409 |
  3043. |
  3044. 410 | memcpy(*_value, leaf->ItemData(slot), itemSize);
  3045. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3046. 411 | }
  3047. | ~
  3048. 412 |
  3049. |
  3050. 413 | if (_size != NULL)
  3051. | ~~~~~~~~~~~~~~~~~~
  3052. 414 | *_size = itemSize;
  3053. | ~~~~~~~~~~~~~~~~~~
  3054. 415 |
  3055. |
  3056. 416 | if (_offset != NULL)
  3057. | ~~~~~~~~~~~~~~~~~~~~
  3058. 417 | *_offset = leaf->Item(slot)->Offset();
  3059. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3060. 418 |
  3061. |
  3062. 419 | return B_OK;
  3063. | ~~~~~~~~~~~~
  3064. 420 | }
  3065. | ~
  3066. 421 |
  3067. |
  3068. 422 |
  3069. |
  3070. 423 | status_t
  3071. | ~~~~~~~~
  3072. 424 | BTree::Path::SetEntry(int slot, const btrfs_entry& entry, void* value)
  3073. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3074. 425 | {
  3075. | ~
  3076. 426 | if (slot < 0)
  3077. | ~~~~~~~~~~~~~
  3078. 427 | return B_ENTRY_NOT_FOUND;
  3079. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  3080. 428 |
  3081. |
  3082. 429 | memcpy(fNodes[0]->Item(slot), &entry, sizeof(btrfs_entry));
  3083. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3084. 430 | memcpy(fNodes[0]->ItemData(slot), value, entry.Size());
  3085. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3086. 431 | return B_OK;
  3087. | ~~~~~~~~~~~~
  3088. 432 | }
  3089. | ~
  3090. 433 |
  3091. |
  3092. 434 |
  3093. |
  3094. 435 | /*
  3095. | ~~
  3096. 436 | * Allocate and copy block and do all the changes that it can.
  3097. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3098. 437 | * for now, we only copy-on-write tree block,
  3099. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3100. 438 | * file data is "nocow" by default.
  3101. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3102. 439 | *
  3103. | ~
  3104. 440 | * o parent o
  3105. | ~~~~~~~~~~~~~
  3106. 441 | * | ===> \
  3107. | ~~~~~~~~~~~~~~
  3108. 442 | * o x o
  3109. | ~~~~~~~~~~~~~~~
  3110. 443 | */
  3111. | ~~
  3112. 444 | status_t
  3113. | ~~~~~~~~
  3114. 445 | BTree::Path::CopyOnWrite(Transaction& transaction, int level, uint32 start,
  3115. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3116. 446 | int num, int length)
  3117. | ~~~~~~~~~~~~~~~~~~~~
  3118. 447 | {
  3119. | ~
  3120. 448 | Node* node = fNodes[level];
  3121. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3122. 449 | if (node == NULL)
  3123. | ~~~~~~~~~~~~~~~~~
  3124. 450 | return B_BAD_VALUE;
  3125. | ~~~~~~~~~~~~~~~~~~~
  3126. 451 |
  3127. |
  3128. 452 | status_t status;
  3129. | ~~~~~~~~~~~~~~~~
  3130. 453 | if (transaction.HasBlock(node->BlockNum())) {
  3131. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3132. 454 | // cow-ed block can not be cow-ed again
  3133. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3134. 455 | status = node->MoveEntries(start, start + num - 1, length);
  3135. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3136. 456 | if (status != B_OK)
  3137. | ~~~~~~~~~~~~~~~~~~~
  3138. 457 | return status;
  3139. | ~~~~~~~~~~~~~~
  3140. 458 |
  3141. |
  3142. 459 | node->SetGeneration(transaction.SystemID());
  3143. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3144. 460 | if (length < 0)
  3145. | ~~~~~~~~~~~~~~~
  3146. 461 | node->SetItemCount(node->ItemCount() - num);
  3147. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3148. 462 | else if (length > 0)
  3149. | ~~~~~~~~~~~~~~~~~~~~
  3150. 463 | node->SetItemCount(node->ItemCount() + num);
  3151. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3152. 464 |
  3153. |
  3154. 465 | return B_OK;
  3155. | ~~~~~~~~~~~~
  3156. 466 | }
  3157. | ~
  3158. 467 |
  3159. |
  3160. 468 | uint64 address;
  3161. | ~~~~~~~~~~~~~~~
  3162. 469 | fsblock_t block;
  3163. | ~~~~~~~~~~~~~~~~
  3164. 470 | status = fTree->SystemVolume()->GetNewBlock(address, block);
  3165. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3166. 471 | if (status != B_OK)
  3167. | ~~~~~~~~~~~~~~~~~~~
  3168. 472 | return status;
  3169. | ~~~~~~~~~~~~~~
  3170. 473 |
  3171. |
  3172. 474 | fNodes[level] = new(std::nothrow) BTree::Node(fTree->SystemVolume());
  3173. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3174. 475 | if (fNodes[level] == NULL)
  3175. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  3176. 476 | return B_NO_MEMORY;
  3177. | ~~~~~~~~~~~~~~~~~~~
  3178. 477 |
  3179. |
  3180. 478 | fNodes[level]->SetToWritable(block, transaction.ID(), true);
  3181. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3182. 479 |
  3183. |
  3184. 480 | status = fNodes[level]->Copy(node, start, start + num - 1, length);
  3185. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3186. 481 | if (status != B_OK)
  3187. | ~~~~~~~~~~~~~~~~~~~
  3188. 482 | return status;
  3189. | ~~~~~~~~~~~~~~
  3190. 483 |
  3191. |
  3192. 484 | fNodes[level]->SetGeneration(transaction.SystemID());
  3193. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3194. 485 | fNodes[level]->SetLogicalAddress(address);
  3195. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3196. 486 | if (length < 0)
  3197. | ~~~~~~~~~~~~~~~
  3198. 487 | fNodes[level]->SetItemCount(node->ItemCount() - num);
  3199. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3200. 488 | else if (length > 0)
  3201. | ~~~~~~~~~~~~~~~~~~~~
  3202. 489 | fNodes[level]->SetItemCount(node->ItemCount() + num);
  3203. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3204. 490 | else
  3205. | ~~~~
  3206. 491 | fNodes[level]->SetItemCount(num);
  3207. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3208. 492 |
  3209. |
  3210. 493 | // change pointer of this node in parent
  3211. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3212. 494 | int parentSlot;
  3213. | ~~~~~~~~~~~~~~~
  3214. 495 | Node* parentNode = GetNode(level + 1, &parentSlot);
  3215. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3216. 496 | if (parentNode != NULL)
  3217. | ~~~~~~~~~~~~~~~~~~~~~~~
  3218. 497 | parentNode->Index(parentSlot)->SetLogicalAddress(address);
  3219. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3220. 498 |
  3221. |
  3222. 499 | if (level == fTree->RootLevel())
  3223. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3224. 500 | fTree->SetRoot(fNodes[level]);
  3225. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3226. 501 |
  3227. |
  3228. 502 | delete node;
  3229. | ~~~~~~~~~~~~
  3230. 503 | return B_OK;
  3231. | ~~~~~~~~~~~~
  3232. 504 | }
  3233. | ~
  3234. 505 |
  3235. |
  3236. 506 |
  3237. |
  3238. 507 | /* Copy-On-Write all internal nodes start from a specific level.
  3239. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3240. 508 | * level > 0: to root
  3241. | ~~~~~~~~~~~~~~~~~~~~
  3242. 509 | * level <= 0: to leaf
  3243. | ~~~~~~~~~~~~~~~~~~~~~
  3244. 510 | *
  3245. | ~
  3246. 511 | * path cow-path path cow-path
  3247. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3248. 512 | * =================================================
  3249. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3250. 513 | * root cow-root root level < 0
  3251. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3252. 514 | * | | |
  3253. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  3254. 515 | * n1 cow-n1 ...______
  3255. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3256. 516 | * | | | \
  3257. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3258. 517 | * n2 cow-n2 n1 cow-n1
  3259. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3260. 518 | * | / | |
  3261. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3262. 519 | * ...____/ n2 cow-n2
  3263. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3264. 520 | * | | |
  3265. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3266. 521 | * leaf level > 0 leaf cow-leaf
  3267. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3268. 522 | */
  3269. | ~~
  3270. 523 | status_t
  3271. | ~~~~~~~~
  3272. 524 | BTree::Path::InternalCopy(Transaction& transaction, int level)
  3273. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3274. 525 | {
  3275. | ~
  3276. 526 | if (std::abs(level) >= fTree->RootLevel())
  3277. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3278. 527 | return B_OK;
  3279. | ~~~~~~~~~~~~
  3280. 528 |
  3281. |
  3282. 529 | TRACE("Path::InternalCopy() level %i\n", level);
  3283. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3284. 530 | int from, to;
  3285. | ~~~~~~~~~~~~~
  3286. 531 | if (level > 0) {
  3287. | ~~~~~~~~~~~~~~~~
  3288. 532 | from = level;
  3289. | ~~~~~~~~~~~~~
  3290. 533 | to = fTree->RootLevel();
  3291. | ~~~~~~~~~~~~~~~~~~~~~~~~
  3292. 534 | } else {
  3293. | ~~~~~~~~
  3294. 535 | from = 0;
  3295. | ~~~~~~~~~
  3296. 536 | to = std::abs(level);
  3297. | ~~~~~~~~~~~~~~~~~~~~~
  3298. 537 | }
  3299. | ~
  3300. 538 |
  3301. |
  3302. 539 | Node* node = NULL;
  3303. | ~~~~~~~~~~~~~~~~~~
  3304. 540 | status_t status;
  3305. | ~~~~~~~~~~~~~~~~
  3306. 541 | while (from <= to) {
  3307. | ~~~~~~~~~~~~~~~~~~~~
  3308. 542 | node = fNodes[from];
  3309. | ~~~~~~~~~~~~~~~~~~~~
  3310. 543 | status = CopyOnWrite(transaction, from, 0, node->ItemCount(), 0);
  3311. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3312. 544 | from++;
  3313. | ~~~~~~~
  3314. 545 | if (status != B_OK)
  3315. | ~~~~~~~~~~~~~~~~~~~
  3316. 546 | return status;
  3317. | ~~~~~~~~~~~~~~
  3318. 547 | }
  3319. | ~
  3320. 548 |
  3321. |
  3322. 549 | return B_OK;
  3323. | ~~~~~~~~~~~~
  3324. 550 | }
  3325. | ~
  3326. 551 |
  3327. |
  3328. 552 |
  3329. |
  3330. 553 | // #pragma mark - BTree implementation
  3331. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3332. 554 |
  3333. |
  3334. 555 |
  3335. |
  3336. 556 | BTree::BTree(Volume* volume)
  3337. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3338. 557 | :
  3339. | ~
  3340. 558 | fRootBlock(0),
  3341. | ~~~~~~~~~~~~~~
  3342. 559 | fRootLevel(0),
  3343. | ~~~~~~~~~~~~~~
  3344. 560 | fVolume(volume)
  3345. | ~~~~~~~~~~~~~~~
  3346. 561 | {
  3347. | ~
  3348. 562 | mutex_init(&fIteratorLock, "btrfs b+tree iterator");
  3349. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3350. 563 | }
  3351. | ~
  3352. 564 |
  3353. |
  3354. 565 |
  3355. |
  3356. 566 | BTree::BTree(Volume* volume, btrfs_stream* stream)
  3357. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3358. 567 | :
  3359. | ~
  3360. 568 | fRootBlock(0),
  3361. | ~~~~~~~~~~~~~~
  3362. 569 | fRootLevel(0),
  3363. | ~~~~~~~~~~~~~~
  3364. 570 | fVolume(volume)
  3365. | ~~~~~~~~~~~~~~~
  3366. 571 | {
  3367. | ~
  3368. 572 | mutex_init(&fIteratorLock, "btrfs b+tree iterator");
  3369. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3370. 573 | }
  3371. | ~
  3372. 574 |
  3373. |
  3374. 575 |
  3375. |
  3376. 576 | BTree::BTree(Volume* volume, fsblock_t rootBlock)
  3377. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3378. 577 | :
  3379. | ~
  3380. 578 | fRootBlock(rootBlock),
  3381. | ~~~~~~~~~~~~~~~~~~~~~~
  3382. 579 | fVolume(volume)
  3383. | ~~~~~~~~~~~~~~~
  3384. 580 | {
  3385. | ~
  3386. 581 | mutex_init(&fIteratorLock, "btrfs b+tree iterator");
  3387. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3388. 582 | }
  3389. | ~
  3390. 583 |
  3391. |
  3392. 584 |
  3393. |
  3394. 585 | BTree::~BTree()
  3395. | ~~~~~~~~~~~~~~~
  3396. 586 | {
  3397. | ~
  3398. 587 | // if there are any TreeIterators left, we need to stop them
  3399. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3400. 588 | // (can happen when the tree's inode gets deleted while
  3401. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3402. 589 | // traversing the tree - a TreeIterator doesn't lock the inode)
  3403. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3404. 590 | mutex_lock(&fIteratorLock);
  3405. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3406. 591 |
  3407. |
  3408. 592 | SinglyLinkedList<TreeIterator>::Iterator iterator
  3409. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3410. 593 | = fIterators.GetIterator();
  3411. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3412. 594 | while (iterator.HasNext())
  3413. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  3414. 595 | iterator.Next()->Stop();
  3415. | ~~~~~~~~~~~~~~~~~~~~~~~~
  3416. 596 | mutex_destroy(&fIteratorLock);
  3417. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3418. 597 | }
  3419. | ~
  3420. 598 |
  3421. |
  3422. 599 |
  3423. |
  3424. 600 | int32
  3425. | ~~~~~
  3426. 601 | btrfs_key::Compare(const btrfs_key& key) const
  3427. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3428. 602 | {
  3429. | ~
  3430. 603 | if (ObjectID() > key.ObjectID())
  3431. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3432. 604 | return 1;
  3433. | ~~~~~~~~~
  3434. 605 | if (ObjectID() < key.ObjectID())
  3435. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3436. 606 | return -1;
  3437. | ~~~~~~~~~~
  3438. 607 | if (Type() > key.Type())
  3439. | ~~~~~~~~~~~~~~~~~~~~~~~~
  3440. 608 | return 1;
  3441. | ~~~~~~~~~
  3442. 609 | if (Type() < key.Type())
  3443. | ~~~~~~~~~~~~~~~~~~~~~~~~
  3444. 610 | return -1;
  3445. | ~~~~~~~~~~
  3446. 611 | if (Offset() > key.Offset())
  3447. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3448. 612 | return 1;
  3449. | ~~~~~~~~~
  3450. 613 | if (Offset() < key.Offset())
  3451. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3452. 614 | return -1;
  3453. | ~~~~~~~~~~
  3454. 615 | return 0;
  3455. | ~~~~~~~~~
  3456. 616 | }
  3457. | ~
  3458. 617 |
  3459. |
  3460. 618 |
  3461. |
  3462. 619 | /* Traverse from root to fill in the path along way its finding.
  3463. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3464. 620 | * Return current slot at leaf if successful.
  3465. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3466. 621 | */
  3467. | ~~
  3468. 622 | status_t
  3469. | ~~~~~~~~
  3470. 623 | BTree::Traverse(btree_traversing type, Path* path, const btrfs_key& key)
  3471. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3472. 624 | const
  3473. | ~~~~~
  3474. 625 | {
  3475. | ~
  3476. 626 | TRACE("BTree::Traverse() objectid %" B_PRId64 " type %d offset %"
  3477. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3478. 627 | B_PRId64 " \n", key.ObjectID(), key.Type(), key.Offset());
  3479. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3480. 628 | fsblock_t physicalBlock = fRootBlock;
  3481. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3482. 629 | Node node(fVolume, physicalBlock);
  3483. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3484. 630 | int slot;
  3485. | ~~~~~~~~~
  3486. 631 | status_t status = B_OK;
  3487. | ~~~~~~~~~~~~~~~~~~~~~~~
  3488. 632 |
  3489. |
  3490. 633 | while (node.Level() != 0) {
  3491. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3492. 634 | TRACE("BTree::Traverse() level %d count %d\n", node.Level(),
  3493. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3494. 635 | node.ItemCount());
  3495. | ~~~~~~~~~~~~~~~~~~
  3496. 636 | status = node.SearchSlot(key, &slot, BTREE_BACKWARD);
  3497. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3498. 637 | if (status != B_OK)
  3499. | ~~~~~~~~~~~~~~~~~~~
  3500. 638 | return status;
  3501. | ~~~~~~~~~~~~~~
  3502. 639 | if (path->SetNode(&node, slot) == NULL)
  3503. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3504. 640 | return B_NO_MEMORY;
  3505. | ~~~~~~~~~~~~~~~~~~~
  3506. 641 |
  3507. |
  3508. 642 | TRACE("BTree::Traverse() getting index %" B_PRIu32 "\n", slot);
  3509. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3510. 643 |
  3511. |
  3512. 644 | status = fVolume->FindBlock(node.Index(slot)->LogicalAddress(),
  3513. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3514. 645 | physicalBlock);
  3515. | ~~~~~~~~~~~~~~~
  3516. 646 | if (status != B_OK) {
  3517. | ~~~~~~~~~~~~~~~~~~~~~
  3518. 647 | ERROR("BTree::Traverse() unmapped block %" B_PRId64 "\n",
  3519. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3520. 648 | node.Index(slot)->LogicalAddress());
  3521. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3522. 649 | return status;
  3523. | ~~~~~~~~~~~~~~
  3524. 650 | }
  3525. | ~
  3526. 651 | node.SetTo(physicalBlock);
  3527. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  3528. 652 | }
  3529. | ~
  3530. 653 |
  3531. |
  3532. 654 | TRACE("BTree::Traverse() dump count %" B_PRId32 "\n", node.ItemCount());
  3533. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3534. 655 | status = node.SearchSlot(key, &slot, type);
  3535. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3536. 656 | if (status != B_OK)
  3537. | ~~~~~~~~~~~~~~~~~~~
  3538. 657 | return status;
  3539. | ~~~~~~~~~~~~~~
  3540. 658 | if (path->SetNode(&node, slot) == NULL)
  3541. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3542. 659 | return B_NO_MEMORY;
  3543. | ~~~~~~~~~~~~~~~~~~~
  3544. 660 |
  3545. |
  3546. 661 | TRACE("BTree::Traverse() found %" B_PRIu32 " %" B_PRIu32 "\n",
  3547. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3548. 662 | node.Item(slot)->Offset(), node.Item(slot)->Size());
  3549. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3550. 663 | return slot;
  3551. | ~~~~~~~~~~~~
  3552. 664 | }
  3553. | ~
  3554. 665 |
  3555. |
  3556. 666 |
  3557. |
  3558. 667 | /*! Searches the key in the tree, and stores the allocated found item in
  3559. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3560. 668 | _value, if successful.
  3561. | ~~~~~~~~~~~~~~~~~~~~~~
  3562. 669 | Returns B_OK when the key could be found, B_ENTRY_NOT_FOUND if not.
  3563. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3564. 670 | It can also return other errors to indicate that something went wrong.
  3565. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3566. 671 | */
  3567. | ~~
  3568. 672 | status_t
  3569. | ~~~~~~~~
  3570. 673 | BTree::_Find(Path* path, btrfs_key& wanted, void** _value, uint32* _size,
  3571. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3572. 674 | uint32* _offset, btree_traversing type) const
  3573. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3574. 675 | {
  3575. | ~
  3576. 676 | status_t status = Traverse(type, path, wanted);
  3577. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3578. 677 | if (status < B_OK)
  3579. | ~~~~~~~~~~~~~~~~~~
  3580. 678 | return status;
  3581. | ~~~~~~~~~~~~~~
  3582. 679 |
  3583. |
  3584. 680 | btrfs_key found;
  3585. | ~~~~~~~~~~~~~~~~
  3586. 681 | status = path->GetCurrentEntry(&found, _value, _size, _offset);
  3587. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3588. 682 | if (status != B_OK)
  3589. | ~~~~~~~~~~~~~~~~~~~
  3590. 683 | return status;
  3591. | ~~~~~~~~~~~~~~
  3592. 684 |
  3593. |
  3594. 685 | if (found.Type() != wanted.Type() && wanted.Type() != BTRFS_KEY_TYPE_ANY) {
  3595. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3596. 686 | ERROR("Find() not found wanted: %" B_PRIu64 " %" B_PRIu8 " %"
  3597. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3598. 687 | B_PRIu64 " found: %" B_PRIu64 " %" B_PRIu8 " %" B_PRIu64 "\n",
  3599. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3600. 688 | wanted.ObjectID(), wanted.Type(), wanted.Offset(), found.ObjectID(),
  3601. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3602. 689 | found.Type(), found.Offset());
  3603. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3604. 690 | return B_ENTRY_NOT_FOUND;
  3605. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  3606. 691 | }
  3607. | ~
  3608. 692 |
  3609. |
  3610. 693 | wanted = found;
  3611. | ~~~~~~~~~~~~~~~
  3612. 694 | return B_OK;
  3613. | ~~~~~~~~~~~~
  3614. 695 | }
  3615. | ~
  3616. 696 |
  3617. |
  3618. 697 |
  3619. |
  3620. 698 | status_t
  3621. | ~~~~~~~~
  3622. 699 | BTree::FindNext(Path* path, btrfs_key& key, void** _value, uint32* _size,
  3623. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3624. 700 | uint32* _offset) const
  3625. | ~~~~~~~~~~~~~~~~~~~~~~
  3626. 701 | {
  3627. | ~
  3628. 702 | return _Find(path, key, _value, _size, _offset, BTREE_FORWARD);
  3629. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3630. 703 | }
  3631. | ~
  3632. 704 |
  3633. |
  3634. 705 |
  3635. |
  3636. 706 | status_t
  3637. | ~~~~~~~~
  3638. 707 | BTree::FindPrevious(Path* path, btrfs_key& key, void** _value, uint32* _size,
  3639. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3640. 708 | uint32* _offset) const
  3641. | ~~~~~~~~~~~~~~~~~~~~~~
  3642. 709 | {
  3643. | ~
  3644. 710 | return _Find(path, key, _value, _size, _offset, BTREE_BACKWARD);
  3645. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3646. 711 | }
  3647. | ~
  3648. 712 |
  3649. |
  3650. 713 |
  3651. |
  3652. 714 | status_t
  3653. | ~~~~~~~~
  3654. 715 | BTree::FindExact(Path* path, btrfs_key& key, void** _value, uint32* _size,
  3655. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3656. 716 | uint32* _offset) const
  3657. | ~~~~~~~~~~~~~~~~~~~~~~
  3658. 717 | {
  3659. | ~
  3660. 718 | return _Find(path, key, _value, _size, _offset, BTREE_EXACT);
  3661. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3662. 719 | }
  3663. | ~
  3664. 720 |
  3665. |
  3666. 721 |
  3667. |
  3668. 722 | /*
  3669. | ~~
  3670. 723 | * Insert "num" of consecutive empty entries start with slot of "startKey"
  3671. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3672. 724 | * if successful return the starting slot, otherwise return error code.
  3673. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3674. 725 | */
  3675. | ~~
  3676. 726 | status_t
  3677. | ~~~~~~~~
  3678. 727 | BTree::MakeEntries(Transaction& transaction, Path* path,
  3679. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3680. 728 | const btrfs_key& startKey, int num, int length)
  3681. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3682. 729 | {
  3683. | ~
  3684. 730 | TRACE("BTree::MakeEntries() num %i key (% " B_PRIu64 " %" B_PRIu8 " %"
  3685. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3686. 731 | B_PRIu64 ")\n", num, startKey.ObjectID(), startKey.Type(),
  3687. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3688. 732 | startKey.Offset());
  3689. | ~~~~~~~~~~~~~~~~~~~
  3690. 733 |
  3691. |
  3692. 734 | status_t status = Traverse(BTREE_FORWARD, path, startKey);
  3693. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3694. 735 | if (status < B_OK)
  3695. | ~~~~~~~~~~~~~~~~~~
  3696. 736 | return status;
  3697. | ~~~~~~~~~~~~~~
  3698. 737 |
  3699. |
  3700. 738 | int slot = status;
  3701. | ~~~~~~~~~~~~~~~~~~
  3702. 739 | status = path->InternalCopy(transaction, 1);
  3703. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3704. 740 | if (status != B_OK)
  3705. | ~~~~~~~~~~~~~~~~~~~
  3706. 741 | return status;
  3707. | ~~~~~~~~~~~~~~
  3708. 742 |
  3709. |
  3710. 743 | status = path->CopyOnWrite(transaction, 0, slot, num, length);
  3711. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3712. 744 | if (status == B_DEVICE_FULL) {
  3713. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3714. 745 | // TODO: push data or split node
  3715. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3716. 746 | return status;
  3717. | ~~~~~~~~~~~~~~
  3718. 747 | }
  3719. | ~
  3720. 748 |
  3721. |
  3722. 749 | if (status != B_OK)
  3723. | ~~~~~~~~~~~~~~~~~~~
  3724. 750 | return status;
  3725. | ~~~~~~~~~~~~~~
  3726. 751 | return slot;
  3727. | ~~~~~~~~~~~~
  3728. 752 | }
  3729. | ~
  3730. 753 |
  3731. |
  3732. 754 |
  3733. |
  3734. 755 | /* MakeEntries and then fill in them.
  3735. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3736. 756 | */
  3737. | ~~
  3738. 757 | status_t
  3739. | ~~~~~~~~
  3740. 758 | BTree::InsertEntries(Transaction& transaction, Path* path,
  3741. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3742. 759 | btrfs_entry* entries, void** data, int num)
  3743. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3744. 760 | {
  3745. | ~
  3746. 761 | int totalLength = sizeof(btrfs_entry) * num;
  3747. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3748. 762 | for (int i = 0; i < num; i++)
  3749. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3750. 763 | totalLength += entries[i].Size();
  3751. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3752. 764 |
  3753. |
  3754. 765 | status_t slot = MakeEntries(transaction, path, entries[0].key, num,
  3755. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3756. 766 | totalLength);
  3757. | ~~~~~~~~~~~~~
  3758. 767 | if (slot < B_OK)
  3759. | ~~~~~~~~~~~~~~~~
  3760. 768 | return slot;
  3761. | ~~~~~~~~~~~~
  3762. 769 |
  3763. |
  3764. 770 | uint32 upperLimit;
  3765. | ~~~~~~~~~~~~~~~~~~
  3766. 771 | if (slot > 0) {
  3767. | ~~~~~~~~~~~~~~~
  3768. 772 | path->GetEntry(slot - 1, NULL, NULL, NULL, &upperLimit);
  3769. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3770. 773 | } else
  3771. | ~~~~~~
  3772. 774 | upperLimit = fVolume->BlockSize() - sizeof(btrfs_header);
  3773. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3774. 775 |
  3775. |
  3776. 776 | TRACE("BTree::InsertEntries() num: %i upper limit %" B_PRIu32 "\n", num,
  3777. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3778. 777 | upperLimit);
  3779. | ~~~~~~~~~~~~
  3780. 778 | for (int i = 0; i < num; i++) {
  3781. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3782. 779 | upperLimit -= entries[i].Size();
  3783. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3784. 780 | entries[i].SetOffset(upperLimit);
  3785. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3786. 781 | path->SetEntry(slot + i, entries[i], data[i]);
  3787. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3788. 782 | }
  3789. | ~
  3790. 783 |
  3791. |
  3792. 784 | return B_OK;
  3793. | ~~~~~~~~~~~~
  3794. 785 | }
  3795. | ~
  3796. 786 |
  3797. |
  3798. 787 |
  3799. |
  3800. 788 | /* Like MakeEntries, but here we remove entries instead.
  3801. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3802. 789 | * Removed data stored in _data
  3803. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3804. 790 | * May merge those functions into one.
  3805. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3806. 791 | */
  3807. | ~~
  3808. 792 | status_t
  3809. | ~~~~~~~~
  3810. 793 | BTree::RemoveEntries(Transaction& transaction, Path* path,
  3811. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3812. 794 | const btrfs_key& startKey, void** _data, int num)
  3813. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3814. 795 | {
  3815. | ~
  3816. 796 | TRACE("BTree::RemoveEntries() num %i key (% " B_PRIu64 " %" B_PRIu8 " %"
  3817. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3818. 797 | B_PRIu64 ")\n", num, startKey.ObjectID(), startKey.Type(),
  3819. | ~~~~~~~~~~~~~~
  3820. ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:796:2: note: in expansion of macro ‘TRACE’
  3821. 796 | TRACE("BTree::RemoveEntries() num %i key (% " B_PRIu64 " %" B_PRIu8 " %"
  3822. | ^~~~~
  3823. ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp: In member function ‘fssh_status_t BTree::NextLeaf(BTree::Path*) const’:
  3824. ../src/add-ons/kernel/file_systems/btrfs/BTree.cpp:874:28: warning: comparison of integer expressions of different signedness: ‘int’ and ‘uint32_t’ {aka ‘unsigned int’} [-Wsign-compare]
  3825. 874 | if (node == NULL || slot < node->ItemCount() - 1)
  3826. | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
  3827.  
  3828. gcc -c "../src/add-ons/kernel/file_systems/btrfs/BTree.cpp" -O2 -Wall -Wno-trigraphs -Wno-ctor-dtor-privacy -Woverloaded-virtual -Wpointer-arith -Wcast-align -Wsign-compare -Wno-multichar -DFS_SHELL -DTRACE_BTRFS -Wno-multichar -fno-rtti -DHAIKU_BUILD_COMPATIBILITY_H -DARCH_x86_64 -D_NO_INLINE_ASM -D__NO_INLINE__ -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DHAIKU_HOST_USE_XATTR_REF -DHAIKU_HOST_PLATFORM_LINUX -DHAIKU_HOST_PLATFORM_64_BIT -DHAIKU_PACKAGING_ARCH=\"x86_64\" -iquote ../build/user_config_headers -iquote ../build/config_headers -iquote ../src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/linux/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/haiku/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote ../src/add-ons/kernel/file_systems/btrfs -iquote ../src/tools/fs_shell -I ../headers/build -I ../headers/build/os -I ../headers/build/os/support -I ../headers/private/. -I ../headers/private/kernel -I ../headers/private/libroot -I ../headers/private/shared -I ../headers/private/kernel/boot/platform/bios_ia32 -I ../headers/private/kernel/arch/x86 -I objects/haiku/x86_64/common/system/kernel -I ../headers/private/. -I ../headers/private/system -I ../headers/private/system/arch/x86_64 -I ../headers/private/shared -I ../headers/private/storage -I ../headers/private/fs_shell -I ../headers/private -I ../headers/build/host/linux -o "objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/BTree.o"
  3829.  
  3830. ...failed C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/BTree.o ...
  3831. C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Chunk.o
  3832. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  3833. from ../headers/private/kernel/util/AVLTree.h:9,
  3834. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  3835. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3836. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3837. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3838. ../headers/private/fs_shell/fssh_api_wrapper.h:1646: warning: "R_OK" redefined
  3839. 1646 | #define R_OK FSSH_R_OK
  3840. |
  3841. In file included from /usr/include/zconf.h:475,
  3842. from /usr/include/zlib.h:34,
  3843. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  3844. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3845. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3846. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3847. /usr/include/unistd.h:281: note: this is the location of the previous definition
  3848. 281 | #define R_OK 4 /* Test for read permission. */
  3849. |
  3850. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  3851. from ../headers/private/kernel/util/AVLTree.h:9,
  3852. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  3853. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3854. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3855. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3856. ../headers/private/fs_shell/fssh_api_wrapper.h:1647: warning: "W_OK" redefined
  3857. 1647 | #define W_OK FSSH_W_OK
  3858. |
  3859. In file included from /usr/include/zconf.h:475,
  3860. from /usr/include/zlib.h:34,
  3861. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  3862. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3863. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3864. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3865. /usr/include/unistd.h:282: note: this is the location of the previous definition
  3866. 282 | #define W_OK 2 /* Test for write permission. */
  3867. |
  3868. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  3869. from ../headers/private/kernel/util/AVLTree.h:9,
  3870. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  3871. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3872. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3873. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3874. ../headers/private/fs_shell/fssh_api_wrapper.h:1648: warning: "X_OK" redefined
  3875. 1648 | #define X_OK FSSH_X_OK
  3876. |
  3877. In file included from /usr/include/zconf.h:475,
  3878. from /usr/include/zlib.h:34,
  3879. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  3880. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3881. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3882. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3883. /usr/include/unistd.h:283: note: this is the location of the previous definition
  3884. 283 | #define X_OK 1 /* Test for execute permission. */
  3885. |
  3886. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  3887. from ../headers/private/kernel/util/AVLTree.h:9,
  3888. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  3889. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3890. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3891. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3892. ../headers/private/fs_shell/fssh_api_wrapper.h:1649: warning: "F_OK" redefined
  3893. 1649 | #define F_OK FSSH_F_OK
  3894. |
  3895. In file included from /usr/include/zconf.h:475,
  3896. from /usr/include/zlib.h:34,
  3897. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  3898. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3899. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3900. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3901. /usr/include/unistd.h:284: note: this is the location of the previous definition
  3902. 284 | #define F_OK 0 /* Test for existence. */
  3903. |
  3904. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  3905. from ../headers/private/kernel/util/AVLTree.h:9,
  3906. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  3907. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3908. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3909. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3910. ../headers/private/fs_shell/fssh_api_wrapper.h:1652: warning: "STDIN_FILENO" redefined
  3911. 1652 | #define STDIN_FILENO FSSH_STDIN_FILENO
  3912. |
  3913. In file included from /usr/include/zconf.h:475,
  3914. from /usr/include/zlib.h:34,
  3915. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  3916. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3917. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3918. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3919. /usr/include/unistd.h:210: note: this is the location of the previous definition
  3920. 210 | #define STDIN_FILENO 0 /* Standard input. */
  3921. |
  3922. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  3923. from ../headers/private/kernel/util/AVLTree.h:9,
  3924. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  3925. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3926. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3927. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3928. ../headers/private/fs_shell/fssh_api_wrapper.h:1653: warning: "STDOUT_FILENO" redefined
  3929. 1653 | #define STDOUT_FILENO FSSH_STDOUT_FILENO
  3930. |
  3931. In file included from /usr/include/zconf.h:475,
  3932. from /usr/include/zlib.h:34,
  3933. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  3934. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3935. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3936. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3937. /usr/include/unistd.h:211: note: this is the location of the previous definition
  3938. 211 | #define STDOUT_FILENO 1 /* Standard output. */
  3939. |
  3940. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  3941. from ../headers/private/kernel/util/AVLTree.h:9,
  3942. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  3943. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3944. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3945. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3946. ../headers/private/fs_shell/fssh_api_wrapper.h:1654: warning: "STDERR_FILENO" redefined
  3947. 1654 | #define STDERR_FILENO FSSH_STDERR_FILENO
  3948. |
  3949. In file included from /usr/include/zconf.h:475,
  3950. from /usr/include/zlib.h:34,
  3951. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  3952. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3953. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3954. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3955. /usr/include/unistd.h:212: note: this is the location of the previous definition
  3956. 212 | #define STDERR_FILENO 2 /* Standard error output. */
  3957. |
  3958. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  3959. from ../headers/private/kernel/util/AVLTree.h:9,
  3960. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  3961. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3962. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3963. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3964. ../headers/private/fs_shell/fssh_api_wrapper.h:1657: warning: "SEEK_SET" redefined
  3965. 1657 | #define SEEK_SET FSSH_SEEK_SET
  3966. |
  3967. In file included from /usr/include/zconf.h:475,
  3968. from /usr/include/zlib.h:34,
  3969. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  3970. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3971. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3972. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3973. /usr/include/unistd.h:311: note: this is the location of the previous definition
  3974. 311 | # define SEEK_SET 0 /* Seek from beginning of file. */
  3975. |
  3976. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  3977. from ../headers/private/kernel/util/AVLTree.h:9,
  3978. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  3979. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3980. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3981. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3982. ../headers/private/fs_shell/fssh_api_wrapper.h:1658: warning: "SEEK_CUR" redefined
  3983. 1658 | #define SEEK_CUR FSSH_SEEK_CUR
  3984. |
  3985. In file included from /usr/include/zconf.h:475,
  3986. from /usr/include/zlib.h:34,
  3987. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  3988. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3989. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3990. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  3991. /usr/include/unistd.h:312: note: this is the location of the previous definition
  3992. 312 | # define SEEK_CUR 1 /* Seek from current position. */
  3993. |
  3994. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  3995. from ../headers/private/kernel/util/AVLTree.h:9,
  3996. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  3997. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  3998. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  3999. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  4000. ../headers/private/fs_shell/fssh_api_wrapper.h:1659: warning: "SEEK_END" redefined
  4001. 1659 | #define SEEK_END FSSH_SEEK_END
  4002. |
  4003. In file included from /usr/include/zconf.h:475,
  4004. from /usr/include/zlib.h:34,
  4005. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4006. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4007. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  4008. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  4009. /usr/include/unistd.h:313: note: this is the location of the previous definition
  4010. 313 | # define SEEK_END 2 /* Seek from end of file. */
  4011. |
  4012. In file included from ../src/add-ons/kernel/file_systems/btrfs/Chunk.h:13,
  4013. from ../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp:11:
  4014. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:100:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4015. 100 | uuid_t fsid;
  4016. | ^~~~~~
  4017. | uid_t
  4018. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:103:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4019. 103 | uuid_t chunk_tree_uuid;
  4020. | ^~~~~~
  4021. | uid_t
  4022. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:169:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4023. 169 | uuid_t device_uuid;
  4024. | ^~~~~~
  4025. | uid_t
  4026. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:215:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4027. 215 | uuid_t uuid;
  4028. | ^~~~~~
  4029. | uid_t
  4030. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:216:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4031. 216 | uuid_t fsid;
  4032. | ^~~~~~
  4033. | uid_t
  4034. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:222:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4035. 222 | uuid_t fsid;
  4036. | ^~~~~~
  4037. | uid_t
  4038.  
  4039. gcc -c "../src/add-ons/kernel/file_systems/btrfs/Chunk.cpp" -O2 -Wall -Wno-trigraphs -Wno-ctor-dtor-privacy -Woverloaded-virtual -Wpointer-arith -Wcast-align -Wsign-compare -Wno-multichar -DFS_SHELL -DTRACE_BTRFS -Wno-multichar -fno-rtti -DHAIKU_BUILD_COMPATIBILITY_H -DARCH_x86_64 -D_NO_INLINE_ASM -D__NO_INLINE__ -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DHAIKU_HOST_USE_XATTR_REF -DHAIKU_HOST_PLATFORM_LINUX -DHAIKU_HOST_PLATFORM_64_BIT -DHAIKU_PACKAGING_ARCH=\"x86_64\" -iquote ../build/user_config_headers -iquote ../build/config_headers -iquote ../src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/linux/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/haiku/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote ../src/add-ons/kernel/file_systems/btrfs -iquote ../src/tools/fs_shell -I ../headers/build -I ../headers/build/os -I ../headers/build/os/support -I ../headers/private/. -I ../headers/private/kernel -I ../headers/private/libroot -I ../headers/private/shared -I ../headers/private/kernel/boot/platform/bios_ia32 -I ../headers/private/kernel/arch/x86 -I objects/haiku/x86_64/common/system/kernel -I ../headers/private/. -I ../headers/private/system -I ../headers/private/system/arch/x86_64 -I ../headers/private/shared -I ../headers/private/storage -I ../headers/private/fs_shell -I ../headers/private -I ../headers/build/host/linux -o "objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Chunk.o"
  4040.  
  4041. ...failed C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Chunk.o ...
  4042. C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/DirectoryIterator.o
  4043. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4044. from ../headers/private/kernel/util/AVLTree.h:9,
  4045. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4046. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4047. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4048. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4049. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4050. ../headers/private/fs_shell/fssh_api_wrapper.h:1646: warning: "R_OK" redefined
  4051. 1646 | #define R_OK FSSH_R_OK
  4052. |
  4053. In file included from /usr/include/zconf.h:475,
  4054. from /usr/include/zlib.h:34,
  4055. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4056. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4057. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4058. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4059. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4060. /usr/include/unistd.h:281: note: this is the location of the previous definition
  4061. 281 | #define R_OK 4 /* Test for read permission. */
  4062. |
  4063. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4064. from ../headers/private/kernel/util/AVLTree.h:9,
  4065. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4066. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4067. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4068. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4069. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4070. ../headers/private/fs_shell/fssh_api_wrapper.h:1647: warning: "W_OK" redefined
  4071. 1647 | #define W_OK FSSH_W_OK
  4072. |
  4073. In file included from /usr/include/zconf.h:475,
  4074. from /usr/include/zlib.h:34,
  4075. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4076. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4077. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4078. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4079. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4080. /usr/include/unistd.h:282: note: this is the location of the previous definition
  4081. 282 | #define W_OK 2 /* Test for write permission. */
  4082. |
  4083. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4084. from ../headers/private/kernel/util/AVLTree.h:9,
  4085. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4086. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4087. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4088. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4089. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4090. ../headers/private/fs_shell/fssh_api_wrapper.h:1648: warning: "X_OK" redefined
  4091. 1648 | #define X_OK FSSH_X_OK
  4092. |
  4093. In file included from /usr/include/zconf.h:475,
  4094. from /usr/include/zlib.h:34,
  4095. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4096. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4097. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4098. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4099. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4100. /usr/include/unistd.h:283: note: this is the location of the previous definition
  4101. 283 | #define X_OK 1 /* Test for execute permission. */
  4102. |
  4103. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4104. from ../headers/private/kernel/util/AVLTree.h:9,
  4105. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4106. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4107. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4108. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4109. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4110. ../headers/private/fs_shell/fssh_api_wrapper.h:1649: warning: "F_OK" redefined
  4111. 1649 | #define F_OK FSSH_F_OK
  4112. |
  4113. In file included from /usr/include/zconf.h:475,
  4114. from /usr/include/zlib.h:34,
  4115. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4116. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4117. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4118. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4119. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4120. /usr/include/unistd.h:284: note: this is the location of the previous definition
  4121. 284 | #define F_OK 0 /* Test for existence. */
  4122. |
  4123. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4124. from ../headers/private/kernel/util/AVLTree.h:9,
  4125. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4126. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4127. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4128. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4129. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4130. ../headers/private/fs_shell/fssh_api_wrapper.h:1652: warning: "STDIN_FILENO" redefined
  4131. 1652 | #define STDIN_FILENO FSSH_STDIN_FILENO
  4132. |
  4133. In file included from /usr/include/zconf.h:475,
  4134. from /usr/include/zlib.h:34,
  4135. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4136. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4137. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4138. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4139. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4140. /usr/include/unistd.h:210: note: this is the location of the previous definition
  4141. 210 | #define STDIN_FILENO 0 /* Standard input. */
  4142. |
  4143. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4144. from ../headers/private/kernel/util/AVLTree.h:9,
  4145. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4146. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4147. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4148. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4149. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4150. ../headers/private/fs_shell/fssh_api_wrapper.h:1653: warning: "STDOUT_FILENO" redefined
  4151. 1653 | #define STDOUT_FILENO FSSH_STDOUT_FILENO
  4152. |
  4153. In file included from /usr/include/zconf.h:475,
  4154. from /usr/include/zlib.h:34,
  4155. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4156. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4157. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4158. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4159. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4160. /usr/include/unistd.h:211: note: this is the location of the previous definition
  4161. 211 | #define STDOUT_FILENO 1 /* Standard output. */
  4162. |
  4163. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4164. from ../headers/private/kernel/util/AVLTree.h:9,
  4165. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4166. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4167. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4168. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4169. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4170. ../headers/private/fs_shell/fssh_api_wrapper.h:1654: warning: "STDERR_FILENO" redefined
  4171. 1654 | #define STDERR_FILENO FSSH_STDERR_FILENO
  4172. |
  4173. In file included from /usr/include/zconf.h:475,
  4174. from /usr/include/zlib.h:34,
  4175. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4176. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4177. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4178. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4179. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4180. /usr/include/unistd.h:212: note: this is the location of the previous definition
  4181. 212 | #define STDERR_FILENO 2 /* Standard error output. */
  4182. |
  4183. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4184. from ../headers/private/kernel/util/AVLTree.h:9,
  4185. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4186. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4187. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4188. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4189. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4190. ../headers/private/fs_shell/fssh_api_wrapper.h:1657: warning: "SEEK_SET" redefined
  4191. 1657 | #define SEEK_SET FSSH_SEEK_SET
  4192. |
  4193. In file included from /usr/include/zconf.h:475,
  4194. from /usr/include/zlib.h:34,
  4195. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4196. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4197. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4198. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4199. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4200. /usr/include/unistd.h:311: note: this is the location of the previous definition
  4201. 311 | # define SEEK_SET 0 /* Seek from beginning of file. */
  4202. |
  4203. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4204. from ../headers/private/kernel/util/AVLTree.h:9,
  4205. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4206. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4207. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4208. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4209. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4210. ../headers/private/fs_shell/fssh_api_wrapper.h:1658: warning: "SEEK_CUR" redefined
  4211. 1658 | #define SEEK_CUR FSSH_SEEK_CUR
  4212. |
  4213. In file included from /usr/include/zconf.h:475,
  4214. from /usr/include/zlib.h:34,
  4215. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4216. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4217. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4218. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4219. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4220. /usr/include/unistd.h:312: note: this is the location of the previous definition
  4221. 312 | # define SEEK_CUR 1 /* Seek from current position. */
  4222. |
  4223. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4224. from ../headers/private/kernel/util/AVLTree.h:9,
  4225. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4226. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4227. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4228. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4229. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4230. ../headers/private/fs_shell/fssh_api_wrapper.h:1659: warning: "SEEK_END" redefined
  4231. 1659 | #define SEEK_END FSSH_SEEK_END
  4232. |
  4233. In file included from /usr/include/zconf.h:475,
  4234. from /usr/include/zlib.h:34,
  4235. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4236. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4237. from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4238. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4239. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4240. /usr/include/unistd.h:313: note: this is the location of the previous definition
  4241. 313 | # define SEEK_END 2 /* Seek from end of file. */
  4242. |
  4243. In file included from ../src/add-ons/kernel/file_systems/btrfs/BTree.h:11,
  4244. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.h:10,
  4245. from ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:8:
  4246. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:100:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4247. 100 | uuid_t fsid;
  4248. | ^~~~~~
  4249. | uid_t
  4250. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:103:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4251. 103 | uuid_t chunk_tree_uuid;
  4252. | ^~~~~~
  4253. | uid_t
  4254. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:169:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4255. 169 | uuid_t device_uuid;
  4256. | ^~~~~~
  4257. | uid_t
  4258. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:215:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4259. 215 | uuid_t uuid;
  4260. | ^~~~~~
  4261. | uid_t
  4262. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:216:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4263. 216 | uuid_t fsid;
  4264. | ^~~~~~
  4265. | uid_t
  4266. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:222:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4267. 222 | uuid_t fsid;
  4268. | ^~~~~~
  4269. | uid_t
  4270. ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp: In member function ‘fssh_status_t DirectoryIterator::GetNext(char*, fssh_size_t*, fssh_ino_t*)’:
  4271. ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:14:30: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘uint32_t’ {aka ‘unsigned int’} [-Wformat=]
  4272. 14 | # define TRACE(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  4273. | ^~~~~~~~~~~~~~~~~~~~~~~~~
  4274. 15 | #else
  4275. | ~~~~~
  4276. 16 | # define TRACE(x...) ;
  4277. | ~~~~~~~~~~~~~~~~~~~~~~
  4278. 17 | #endif
  4279. | ~~~~~~
  4280. 18 | # define ERROR(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  4281. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4282. 19 |
  4283. |
  4284. 20 |
  4285. |
  4286. 21 | DirectoryIterator::DirectoryIterator(Inode* inode)
  4287. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4288. 22 | :
  4289. | ~
  4290. 23 | fOffset(0),
  4291. | ~~~~~~~~~~~
  4292. 24 | fInode(inode),
  4293. | ~~~~~~~~~~~~~~
  4294. 25 | fIterator(NULL)
  4295. | ~~~~~~~~~~~~~~~
  4296. 26 | {
  4297. | ~
  4298. 27 | btrfs_key key;
  4299. | ~~~~~~~~~~~~~~
  4300. 28 | key.SetType(BTRFS_KEY_TYPE_DIR_INDEX);
  4301. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4302. 29 | key.SetObjectID(inode->ID());
  4303. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4304. 30 | key.SetOffset(BTREE_BEGIN);
  4305. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4306. 31 | fIterator = new(std::nothrow) TreeIterator(inode->GetVolume()->FSTree(),
  4307. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4308. 32 | key);
  4309. | ~~~~~
  4310. 33 | }
  4311. | ~
  4312. 34 |
  4313. |
  4314. 35 |
  4315. |
  4316. 36 | DirectoryIterator::~DirectoryIterator()
  4317. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4318. 37 | {
  4319. | ~
  4320. 38 | delete fIterator;
  4321. | ~~~~~~~~~~~~~~~~~
  4322. 39 | fIterator = NULL;
  4323. | ~~~~~~~~~~~~~~~~~
  4324. 40 | }
  4325. | ~
  4326. 41 |
  4327. |
  4328. 42 |
  4329. |
  4330. 43 | status_t
  4331. | ~~~~~~~~
  4332. 44 | DirectoryIterator::InitCheck()
  4333. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4334. 45 | {
  4335. | ~
  4336. 46 | return fIterator != NULL ? B_OK : B_NO_MEMORY;
  4337. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4338. 47 | }
  4339. | ~
  4340. 48 |
  4341. |
  4342. 49 |
  4343. |
  4344. 50 | status_t
  4345. | ~~~~~~~~
  4346. 51 | DirectoryIterator::GetNext(char* name, size_t* _nameLength, ino_t* _id)
  4347. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4348. 52 | {
  4349. | ~
  4350. 53 | if (fOffset == 0) {
  4351. | ~~~~~~~~~~~~~~~~~~~
  4352. 54 | if (*_nameLength < 3)
  4353. | ~~~~~~~~~~~~~~~~~~~~~
  4354. 55 | return B_BUFFER_OVERFLOW;
  4355. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  4356. 56 | *_nameLength = 2;
  4357. | ~~~~~~~~~~~~~~~~~
  4358. 57 | strlcpy(name, "..", *_nameLength + 1);
  4359. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4360. 58 | *_id = fInode->ID();
  4361. | ~~~~~~~~~~~~~~~~~~~~
  4362. 59 | fOffset = 1;
  4363. | ~~~~~~~~~~~~
  4364. 60 | return B_OK;
  4365. | ~~~~~~~~~~~~
  4366. 61 | } else if (fOffset == 1) {
  4367. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  4368. 62 | if (*_nameLength < 2)
  4369. | ~~~~~~~~~~~~~~~~~~~~~
  4370. 63 | return B_BUFFER_OVERFLOW;
  4371. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  4372. 64 | *_nameLength = 1;
  4373. | ~~~~~~~~~~~~~~~~~
  4374. 65 | strlcpy(name, ".", *_nameLength + 1);
  4375. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4376. 66 | fOffset = 2;
  4377. | ~~~~~~~~~~~~
  4378. 67 | if (fInode->ID() == BTRFS_FIRST_SUBVOLUME) {
  4379. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4380. 68 | *_id = fInode->ID();
  4381. | ~~~~~~~~~~~~~~~~~~~~
  4382. 69 | return B_OK;
  4383. | ~~~~~~~~~~~~
  4384. 70 | }
  4385. | ~
  4386. 71 | return fInode->FindParent(_id);
  4387. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4388. 72 | }
  4389. | ~
  4390. 73 |
  4391. |
  4392. 74 | btrfs_dir_entry* entries;
  4393. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  4394. 75 | uint32 entries_length;
  4395. | ~~~~~~~~~~~~~~~~~~~~~~
  4396. 76 | status_t status = fIterator->GetNextEntry((void**)&entries, &entries_length);
  4397. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4398. 77 | if (status != B_OK)
  4399. | ~~~~~~~~~~~~~~~~~~~
  4400. 78 | return status;
  4401. | ~~~~~~~~~~~~~~
  4402. 79 |
  4403. |
  4404. 80 | btrfs_dir_entry* entry = entries;
  4405. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4406. 81 | uint16 current = 0;
  4407. | ~~~~~~~~~~~~~~~~~~~
  4408. 82 | while (current < entries_length) {
  4409. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4410. 83 | current += entry->Length();
  4411. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4412. 84 | break;
  4413. | ~~~~~~
  4414. 85 | // TODO there could be several entries with the same name hash
  4415. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4416. 86 | entry = (btrfs_dir_entry*)((uint8*)entry + entry->Length());
  4417. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4418. 87 | }
  4419. | ~
  4420. 88 |
  4421. |
  4422. 89 | size_t length = entry->NameLength();
  4423. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4424. 90 |
  4425. |
  4426. 91 | TRACE("DirectoryIterator::GetNext() entries_length %ld name_length %d\n",
  4427. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4428. 92 | entries_length, entry->NameLength());
  4429. | ~~~~~~~~~~~~~~
  4430. | |
  4431. | uint32_t {aka unsigned int}
  4432. ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:91:2: note: in expansion of macro ‘TRACE’
  4433. 91 | TRACE("DirectoryIterator::GetNext() entries_length %ld name_length %d\n",
  4434. | ^~~~~
  4435. ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:91:55: note: format string is defined here
  4436. 91 | TRACE("DirectoryIterator::GetNext() entries_length %ld name_length %d\n",
  4437. | ~~^
  4438. | |
  4439. | long int
  4440. | %d
  4441. ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp: In member function ‘fssh_status_t DirectoryIterator::Lookup(const char*, fssh_size_t, fssh_ino_t*)’:
  4442. ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:14:30: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘uint32_t’ {aka ‘unsigned int’} [-Wformat=]
  4443. 14 | # define TRACE(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  4444. | ^~~~~~~~~~~~~~~~~~~~~~~~~
  4445. 15 | #else
  4446. | ~~~~~
  4447. 16 | # define TRACE(x...) ;
  4448. | ~~~~~~~~~~~~~~~~~~~~~~
  4449. 17 | #endif
  4450. | ~~~~~~
  4451. 18 | # define ERROR(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  4452. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4453. 19 |
  4454. |
  4455. 20 |
  4456. |
  4457. 21 | DirectoryIterator::DirectoryIterator(Inode* inode)
  4458. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4459. 22 | :
  4460. | ~
  4461. 23 | fOffset(0),
  4462. | ~~~~~~~~~~~
  4463. 24 | fInode(inode),
  4464. | ~~~~~~~~~~~~~~
  4465. 25 | fIterator(NULL)
  4466. | ~~~~~~~~~~~~~~~
  4467. 26 | {
  4468. | ~
  4469. 27 | btrfs_key key;
  4470. | ~~~~~~~~~~~~~~
  4471. 28 | key.SetType(BTRFS_KEY_TYPE_DIR_INDEX);
  4472. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4473. 29 | key.SetObjectID(inode->ID());
  4474. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4475. 30 | key.SetOffset(BTREE_BEGIN);
  4476. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4477. 31 | fIterator = new(std::nothrow) TreeIterator(inode->GetVolume()->FSTree(),
  4478. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4479. 32 | key);
  4480. | ~~~~~
  4481. 33 | }
  4482. | ~
  4483. 34 |
  4484. |
  4485. 35 |
  4486. |
  4487. 36 | DirectoryIterator::~DirectoryIterator()
  4488. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4489. 37 | {
  4490. | ~
  4491. 38 | delete fIterator;
  4492. | ~~~~~~~~~~~~~~~~~
  4493. 39 | fIterator = NULL;
  4494. | ~~~~~~~~~~~~~~~~~
  4495. 40 | }
  4496. | ~
  4497. 41 |
  4498. |
  4499. 42 |
  4500. |
  4501. 43 | status_t
  4502. | ~~~~~~~~
  4503. 44 | DirectoryIterator::InitCheck()
  4504. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4505. 45 | {
  4506. | ~
  4507. 46 | return fIterator != NULL ? B_OK : B_NO_MEMORY;
  4508. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4509. 47 | }
  4510. | ~
  4511. 48 |
  4512. |
  4513. 49 |
  4514. |
  4515. 50 | status_t
  4516. | ~~~~~~~~
  4517. 51 | DirectoryIterator::GetNext(char* name, size_t* _nameLength, ino_t* _id)
  4518. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4519. 52 | {
  4520. | ~
  4521. 53 | if (fOffset == 0) {
  4522. | ~~~~~~~~~~~~~~~~~~~
  4523. 54 | if (*_nameLength < 3)
  4524. | ~~~~~~~~~~~~~~~~~~~~~
  4525. 55 | return B_BUFFER_OVERFLOW;
  4526. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  4527. 56 | *_nameLength = 2;
  4528. | ~~~~~~~~~~~~~~~~~
  4529. 57 | strlcpy(name, "..", *_nameLength + 1);
  4530. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4531. 58 | *_id = fInode->ID();
  4532. | ~~~~~~~~~~~~~~~~~~~~
  4533. 59 | fOffset = 1;
  4534. | ~~~~~~~~~~~~
  4535. 60 | return B_OK;
  4536. | ~~~~~~~~~~~~
  4537. 61 | } else if (fOffset == 1) {
  4538. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  4539. 62 | if (*_nameLength < 2)
  4540. | ~~~~~~~~~~~~~~~~~~~~~
  4541. 63 | return B_BUFFER_OVERFLOW;
  4542. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  4543. 64 | *_nameLength = 1;
  4544. | ~~~~~~~~~~~~~~~~~
  4545. 65 | strlcpy(name, ".", *_nameLength + 1);
  4546. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4547. 66 | fOffset = 2;
  4548. | ~~~~~~~~~~~~
  4549. 67 | if (fInode->ID() == BTRFS_FIRST_SUBVOLUME) {
  4550. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4551. 68 | *_id = fInode->ID();
  4552. | ~~~~~~~~~~~~~~~~~~~~
  4553. 69 | return B_OK;
  4554. | ~~~~~~~~~~~~
  4555. 70 | }
  4556. | ~
  4557. 71 | return fInode->FindParent(_id);
  4558. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4559. 72 | }
  4560. | ~
  4561. 73 |
  4562. |
  4563. 74 | btrfs_dir_entry* entries;
  4564. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  4565. 75 | uint32 entries_length;
  4566. | ~~~~~~~~~~~~~~~~~~~~~~
  4567. 76 | status_t status = fIterator->GetNextEntry((void**)&entries, &entries_length);
  4568. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4569. 77 | if (status != B_OK)
  4570. | ~~~~~~~~~~~~~~~~~~~
  4571. 78 | return status;
  4572. | ~~~~~~~~~~~~~~
  4573. 79 |
  4574. |
  4575. 80 | btrfs_dir_entry* entry = entries;
  4576. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4577. 81 | uint16 current = 0;
  4578. | ~~~~~~~~~~~~~~~~~~~
  4579. 82 | while (current < entries_length) {
  4580. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4581. 83 | current += entry->Length();
  4582. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4583. 84 | break;
  4584. | ~~~~~~
  4585. 85 | // TODO there could be several entries with the same name hash
  4586. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4587. 86 | entry = (btrfs_dir_entry*)((uint8*)entry + entry->Length());
  4588. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4589. 87 | }
  4590. | ~
  4591. 88 |
  4592. |
  4593. 89 | size_t length = entry->NameLength();
  4594. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4595. 90 |
  4596. |
  4597. 91 | TRACE("DirectoryIterator::GetNext() entries_length %ld name_length %d\n",
  4598. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4599. 92 | entries_length, entry->NameLength());
  4600. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4601. 93 |
  4602. |
  4603. 94 | if (length + 1 > *_nameLength) {
  4604. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4605. 95 | free(entries);
  4606. | ~~~~~~~~~~~~~~
  4607. 96 | return B_BUFFER_OVERFLOW;
  4608. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  4609. 97 | }
  4610. | ~
  4611. 98 |
  4612. |
  4613. 99 | memcpy(name, entry + 1, length);
  4614. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4615. 100 | name[length] = '\0';
  4616. | ~~~~~~~~~~~~~~~~~~~~
  4617. 101 | *_nameLength = length;
  4618. | ~~~~~~~~~~~~~~~~~~~~~~
  4619. 102 | *_id = entry->InodeID();
  4620. | ~~~~~~~~~~~~~~~~~~~~~~~~
  4621. 103 | free(entries);
  4622. | ~~~~~~~~~~~~~~
  4623. 104 |
  4624. |
  4625. 105 | return B_OK;
  4626. | ~~~~~~~~~~~~
  4627. 106 | }
  4628. | ~
  4629. 107 |
  4630. |
  4631. 108 |
  4632. |
  4633. 109 | status_t
  4634. | ~~~~~~~~
  4635. 110 | DirectoryIterator::Lookup(const char* name, size_t nameLength, ino_t* _id)
  4636. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4637. 111 | {
  4638. | ~
  4639. 112 | if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) {
  4640. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4641. 113 | if (strcmp(name, ".") == 0
  4642. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  4643. 114 | || fInode->ID() == BTRFS_FIRST_SUBVOLUME) {
  4644. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4645. 115 | *_id = fInode->ID();
  4646. | ~~~~~~~~~~~~~~~~~~~~
  4647. 116 | return B_OK;
  4648. | ~~~~~~~~~~~~
  4649. 117 | }
  4650. | ~
  4651. 118 | return fInode->FindParent(_id);
  4652. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4653. 119 | }
  4654. | ~
  4655. 120 |
  4656. |
  4657. 121 | uint32 hash = calculate_crc((uint32)~1, (uint8*)name, nameLength);
  4658. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4659. 122 | btrfs_key key;
  4660. | ~~~~~~~~~~~~~~
  4661. 123 | key.SetType(BTRFS_KEY_TYPE_DIR_ITEM);
  4662. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4663. 124 | key.SetObjectID(fInode->ID());
  4664. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4665. 125 | key.SetOffset(hash);
  4666. | ~~~~~~~~~~~~~~~~~~~~
  4667. 126 | BTree::Path path(fInode->GetVolume()->FSTree());
  4668. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4669. 127 |
  4670. |
  4671. 128 | btrfs_dir_entry* entries;
  4672. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  4673. 129 | uint32 length;
  4674. | ~~~~~~~~~~~~~~
  4675. 130 | status_t status = fInode->GetVolume()->FSTree()->FindExact(&path, key,
  4676. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4677. 131 | (void**)&entries, &length);
  4678. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4679. 132 | if (status != B_OK) {
  4680. | ~~~~~~~~~~~~~~~~~~~~~
  4681. 133 | TRACE("DirectoryIterator::Lookup(): Couldn't find entry with hash %" B_PRIu32
  4682. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4683. 134 | " \"%s\"\n", hash, name);
  4684. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  4685. 135 | return status;
  4686. | ~~~~~~~~~~~~~~
  4687. 136 | }
  4688. | ~
  4689. 137 |
  4690. |
  4691. 138 | btrfs_dir_entry* entry = entries;
  4692. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4693. 139 | uint16 current = 0;
  4694. | ~~~~~~~~~~~~~~~~~~~
  4695. 140 | while (current < length) {
  4696. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  4697. 141 | current += entry->Length();
  4698. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4699. 142 | break;
  4700. | ~~~~~~
  4701. 143 | // TODO there could be several entries with the same name hash
  4702. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4703. 144 | entry = (btrfs_dir_entry*)((uint8*)entry + entry->Length());
  4704. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4705. 145 | }
  4706. | ~
  4707. 146 |
  4708. |
  4709. 147 | TRACE("DirectoryIterator::Lookup() entries_length %ld name_length %d\n",
  4710. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4711. 148 | length, entry->NameLength());
  4712. | ~~~~~~
  4713. | |
  4714. | uint32_t {aka unsigned int}
  4715. ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:147:2: note: in expansion of macro ‘TRACE’
  4716. 147 | TRACE("DirectoryIterator::Lookup() entries_length %ld name_length %d\n",
  4717. | ^~~~~
  4718. ../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp:147:54: note: format string is defined here
  4719. 147 | TRACE("DirectoryIterator::Lookup() entries_length %ld name_length %d\n",
  4720. | ~~^
  4721. | |
  4722. | long int
  4723. | %d
  4724.  
  4725. gcc -c "../src/add-ons/kernel/file_systems/btrfs/DirectoryIterator.cpp" -O2 -Wall -Wno-trigraphs -Wno-ctor-dtor-privacy -Woverloaded-virtual -Wpointer-arith -Wcast-align -Wsign-compare -Wno-multichar -DFS_SHELL -DTRACE_BTRFS -Wno-multichar -fno-rtti -DHAIKU_BUILD_COMPATIBILITY_H -DARCH_x86_64 -D_NO_INLINE_ASM -D__NO_INLINE__ -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DHAIKU_HOST_USE_XATTR_REF -DHAIKU_HOST_PLATFORM_LINUX -DHAIKU_HOST_PLATFORM_64_BIT -DHAIKU_PACKAGING_ARCH=\"x86_64\" -iquote ../build/user_config_headers -iquote ../build/config_headers -iquote ../src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/linux/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/haiku/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote ../src/add-ons/kernel/file_systems/btrfs -iquote ../src/tools/fs_shell -I ../headers/build -I ../headers/build/os -I ../headers/build/os/support -I ../headers/private/. -I ../headers/private/kernel -I ../headers/private/libroot -I ../headers/private/shared -I ../headers/private/kernel/boot/platform/bios_ia32 -I ../headers/private/kernel/arch/x86 -I objects/haiku/x86_64/common/system/kernel -I ../headers/private/. -I ../headers/private/system -I ../headers/private/system/arch/x86_64 -I ../headers/private/shared -I ../headers/private/storage -I ../headers/private/fs_shell -I ../headers/private -I ../headers/build/host/linux -o "objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/DirectoryIterator.o"
  4726.  
  4727. ...failed C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/DirectoryIterator.o ...
  4728. C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/ExtentAllocator.o
  4729. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4730. from ../headers/private/kernel/util/AVLTree.h:9,
  4731. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4732. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4733. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4734. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4735. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4736. ../headers/private/fs_shell/fssh_api_wrapper.h:1646: warning: "R_OK" redefined
  4737. 1646 | #define R_OK FSSH_R_OK
  4738. |
  4739. In file included from /usr/include/zconf.h:475,
  4740. from /usr/include/zlib.h:34,
  4741. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4742. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4743. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4744. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4745. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4746. /usr/include/unistd.h:281: note: this is the location of the previous definition
  4747. 281 | #define R_OK 4 /* Test for read permission. */
  4748. |
  4749. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4750. from ../headers/private/kernel/util/AVLTree.h:9,
  4751. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4752. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4753. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4754. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4755. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4756. ../headers/private/fs_shell/fssh_api_wrapper.h:1647: warning: "W_OK" redefined
  4757. 1647 | #define W_OK FSSH_W_OK
  4758. |
  4759. In file included from /usr/include/zconf.h:475,
  4760. from /usr/include/zlib.h:34,
  4761. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4762. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4763. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4764. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4765. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4766. /usr/include/unistd.h:282: note: this is the location of the previous definition
  4767. 282 | #define W_OK 2 /* Test for write permission. */
  4768. |
  4769. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4770. from ../headers/private/kernel/util/AVLTree.h:9,
  4771. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4772. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4773. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4774. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4775. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4776. ../headers/private/fs_shell/fssh_api_wrapper.h:1648: warning: "X_OK" redefined
  4777. 1648 | #define X_OK FSSH_X_OK
  4778. |
  4779. In file included from /usr/include/zconf.h:475,
  4780. from /usr/include/zlib.h:34,
  4781. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4782. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4783. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4784. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4785. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4786. /usr/include/unistd.h:283: note: this is the location of the previous definition
  4787. 283 | #define X_OK 1 /* Test for execute permission. */
  4788. |
  4789. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4790. from ../headers/private/kernel/util/AVLTree.h:9,
  4791. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4792. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4793. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4794. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4795. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4796. ../headers/private/fs_shell/fssh_api_wrapper.h:1649: warning: "F_OK" redefined
  4797. 1649 | #define F_OK FSSH_F_OK
  4798. |
  4799. In file included from /usr/include/zconf.h:475,
  4800. from /usr/include/zlib.h:34,
  4801. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4802. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4803. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4804. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4805. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4806. /usr/include/unistd.h:284: note: this is the location of the previous definition
  4807. 284 | #define F_OK 0 /* Test for existence. */
  4808. |
  4809. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4810. from ../headers/private/kernel/util/AVLTree.h:9,
  4811. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4812. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4813. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4814. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4815. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4816. ../headers/private/fs_shell/fssh_api_wrapper.h:1652: warning: "STDIN_FILENO" redefined
  4817. 1652 | #define STDIN_FILENO FSSH_STDIN_FILENO
  4818. |
  4819. In file included from /usr/include/zconf.h:475,
  4820. from /usr/include/zlib.h:34,
  4821. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4822. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4823. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4824. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4825. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4826. /usr/include/unistd.h:210: note: this is the location of the previous definition
  4827. 210 | #define STDIN_FILENO 0 /* Standard input. */
  4828. |
  4829. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4830. from ../headers/private/kernel/util/AVLTree.h:9,
  4831. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4832. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4833. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4834. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4835. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4836. ../headers/private/fs_shell/fssh_api_wrapper.h:1653: warning: "STDOUT_FILENO" redefined
  4837. 1653 | #define STDOUT_FILENO FSSH_STDOUT_FILENO
  4838. |
  4839. In file included from /usr/include/zconf.h:475,
  4840. from /usr/include/zlib.h:34,
  4841. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4842. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4843. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4844. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4845. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4846. /usr/include/unistd.h:211: note: this is the location of the previous definition
  4847. 211 | #define STDOUT_FILENO 1 /* Standard output. */
  4848. |
  4849. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4850. from ../headers/private/kernel/util/AVLTree.h:9,
  4851. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4852. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4853. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4854. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4855. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4856. ../headers/private/fs_shell/fssh_api_wrapper.h:1654: warning: "STDERR_FILENO" redefined
  4857. 1654 | #define STDERR_FILENO FSSH_STDERR_FILENO
  4858. |
  4859. In file included from /usr/include/zconf.h:475,
  4860. from /usr/include/zlib.h:34,
  4861. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4862. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4863. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4864. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4865. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4866. /usr/include/unistd.h:212: note: this is the location of the previous definition
  4867. 212 | #define STDERR_FILENO 2 /* Standard error output. */
  4868. |
  4869. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4870. from ../headers/private/kernel/util/AVLTree.h:9,
  4871. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4872. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4873. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4874. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4875. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4876. ../headers/private/fs_shell/fssh_api_wrapper.h:1657: warning: "SEEK_SET" redefined
  4877. 1657 | #define SEEK_SET FSSH_SEEK_SET
  4878. |
  4879. In file included from /usr/include/zconf.h:475,
  4880. from /usr/include/zlib.h:34,
  4881. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4882. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4883. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4884. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4885. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4886. /usr/include/unistd.h:311: note: this is the location of the previous definition
  4887. 311 | # define SEEK_SET 0 /* Seek from beginning of file. */
  4888. |
  4889. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4890. from ../headers/private/kernel/util/AVLTree.h:9,
  4891. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4892. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4893. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4894. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4895. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4896. ../headers/private/fs_shell/fssh_api_wrapper.h:1658: warning: "SEEK_CUR" redefined
  4897. 1658 | #define SEEK_CUR FSSH_SEEK_CUR
  4898. |
  4899. In file included from /usr/include/zconf.h:475,
  4900. from /usr/include/zlib.h:34,
  4901. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4902. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4903. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4904. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4905. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4906. /usr/include/unistd.h:312: note: this is the location of the previous definition
  4907. 312 | # define SEEK_CUR 1 /* Seek from current position. */
  4908. |
  4909. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4910. from ../headers/private/kernel/util/AVLTree.h:9,
  4911. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4912. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4913. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4914. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4915. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4916. ../headers/private/fs_shell/fssh_api_wrapper.h:1659: warning: "SEEK_END" redefined
  4917. 1659 | #define SEEK_END FSSH_SEEK_END
  4918. |
  4919. In file included from /usr/include/zconf.h:475,
  4920. from /usr/include/zlib.h:34,
  4921. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4922. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4923. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4924. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4925. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4926. /usr/include/unistd.h:313: note: this is the location of the previous definition
  4927. 313 | # define SEEK_END 2 /* Seek from end of file. */
  4928. |
  4929. In file included from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  4930. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.h:9,
  4931. from ../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp:7:
  4932. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:100:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4933. 100 | uuid_t fsid;
  4934. | ^~~~~~
  4935. | uid_t
  4936. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:103:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4937. 103 | uuid_t chunk_tree_uuid;
  4938. | ^~~~~~
  4939. | uid_t
  4940. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:169:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4941. 169 | uuid_t device_uuid;
  4942. | ^~~~~~
  4943. | uid_t
  4944. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:215:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4945. 215 | uuid_t uuid;
  4946. | ^~~~~~
  4947. | uid_t
  4948. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:216:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4949. 216 | uuid_t fsid;
  4950. | ^~~~~~
  4951. | uid_t
  4952. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:222:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  4953. 222 | uuid_t fsid;
  4954. | ^~~~~~
  4955. | uid_t
  4956.  
  4957. gcc -c "../src/add-ons/kernel/file_systems/btrfs/ExtentAllocator.cpp" -O2 -Wall -Wno-trigraphs -Wno-ctor-dtor-privacy -Woverloaded-virtual -Wpointer-arith -Wcast-align -Wsign-compare -Wno-multichar -DFS_SHELL -DTRACE_BTRFS -Wno-multichar -fno-rtti -DHAIKU_BUILD_COMPATIBILITY_H -DARCH_x86_64 -D_NO_INLINE_ASM -D__NO_INLINE__ -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DHAIKU_HOST_USE_XATTR_REF -DHAIKU_HOST_PLATFORM_LINUX -DHAIKU_HOST_PLATFORM_64_BIT -DHAIKU_PACKAGING_ARCH=\"x86_64\" -iquote ../build/user_config_headers -iquote ../build/config_headers -iquote ../src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/linux/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/haiku/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote ../src/add-ons/kernel/file_systems/btrfs -iquote ../src/tools/fs_shell -I ../headers/build -I ../headers/build/os -I ../headers/build/os/support -I ../headers/private/. -I ../headers/private/kernel -I ../headers/private/libroot -I ../headers/private/shared -I ../headers/private/kernel/boot/platform/bios_ia32 -I ../headers/private/kernel/arch/x86 -I objects/haiku/x86_64/common/system/kernel -I ../headers/private/. -I ../headers/private/system -I ../headers/private/system/arch/x86_64 -I ../headers/private/shared -I ../headers/private/storage -I ../headers/private/fs_shell -I ../headers/private -I ../headers/build/host/linux -o "objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/ExtentAllocator.o"
  4958.  
  4959. ...failed C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/ExtentAllocator.o ...
  4960. C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Inode.o
  4961. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4962. from ../headers/private/kernel/util/AVLTree.h:9,
  4963. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4964. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4965. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  4966. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  4967. ../headers/private/fs_shell/fssh_api_wrapper.h:1646: warning: "R_OK" redefined
  4968. 1646 | #define R_OK FSSH_R_OK
  4969. |
  4970. In file included from /usr/include/zconf.h:475,
  4971. from /usr/include/zlib.h:34,
  4972. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4973. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4974. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  4975. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  4976. /usr/include/unistd.h:281: note: this is the location of the previous definition
  4977. 281 | #define R_OK 4 /* Test for read permission. */
  4978. |
  4979. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4980. from ../headers/private/kernel/util/AVLTree.h:9,
  4981. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  4982. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4983. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  4984. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  4985. ../headers/private/fs_shell/fssh_api_wrapper.h:1647: warning: "W_OK" redefined
  4986. 1647 | #define W_OK FSSH_W_OK
  4987. |
  4988. In file included from /usr/include/zconf.h:475,
  4989. from /usr/include/zlib.h:34,
  4990. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  4991. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  4992. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  4993. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  4994. /usr/include/unistd.h:282: note: this is the location of the previous definition
  4995. 282 | #define W_OK 2 /* Test for write permission. */
  4996. |
  4997. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  4998. from ../headers/private/kernel/util/AVLTree.h:9,
  4999. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  5000. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  5001. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  5002. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  5003. ../headers/private/fs_shell/fssh_api_wrapper.h:1648: warning: "X_OK" redefined
  5004. 1648 | #define X_OK FSSH_X_OK
  5005. |
  5006. In file included from /usr/include/zconf.h:475,
  5007. from /usr/include/zlib.h:34,
  5008. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  5009. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  5010. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  5011. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  5012. /usr/include/unistd.h:283: note: this is the location of the previous definition
  5013. 283 | #define X_OK 1 /* Test for execute permission. */
  5014. |
  5015. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  5016. from ../headers/private/kernel/util/AVLTree.h:9,
  5017. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  5018. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  5019. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  5020. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  5021. ../headers/private/fs_shell/fssh_api_wrapper.h:1649: warning: "F_OK" redefined
  5022. 1649 | #define F_OK FSSH_F_OK
  5023. |
  5024. In file included from /usr/include/zconf.h:475,
  5025. from /usr/include/zlib.h:34,
  5026. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  5027. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  5028. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  5029. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  5030. /usr/include/unistd.h:284: note: this is the location of the previous definition
  5031. 284 | #define F_OK 0 /* Test for existence. */
  5032. |
  5033. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  5034. from ../headers/private/kernel/util/AVLTree.h:9,
  5035. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  5036. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  5037. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  5038. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  5039. ../headers/private/fs_shell/fssh_api_wrapper.h:1652: warning: "STDIN_FILENO" redefined
  5040. 1652 | #define STDIN_FILENO FSSH_STDIN_FILENO
  5041. |
  5042. In file included from /usr/include/zconf.h:475,
  5043. from /usr/include/zlib.h:34,
  5044. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  5045. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  5046. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  5047. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  5048. /usr/include/unistd.h:210: note: this is the location of the previous definition
  5049. 210 | #define STDIN_FILENO 0 /* Standard input. */
  5050. |
  5051. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  5052. from ../headers/private/kernel/util/AVLTree.h:9,
  5053. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  5054. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  5055. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  5056. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  5057. ../headers/private/fs_shell/fssh_api_wrapper.h:1653: warning: "STDOUT_FILENO" redefined
  5058. 1653 | #define STDOUT_FILENO FSSH_STDOUT_FILENO
  5059. |
  5060. In file included from /usr/include/zconf.h:475,
  5061. from /usr/include/zlib.h:34,
  5062. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  5063. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  5064. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  5065. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  5066. /usr/include/unistd.h:211: note: this is the location of the previous definition
  5067. 211 | #define STDOUT_FILENO 1 /* Standard output. */
  5068. |
  5069. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  5070. from ../headers/private/kernel/util/AVLTree.h:9,
  5071. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  5072. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  5073. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  5074. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  5075. ../headers/private/fs_shell/fssh_api_wrapper.h:1654: warning: "STDERR_FILENO" redefined
  5076. 1654 | #define STDERR_FILENO FSSH_STDERR_FILENO
  5077. |
  5078. In file included from /usr/include/zconf.h:475,
  5079. from /usr/include/zlib.h:34,
  5080. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  5081. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  5082. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  5083. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  5084. /usr/include/unistd.h:212: note: this is the location of the previous definition
  5085. 212 | #define STDERR_FILENO 2 /* Standard error output. */
  5086. |
  5087. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  5088. from ../headers/private/kernel/util/AVLTree.h:9,
  5089. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  5090. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  5091. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  5092. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  5093. ../headers/private/fs_shell/fssh_api_wrapper.h:1657: warning: "SEEK_SET" redefined
  5094. 1657 | #define SEEK_SET FSSH_SEEK_SET
  5095. |
  5096. In file included from /usr/include/zconf.h:475,
  5097. from /usr/include/zlib.h:34,
  5098. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  5099. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  5100. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  5101. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  5102. /usr/include/unistd.h:311: note: this is the location of the previous definition
  5103. 311 | # define SEEK_SET 0 /* Seek from beginning of file. */
  5104. |
  5105. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  5106. from ../headers/private/kernel/util/AVLTree.h:9,
  5107. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  5108. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  5109. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  5110. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  5111. ../headers/private/fs_shell/fssh_api_wrapper.h:1658: warning: "SEEK_CUR" redefined
  5112. 1658 | #define SEEK_CUR FSSH_SEEK_CUR
  5113. |
  5114. In file included from /usr/include/zconf.h:475,
  5115. from /usr/include/zlib.h:34,
  5116. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  5117. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  5118. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  5119. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  5120. /usr/include/unistd.h:312: note: this is the location of the previous definition
  5121. 312 | # define SEEK_CUR 1 /* Seek from current position. */
  5122. |
  5123. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  5124. from ../headers/private/kernel/util/AVLTree.h:9,
  5125. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  5126. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  5127. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  5128. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  5129. ../headers/private/fs_shell/fssh_api_wrapper.h:1659: warning: "SEEK_END" redefined
  5130. 1659 | #define SEEK_END FSSH_SEEK_END
  5131. |
  5132. In file included from /usr/include/zconf.h:475,
  5133. from /usr/include/zlib.h:34,
  5134. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  5135. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  5136. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  5137. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  5138. /usr/include/unistd.h:313: note: this is the location of the previous definition
  5139. 313 | # define SEEK_END 2 /* Seek from end of file. */
  5140. |
  5141. In file included from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  5142. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  5143. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:100:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  5144. 100 | uuid_t fsid;
  5145. | ^~~~~~
  5146. | uid_t
  5147. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:103:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  5148. 103 | uuid_t chunk_tree_uuid;
  5149. | ^~~~~~
  5150. | uid_t
  5151. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:169:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  5152. 169 | uuid_t device_uuid;
  5153. | ^~~~~~
  5154. | uid_t
  5155. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:215:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  5156. 215 | uuid_t uuid;
  5157. | ^~~~~~
  5158. | uid_t
  5159. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:216:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  5160. 216 | uuid_t fsid;
  5161. | ^~~~~~
  5162. | uid_t
  5163. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:222:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  5164. 222 | uuid_t fsid;
  5165. | ^~~~~~
  5166. | uid_t
  5167. ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp: In static member function ‘static Inode* Inode::Create(Transaction&, fssh_ino_t, Inode*, int32_t, uint64_t, uint64_t)’:
  5168. ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:19:30: warning: ' ' flag used with ‘%u’ gnu_printf format [-Wformat=]
  5169. 19 | # define TRACE(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  5170. | ^~~~~~~~~~~~~~~~~~~~~~~~~
  5171. 20 | # define ASSERT(x) { if (!(x)) kernel_debugger("btrfs: assert failed: " #x "\n"); }
  5172. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5173. 21 | #else
  5174. | ~~~~~
  5175. 22 | # define TRACE(x...) ;
  5176. | ~~~~~~~~~~~~~~~~~~~~~~
  5177. 23 | # define ASSERT(x) ;
  5178. | ~~~~~~~~~~~~~~~~~~~~
  5179. 24 | #endif
  5180. | ~~~~~~
  5181. 25 | #define ERROR(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  5182. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5183. 26 |
  5184. |
  5185. 27 |
  5186. |
  5187. 28 | Inode::Inode(Volume* volume, ino_t id)
  5188. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5189. 29 | :
  5190. | ~
  5191. 30 | fVolume(volume),
  5192. | ~~~~~~~~~~~~~~~~
  5193. 31 | fID(id),
  5194. | ~~~~~~~~
  5195. 32 | fCache(NULL),
  5196. | ~~~~~~~~~~~~~
  5197. 33 | fMap(NULL)
  5198. | ~~~~~~~~~~
  5199. 34 | {
  5200. | ~
  5201. 35 | rw_lock_init(&fLock, "btrfs inode");
  5202. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5203. 36 |
  5204. |
  5205. 37 | fInitStatus = UpdateNodeFromDisk();
  5206. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5207. 38 | if (fInitStatus == B_OK) {
  5208. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  5209. 39 | if (!IsDirectory() && !IsSymLink()) {
  5210. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5211. 40 | fCache = file_cache_create(fVolume->ID(), ID(), Size());
  5212. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5213. 41 | fMap = file_map_create(fVolume->ID(), ID(), Size());
  5214. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5215. 42 | }
  5216. | ~
  5217. 43 | }
  5218. | ~
  5219. 44 | }
  5220. | ~
  5221. 45 |
  5222. |
  5223. 46 |
  5224. |
  5225. 47 | Inode::Inode(Volume* volume, ino_t id, const btrfs_inode& item)
  5226. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5227. 48 | :
  5228. | ~
  5229. 49 | fVolume(volume),
  5230. | ~~~~~~~~~~~~~~~~
  5231. 50 | fID(id),
  5232. | ~~~~~~~~
  5233. 51 | fCache(NULL),
  5234. | ~~~~~~~~~~~~~
  5235. 52 | fMap(NULL),
  5236. | ~~~~~~~~~~~
  5237. 53 | fInitStatus(B_OK),
  5238. | ~~~~~~~~~~~~~~~~~~
  5239. 54 | fNode(item)
  5240. | ~~~~~~~~~~~
  5241. 55 | {
  5242. | ~
  5243. 56 | if (!IsDirectory() && !IsSymLink()) {
  5244. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5245. 57 | fCache = file_cache_create(fVolume->ID(), ID(), Size());
  5246. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5247. 58 | fMap = file_map_create(fVolume->ID(), ID(), Size());
  5248. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5249. 59 | }
  5250. | ~
  5251. 60 | }
  5252. | ~
  5253. 61 |
  5254. |
  5255. 62 |
  5256. |
  5257. 63 | Inode::Inode(Volume* volume)
  5258. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5259. 64 | :
  5260. | ~
  5261. 65 | fVolume(volume),
  5262. | ~~~~~~~~~~~~~~~~
  5263. 66 | fID(0),
  5264. | ~~~~~~~
  5265. 67 | fCache(NULL),
  5266. | ~~~~~~~~~~~~~
  5267. 68 | fMap(NULL),
  5268. | ~~~~~~~~~~~
  5269. 69 | fInitStatus(B_NO_INIT)
  5270. | ~~~~~~~~~~~~~~~~~~~~~~
  5271. 70 | {
  5272. | ~
  5273. 71 | rw_lock_init(&fLock, "btrfs inode");
  5274. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5275. 72 | }
  5276. | ~
  5277. 73 |
  5278. |
  5279. 74 |
  5280. |
  5281. 75 | Inode::~Inode()
  5282. | ~~~~~~~~~~~~~~~
  5283. 76 | {
  5284. | ~
  5285. 77 | TRACE("Inode destructor\n");
  5286. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5287. 78 | file_cache_delete(FileCache());
  5288. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5289. 79 | file_map_delete(Map());
  5290. | ~~~~~~~~~~~~~~~~~~~~~~~
  5291. 80 | TRACE("Inode destructor: Done\n");
  5292. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5293. 81 | }
  5294. | ~
  5295. 82 |
  5296. |
  5297. 83 |
  5298. |
  5299. 84 | status_t
  5300. | ~~~~~~~~
  5301. 85 | Inode::InitCheck()
  5302. | ~~~~~~~~~~~~~~~~~~
  5303. 86 | {
  5304. | ~
  5305. 87 | return fInitStatus;
  5306. | ~~~~~~~~~~~~~~~~~~~
  5307. 88 | }
  5308. | ~
  5309. 89 |
  5310. |
  5311. 90 |
  5312. |
  5313. 91 | status_t
  5314. | ~~~~~~~~
  5315. 92 | Inode::UpdateNodeFromDisk()
  5316. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5317. 93 | {
  5318. | ~
  5319. 94 | btrfs_key search_key;
  5320. | ~~~~~~~~~~~~~~~~~~~~~
  5321. 95 | search_key.SetType(BTRFS_KEY_TYPE_INODE_ITEM);
  5322. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5323. 96 | search_key.SetObjectID(fID);
  5324. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5325. 97 | search_key.SetOffset(0);
  5326. | ~~~~~~~~~~~~~~~~~~~~~~~~
  5327. 98 | BTree::Path path(fVolume->FSTree());
  5328. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5329. 99 |
  5330. |
  5331. 100 | btrfs_inode* node;
  5332. | ~~~~~~~~~~~~~~~~~~
  5333. 101 | if (fVolume->FSTree()->FindExact(&path, search_key, (void**)&node)
  5334. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5335. 102 | != B_OK) {
  5336. | ~~~~~~~~~~
  5337. 103 | ERROR("Inode::UpdateNodeFromDisk(): Couldn't find inode %"
  5338. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5339. 104 | B_PRIdINO "\n", fID);
  5340. | ~~~~~~~~~~~~~~~~~~~~~
  5341. 105 | return B_ENTRY_NOT_FOUND;
  5342. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  5343. 106 | }
  5344. | ~
  5345. 107 |
  5346. |
  5347. 108 | memcpy(&fNode, node, sizeof(btrfs_inode));
  5348. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5349. 109 | free(node);
  5350. | ~~~~~~~~~~~
  5351. 110 | return B_OK;
  5352. | ~~~~~~~~~~~~
  5353. 111 | }
  5354. | ~
  5355. 112 |
  5356. |
  5357. 113 |
  5358. |
  5359. 114 | /*
  5360. | ~~
  5361. 115 | * Create new Inode object with inode_item
  5362. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5363. 116 | */
  5364. | ~~
  5365. 117 | Inode*
  5366. | ~~~~~~
  5367. 118 | Inode::Create(Transaction& transaction, ino_t id, Inode* parent, int32 mode,
  5368. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5369. 119 | uint64 size, uint64 flags)
  5370. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  5371. 120 | {
  5372. | ~
  5373. 121 | TRACE("Inode::Create() id % " B_PRIu64 " mode %" B_PRId32 " flags %"
  5374. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5375. 122 | B_PRIu64"\n", id, flags, mode);
  5376. | ~~~~~~~~~~~~
  5377. ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:121:2: note: in expansion of macro ‘TRACE’
  5378. 121 | TRACE("Inode::Create() id % " B_PRIu64 " mode %" B_PRId32 " flags %"
  5379. | ^~~~~
  5380. ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:19:30: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘uint64_t’ {aka ‘long unsigned int’} [-Wformat=]
  5381. 19 | # define TRACE(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  5382. | ^~~~~~~~~~~~~~~~~~~~~~~~~
  5383. 20 | # define ASSERT(x) { if (!(x)) kernel_debugger("btrfs: assert failed: " #x "\n"); }
  5384. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5385. 21 | #else
  5386. | ~~~~~
  5387. 22 | # define TRACE(x...) ;
  5388. | ~~~~~~~~~~~~~~~~~~~~~~
  5389. 23 | # define ASSERT(x) ;
  5390. | ~~~~~~~~~~~~~~~~~~~~
  5391. 24 | #endif
  5392. | ~~~~~~
  5393. 25 | #define ERROR(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  5394. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5395. 26 |
  5396. |
  5397. 27 |
  5398. |
  5399. 28 | Inode::Inode(Volume* volume, ino_t id)
  5400. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5401. 29 | :
  5402. | ~
  5403. 30 | fVolume(volume),
  5404. | ~~~~~~~~~~~~~~~~
  5405. 31 | fID(id),
  5406. | ~~~~~~~~
  5407. 32 | fCache(NULL),
  5408. | ~~~~~~~~~~~~~
  5409. 33 | fMap(NULL)
  5410. | ~~~~~~~~~~
  5411. 34 | {
  5412. | ~
  5413. 35 | rw_lock_init(&fLock, "btrfs inode");
  5414. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5415. 36 |
  5416. |
  5417. 37 | fInitStatus = UpdateNodeFromDisk();
  5418. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5419. 38 | if (fInitStatus == B_OK) {
  5420. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  5421. 39 | if (!IsDirectory() && !IsSymLink()) {
  5422. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5423. 40 | fCache = file_cache_create(fVolume->ID(), ID(), Size());
  5424. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5425. 41 | fMap = file_map_create(fVolume->ID(), ID(), Size());
  5426. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5427. 42 | }
  5428. | ~
  5429. 43 | }
  5430. | ~
  5431. 44 | }
  5432. | ~
  5433. 45 |
  5434. |
  5435. 46 |
  5436. |
  5437. 47 | Inode::Inode(Volume* volume, ino_t id, const btrfs_inode& item)
  5438. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5439. 48 | :
  5440. | ~
  5441. 49 | fVolume(volume),
  5442. | ~~~~~~~~~~~~~~~~
  5443. 50 | fID(id),
  5444. | ~~~~~~~~
  5445. 51 | fCache(NULL),
  5446. | ~~~~~~~~~~~~~
  5447. 52 | fMap(NULL),
  5448. | ~~~~~~~~~~~
  5449. 53 | fInitStatus(B_OK),
  5450. | ~~~~~~~~~~~~~~~~~~
  5451. 54 | fNode(item)
  5452. | ~~~~~~~~~~~
  5453. 55 | {
  5454. | ~
  5455. 56 | if (!IsDirectory() && !IsSymLink()) {
  5456. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5457. 57 | fCache = file_cache_create(fVolume->ID(), ID(), Size());
  5458. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5459. 58 | fMap = file_map_create(fVolume->ID(), ID(), Size());
  5460. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5461. 59 | }
  5462. | ~
  5463. 60 | }
  5464. | ~
  5465. 61 |
  5466. |
  5467. 62 |
  5468. |
  5469. 63 | Inode::Inode(Volume* volume)
  5470. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5471. 64 | :
  5472. | ~
  5473. 65 | fVolume(volume),
  5474. | ~~~~~~~~~~~~~~~~
  5475. 66 | fID(0),
  5476. | ~~~~~~~
  5477. 67 | fCache(NULL),
  5478. | ~~~~~~~~~~~~~
  5479. 68 | fMap(NULL),
  5480. | ~~~~~~~~~~~
  5481. 69 | fInitStatus(B_NO_INIT)
  5482. | ~~~~~~~~~~~~~~~~~~~~~~
  5483. 70 | {
  5484. | ~
  5485. 71 | rw_lock_init(&fLock, "btrfs inode");
  5486. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5487. 72 | }
  5488. | ~
  5489. 73 |
  5490. |
  5491. 74 |
  5492. |
  5493. 75 | Inode::~Inode()
  5494. | ~~~~~~~~~~~~~~~
  5495. 76 | {
  5496. | ~
  5497. 77 | TRACE("Inode destructor\n");
  5498. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5499. 78 | file_cache_delete(FileCache());
  5500. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5501. 79 | file_map_delete(Map());
  5502. | ~~~~~~~~~~~~~~~~~~~~~~~
  5503. 80 | TRACE("Inode destructor: Done\n");
  5504. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5505. 81 | }
  5506. | ~
  5507. 82 |
  5508. |
  5509. 83 |
  5510. |
  5511. 84 | status_t
  5512. | ~~~~~~~~
  5513. 85 | Inode::InitCheck()
  5514. | ~~~~~~~~~~~~~~~~~~
  5515. 86 | {
  5516. | ~
  5517. 87 | return fInitStatus;
  5518. | ~~~~~~~~~~~~~~~~~~~
  5519. 88 | }
  5520. | ~
  5521. 89 |
  5522. |
  5523. 90 |
  5524. |
  5525. 91 | status_t
  5526. | ~~~~~~~~
  5527. 92 | Inode::UpdateNodeFromDisk()
  5528. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5529. 93 | {
  5530. | ~
  5531. 94 | btrfs_key search_key;
  5532. | ~~~~~~~~~~~~~~~~~~~~~
  5533. 95 | search_key.SetType(BTRFS_KEY_TYPE_INODE_ITEM);
  5534. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5535. 96 | search_key.SetObjectID(fID);
  5536. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5537. 97 | search_key.SetOffset(0);
  5538. | ~~~~~~~~~~~~~~~~~~~~~~~~
  5539. 98 | BTree::Path path(fVolume->FSTree());
  5540. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5541. 99 |
  5542. |
  5543. 100 | btrfs_inode* node;
  5544. | ~~~~~~~~~~~~~~~~~~
  5545. 101 | if (fVolume->FSTree()->FindExact(&path, search_key, (void**)&node)
  5546. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5547. 102 | != B_OK) {
  5548. | ~~~~~~~~~~
  5549. 103 | ERROR("Inode::UpdateNodeFromDisk(): Couldn't find inode %"
  5550. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5551. 104 | B_PRIdINO "\n", fID);
  5552. | ~~~~~~~~~~~~~~~~~~~~~
  5553. 105 | return B_ENTRY_NOT_FOUND;
  5554. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  5555. 106 | }
  5556. | ~
  5557. 107 |
  5558. |
  5559. 108 | memcpy(&fNode, node, sizeof(btrfs_inode));
  5560. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5561. 109 | free(node);
  5562. | ~~~~~~~~~~~
  5563. 110 | return B_OK;
  5564. | ~~~~~~~~~~~~
  5565. 111 | }
  5566. | ~
  5567. 112 |
  5568. |
  5569. 113 |
  5570. |
  5571. 114 | /*
  5572. | ~~
  5573. 115 | * Create new Inode object with inode_item
  5574. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5575. 116 | */
  5576. | ~~
  5577. 117 | Inode*
  5578. | ~~~~~~
  5579. 118 | Inode::Create(Transaction& transaction, ino_t id, Inode* parent, int32 mode,
  5580. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5581. 119 | uint64 size, uint64 flags)
  5582. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  5583. 120 | {
  5584. | ~
  5585. 121 | TRACE("Inode::Create() id % " B_PRIu64 " mode %" B_PRId32 " flags %"
  5586. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5587. 122 | B_PRIu64"\n", id, flags, mode);
  5588. | ~~~~~~~~~~~~ ~~~~~
  5589. | |
  5590. | uint64_t {aka long unsigned int}
  5591. ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:121:2: note: in expansion of macro ‘TRACE’
  5592. 121 | TRACE("Inode::Create() id % " B_PRIu64 " mode %" B_PRId32 " flags %"
  5593. | ^~~~~
  5594. ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:19:30: warning: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 4 has type ‘int32_t’ {aka ‘int’} [-Wformat=]
  5595. 19 | # define TRACE(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  5596. | ^~~~~~~~~~~~~~~~~~~~~~~~~
  5597. 20 | # define ASSERT(x) { if (!(x)) kernel_debugger("btrfs: assert failed: " #x "\n"); }
  5598. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5599. 21 | #else
  5600. | ~~~~~
  5601. 22 | # define TRACE(x...) ;
  5602. | ~~~~~~~~~~~~~~~~~~~~~~
  5603. 23 | # define ASSERT(x) ;
  5604. | ~~~~~~~~~~~~~~~~~~~~
  5605. 24 | #endif
  5606. | ~~~~~~
  5607. 25 | #define ERROR(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  5608. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5609. 26 |
  5610. |
  5611. 27 |
  5612. |
  5613. 28 | Inode::Inode(Volume* volume, ino_t id)
  5614. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5615. 29 | :
  5616. | ~
  5617. 30 | fVolume(volume),
  5618. | ~~~~~~~~~~~~~~~~
  5619. 31 | fID(id),
  5620. | ~~~~~~~~
  5621. 32 | fCache(NULL),
  5622. | ~~~~~~~~~~~~~
  5623. 33 | fMap(NULL)
  5624. | ~~~~~~~~~~
  5625. 34 | {
  5626. | ~
  5627. 35 | rw_lock_init(&fLock, "btrfs inode");
  5628. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5629. 36 |
  5630. |
  5631. 37 | fInitStatus = UpdateNodeFromDisk();
  5632. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5633. 38 | if (fInitStatus == B_OK) {
  5634. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  5635. 39 | if (!IsDirectory() && !IsSymLink()) {
  5636. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5637. 40 | fCache = file_cache_create(fVolume->ID(), ID(), Size());
  5638. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5639. 41 | fMap = file_map_create(fVolume->ID(), ID(), Size());
  5640. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5641. 42 | }
  5642. | ~
  5643. 43 | }
  5644. | ~
  5645. 44 | }
  5646. | ~
  5647. 45 |
  5648. |
  5649. 46 |
  5650. |
  5651. 47 | Inode::Inode(Volume* volume, ino_t id, const btrfs_inode& item)
  5652. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5653. 48 | :
  5654. | ~
  5655. 49 | fVolume(volume),
  5656. | ~~~~~~~~~~~~~~~~
  5657. 50 | fID(id),
  5658. | ~~~~~~~~
  5659. 51 | fCache(NULL),
  5660. | ~~~~~~~~~~~~~
  5661. 52 | fMap(NULL),
  5662. | ~~~~~~~~~~~
  5663. 53 | fInitStatus(B_OK),
  5664. | ~~~~~~~~~~~~~~~~~~
  5665. 54 | fNode(item)
  5666. | ~~~~~~~~~~~
  5667. 55 | {
  5668. | ~
  5669. 56 | if (!IsDirectory() && !IsSymLink()) {
  5670. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5671. 57 | fCache = file_cache_create(fVolume->ID(), ID(), Size());
  5672. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5673. 58 | fMap = file_map_create(fVolume->ID(), ID(), Size());
  5674. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5675. 59 | }
  5676. | ~
  5677. 60 | }
  5678. | ~
  5679. 61 |
  5680. |
  5681. 62 |
  5682. |
  5683. 63 | Inode::Inode(Volume* volume)
  5684. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5685. 64 | :
  5686. | ~
  5687. 65 | fVolume(volume),
  5688. | ~~~~~~~~~~~~~~~~
  5689. 66 | fID(0),
  5690. | ~~~~~~~
  5691. 67 | fCache(NULL),
  5692. | ~~~~~~~~~~~~~
  5693. 68 | fMap(NULL),
  5694. | ~~~~~~~~~~~
  5695. 69 | fInitStatus(B_NO_INIT)
  5696. | ~~~~~~~~~~~~~~~~~~~~~~
  5697. 70 | {
  5698. | ~
  5699. 71 | rw_lock_init(&fLock, "btrfs inode");
  5700. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5701. 72 | }
  5702. | ~
  5703. 73 |
  5704. |
  5705. 74 |
  5706. |
  5707. 75 | Inode::~Inode()
  5708. | ~~~~~~~~~~~~~~~
  5709. 76 | {
  5710. | ~
  5711. 77 | TRACE("Inode destructor\n");
  5712. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5713. 78 | file_cache_delete(FileCache());
  5714. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5715. 79 | file_map_delete(Map());
  5716. | ~~~~~~~~~~~~~~~~~~~~~~~
  5717. 80 | TRACE("Inode destructor: Done\n");
  5718. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5719. 81 | }
  5720. | ~
  5721. 82 |
  5722. |
  5723. 83 |
  5724. |
  5725. 84 | status_t
  5726. | ~~~~~~~~
  5727. 85 | Inode::InitCheck()
  5728. | ~~~~~~~~~~~~~~~~~~
  5729. 86 | {
  5730. | ~
  5731. 87 | return fInitStatus;
  5732. | ~~~~~~~~~~~~~~~~~~~
  5733. 88 | }
  5734. | ~
  5735. 89 |
  5736. |
  5737. 90 |
  5738. |
  5739. 91 | status_t
  5740. | ~~~~~~~~
  5741. 92 | Inode::UpdateNodeFromDisk()
  5742. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5743. 93 | {
  5744. | ~
  5745. 94 | btrfs_key search_key;
  5746. | ~~~~~~~~~~~~~~~~~~~~~
  5747. 95 | search_key.SetType(BTRFS_KEY_TYPE_INODE_ITEM);
  5748. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5749. 96 | search_key.SetObjectID(fID);
  5750. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5751. 97 | search_key.SetOffset(0);
  5752. | ~~~~~~~~~~~~~~~~~~~~~~~~
  5753. 98 | BTree::Path path(fVolume->FSTree());
  5754. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5755. 99 |
  5756. |
  5757. 100 | btrfs_inode* node;
  5758. | ~~~~~~~~~~~~~~~~~~
  5759. 101 | if (fVolume->FSTree()->FindExact(&path, search_key, (void**)&node)
  5760. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5761. 102 | != B_OK) {
  5762. | ~~~~~~~~~~
  5763. 103 | ERROR("Inode::UpdateNodeFromDisk(): Couldn't find inode %"
  5764. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5765. 104 | B_PRIdINO "\n", fID);
  5766. | ~~~~~~~~~~~~~~~~~~~~~
  5767. 105 | return B_ENTRY_NOT_FOUND;
  5768. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  5769. 106 | }
  5770. | ~
  5771. 107 |
  5772. |
  5773. 108 | memcpy(&fNode, node, sizeof(btrfs_inode));
  5774. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5775. 109 | free(node);
  5776. | ~~~~~~~~~~~
  5777. 110 | return B_OK;
  5778. | ~~~~~~~~~~~~
  5779. 111 | }
  5780. | ~
  5781. 112 |
  5782. |
  5783. 113 |
  5784. |
  5785. 114 | /*
  5786. | ~~
  5787. 115 | * Create new Inode object with inode_item
  5788. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5789. 116 | */
  5790. | ~~
  5791. 117 | Inode*
  5792. | ~~~~~~
  5793. 118 | Inode::Create(Transaction& transaction, ino_t id, Inode* parent, int32 mode,
  5794. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5795. 119 | uint64 size, uint64 flags)
  5796. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  5797. 120 | {
  5798. | ~
  5799. 121 | TRACE("Inode::Create() id % " B_PRIu64 " mode %" B_PRId32 " flags %"
  5800. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5801. 122 | B_PRIu64"\n", id, flags, mode);
  5802. | ~~~~~~~~~~~~ ~~~~
  5803. | |
  5804. | int32_t {aka int}
  5805. ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:121:2: note: in expansion of macro ‘TRACE’
  5806. 121 | TRACE("Inode::Create() id % " B_PRIu64 " mode %" B_PRId32 " flags %"
  5807. | ^~~~~
  5808. ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp: In member function ‘fssh_status_t Inode::ReadAt(fssh_off_t, uint8_t*, fssh_size_t*)’:
  5809. ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:19:30: warning: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 4 has type ‘uint32_t’ {aka ‘unsigned int’} [-Wformat=]
  5810. 19 | # define TRACE(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  5811. | ^~~~~~~~~~~~~~~~~~~~~~~~~
  5812. 20 | # define ASSERT(x) { if (!(x)) kernel_debugger("btrfs: assert failed: " #x "\n"); }
  5813. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5814. 21 | #else
  5815. | ~~~~~
  5816. 22 | # define TRACE(x...) ;
  5817. | ~~~~~~~~~~~~~~~~~~~~~~
  5818. 23 | # define ASSERT(x) ;
  5819. | ~~~~~~~~~~~~~~~~~~~~
  5820. 24 | #endif
  5821. | ~~~~~~
  5822. 25 | #define ERROR(x...) dprintf("\33[34mbtrfs:\33[0m " x)
  5823. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5824. 26 |
  5825. |
  5826. 27 |
  5827. |
  5828. 28 | Inode::Inode(Volume* volume, ino_t id)
  5829. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5830. 29 | :
  5831. | ~
  5832. 30 | fVolume(volume),
  5833. | ~~~~~~~~~~~~~~~~
  5834. 31 | fID(id),
  5835. | ~~~~~~~~
  5836. 32 | fCache(NULL),
  5837. | ~~~~~~~~~~~~~
  5838. 33 | fMap(NULL)
  5839. | ~~~~~~~~~~
  5840. 34 | {
  5841. | ~
  5842. 35 | rw_lock_init(&fLock, "btrfs inode");
  5843. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5844. 36 |
  5845. |
  5846. 37 | fInitStatus = UpdateNodeFromDisk();
  5847. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5848. 38 | if (fInitStatus == B_OK) {
  5849. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  5850. 39 | if (!IsDirectory() && !IsSymLink()) {
  5851. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5852. 40 | fCache = file_cache_create(fVolume->ID(), ID(), Size());
  5853. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5854. 41 | fMap = file_map_create(fVolume->ID(), ID(), Size());
  5855. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5856. 42 | }
  5857. | ~
  5858. 43 | }
  5859. | ~
  5860. 44 | }
  5861. | ~
  5862. 45 |
  5863. |
  5864. 46 |
  5865. |
  5866. 47 | Inode::Inode(Volume* volume, ino_t id, const btrfs_inode& item)
  5867. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5868. 48 | :
  5869. | ~
  5870. 49 | fVolume(volume),
  5871. | ~~~~~~~~~~~~~~~~
  5872. 50 | fID(id),
  5873. | ~~~~~~~~
  5874. 51 | fCache(NULL),
  5875. | ~~~~~~~~~~~~~
  5876. 52 | fMap(NULL),
  5877. | ~~~~~~~~~~~
  5878. 53 | fInitStatus(B_OK),
  5879. | ~~~~~~~~~~~~~~~~~~
  5880. 54 | fNode(item)
  5881. | ~~~~~~~~~~~
  5882. 55 | {
  5883. | ~
  5884. 56 | if (!IsDirectory() && !IsSymLink()) {
  5885. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5886. 57 | fCache = file_cache_create(fVolume->ID(), ID(), Size());
  5887. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5888. 58 | fMap = file_map_create(fVolume->ID(), ID(), Size());
  5889. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5890. 59 | }
  5891. | ~
  5892. 60 | }
  5893. | ~
  5894. 61 |
  5895. |
  5896. 62 |
  5897. |
  5898. 63 | Inode::Inode(Volume* volume)
  5899. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5900. 64 | :
  5901. | ~
  5902. 65 | fVolume(volume),
  5903. | ~~~~~~~~~~~~~~~~
  5904. 66 | fID(0),
  5905. | ~~~~~~~
  5906. 67 | fCache(NULL),
  5907. | ~~~~~~~~~~~~~
  5908. 68 | fMap(NULL),
  5909. | ~~~~~~~~~~~
  5910. 69 | fInitStatus(B_NO_INIT)
  5911. | ~~~~~~~~~~~~~~~~~~~~~~
  5912. 70 | {
  5913. | ~
  5914. 71 | rw_lock_init(&fLock, "btrfs inode");
  5915. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5916. 72 | }
  5917. | ~
  5918. 73 |
  5919. |
  5920. 74 |
  5921. |
  5922. 75 | Inode::~Inode()
  5923. | ~~~~~~~~~~~~~~~
  5924. 76 | {
  5925. | ~
  5926. 77 | TRACE("Inode destructor\n");
  5927. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5928. 78 | file_cache_delete(FileCache());
  5929. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5930. 79 | file_map_delete(Map());
  5931. | ~~~~~~~~~~~~~~~~~~~~~~~
  5932. 80 | TRACE("Inode destructor: Done\n");
  5933. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5934. 81 | }
  5935. | ~
  5936. 82 |
  5937. |
  5938. 83 |
  5939. |
  5940. 84 | status_t
  5941. | ~~~~~~~~
  5942. 85 | Inode::InitCheck()
  5943. | ~~~~~~~~~~~~~~~~~~
  5944. 86 | {
  5945. | ~
  5946. 87 | return fInitStatus;
  5947. | ~~~~~~~~~~~~~~~~~~~
  5948. 88 | }
  5949. | ~
  5950. 89 |
  5951. |
  5952. 90 |
  5953. |
  5954. 91 | status_t
  5955. | ~~~~~~~~
  5956. 92 | Inode::UpdateNodeFromDisk()
  5957. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5958. 93 | {
  5959. | ~
  5960. 94 | btrfs_key search_key;
  5961. | ~~~~~~~~~~~~~~~~~~~~~
  5962. 95 | search_key.SetType(BTRFS_KEY_TYPE_INODE_ITEM);
  5963. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5964. 96 | search_key.SetObjectID(fID);
  5965. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5966. 97 | search_key.SetOffset(0);
  5967. | ~~~~~~~~~~~~~~~~~~~~~~~~
  5968. 98 | BTree::Path path(fVolume->FSTree());
  5969. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5970. 99 |
  5971. |
  5972. 100 | btrfs_inode* node;
  5973. | ~~~~~~~~~~~~~~~~~~
  5974. 101 | if (fVolume->FSTree()->FindExact(&path, search_key, (void**)&node)
  5975. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5976. 102 | != B_OK) {
  5977. | ~~~~~~~~~~
  5978. 103 | ERROR("Inode::UpdateNodeFromDisk(): Couldn't find inode %"
  5979. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5980. 104 | B_PRIdINO "\n", fID);
  5981. | ~~~~~~~~~~~~~~~~~~~~~
  5982. 105 | return B_ENTRY_NOT_FOUND;
  5983. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  5984. 106 | }
  5985. | ~
  5986. 107 |
  5987. |
  5988. 108 | memcpy(&fNode, node, sizeof(btrfs_inode));
  5989. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5990. 109 | free(node);
  5991. | ~~~~~~~~~~~
  5992. 110 | return B_OK;
  5993. | ~~~~~~~~~~~~
  5994. 111 | }
  5995. | ~
  5996. 112 |
  5997. |
  5998. 113 |
  5999. |
  6000. 114 | /*
  6001. | ~~
  6002. 115 | * Create new Inode object with inode_item
  6003. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6004. 116 | */
  6005. | ~~
  6006. 117 | Inode*
  6007. | ~~~~~~
  6008. 118 | Inode::Create(Transaction& transaction, ino_t id, Inode* parent, int32 mode,
  6009. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6010. 119 | uint64 size, uint64 flags)
  6011. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  6012. 120 | {
  6013. | ~
  6014. 121 | TRACE("Inode::Create() id % " B_PRIu64 " mode %" B_PRId32 " flags %"
  6015. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6016. 122 | B_PRIu64"\n", id, flags, mode);
  6017. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6018. 123 |
  6019. |
  6020. 124 | Volume* volume = parent != NULL ?
  6021. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6022. 125 | parent->GetVolume() : transaction.GetJournal()->GetVolume();
  6023. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6024. 126 | uint64 nbytes = size; // allocated size
  6025. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6026. 127 | if (size > volume->MaxInlineSize())
  6027. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6028. 128 | nbytes = (size / volume->SectorSize() + 1) * volume->SectorSize();
  6029. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6030. 129 |
  6031. |
  6032. 130 | btrfs_inode inode;
  6033. | ~~~~~~~~~~~~~~~~~~
  6034. 131 |
  6035. |
  6036. 132 | inode.generation = B_HOST_TO_LENDIAN_INT64(transaction.SystemID());
  6037. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6038. 133 | inode.transaction_id = B_HOST_TO_LENDIAN_INT64(transaction.SystemID());
  6039. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6040. 134 | inode.size = B_HOST_TO_LENDIAN_INT64(size);
  6041. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6042. 135 | inode.nbytes = B_HOST_TO_LENDIAN_INT64(nbytes);
  6043. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6044. 136 | inode.blockgroup = 0; // normal inode only
  6045. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6046. 137 | inode.num_links = B_HOST_TO_LENDIAN_INT32(1);
  6047. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6048. 138 | inode.uid = B_HOST_TO_LENDIAN_INT32(geteuid());
  6049. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6050. 139 | inode.gid = B_HOST_TO_LENDIAN_INT32(parent != NULL ?
  6051. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6052. 140 | parent->GroupID() : getegid());
  6053. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6054. 141 | inode.mode = B_HOST_TO_LENDIAN_INT32(mode);;
  6055. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6056. 142 | inode.rdev = 0; // normal file only
  6057. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6058. 143 | inode.flags = B_HOST_TO_LENDIAN_INT64(flags);
  6059. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6060. 144 | inode.sequence = 0; // incremented each time mtime value is changed
  6061. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6062. 145 |
  6063. |
  6064. 146 | uint64 now = real_time_clock_usecs();
  6065. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6066. 147 | struct timespec timespec;
  6067. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  6068. 148 | timespec.tv_sec = now / 1000000;
  6069. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6070. 149 | timespec.tv_nsec = (now % 1000000) * 1000;
  6071. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6072. 150 | btrfs_inode::SetTime(inode.access_time, timespec);
  6073. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6074. 151 | btrfs_inode::SetTime(inode.creation_time, timespec);
  6075. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6076. 152 | btrfs_inode::SetTime(inode.change_time, timespec);
  6077. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6078. 153 | btrfs_inode::SetTime(inode.modification_time, timespec);
  6079. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6080. 154 |
  6081. |
  6082. 155 | return new Inode(volume, id, inode);
  6083. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6084. 156 | }
  6085. | ~
  6086. 157 |
  6087. |
  6088. 158 |
  6089. |
  6090. 159 | status_t
  6091. | ~~~~~~~~
  6092. 160 | Inode::CheckPermissions(int accessMode) const
  6093. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6094. 161 | {
  6095. | ~
  6096. 162 | // you never have write access to a read-only volume
  6097. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6098. 163 | if ((accessMode & W_OK) != 0 && fVolume->IsReadOnly())
  6099. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6100. 164 | return B_READ_ONLY_DEVICE;
  6101. | ~~~~~~~~~~~~~~~~~~~~~~~~~~
  6102. 165 |
  6103. |
  6104. 166 | return check_access_permissions(accessMode, Mode(), (gid_t)fNode.GroupID(),
  6105. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6106. 167 | (uid_t)fNode.UserID());
  6107. | ~~~~~~~~~~~~~~~~~~~~~~~
  6108. 168 | }
  6109. | ~
  6110. 169 |
  6111. |
  6112. 170 |
  6113. |
  6114. 171 | status_t
  6115. | ~~~~~~~~
  6116. 172 | Inode::FindBlock(off_t pos, off_t& physical, off_t* _length)
  6117. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6118. 173 | {
  6119. | ~
  6120. 174 | btrfs_key search_key;
  6121. | ~~~~~~~~~~~~~~~~~~~~~
  6122. 175 | search_key.SetType(BTRFS_KEY_TYPE_EXTENT_DATA);
  6123. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6124. 176 | search_key.SetObjectID(fID);
  6125. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6126. 177 | search_key.SetOffset(pos + 1);
  6127. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6128. 178 | BTree::Path path(fVolume->FSTree());
  6129. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6130. 179 |
  6131. |
  6132. 180 | btrfs_extent_data* extent_data;
  6133. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6134. 181 | status_t status = fVolume->FSTree()->FindPrevious(&path, search_key,
  6135. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6136. 182 | (void**)&extent_data);
  6137. | ~~~~~~~~~~~~~~~~~~~~~~
  6138. 183 | if (status != B_OK) {
  6139. | ~~~~~~~~~~~~~~~~~~~~~
  6140. 184 | ERROR("Inode::FindBlock(): Couldn't find extent_data 0x%" B_PRIx32
  6141. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6142. 185 | "\n", status);
  6143. | ~~~~~~~~~~~~~~
  6144. 186 | return status;
  6145. | ~~~~~~~~~~~~~~
  6146. 187 | }
  6147. | ~
  6148. 188 |
  6149. |
  6150. 189 | TRACE("Inode::FindBlock(%" B_PRIdINO ") key.Offset() %" B_PRId64 "\n",
  6151. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6152. 190 | ID(), search_key.Offset());
  6153. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6154. 191 |
  6155. |
  6156. 192 | off_t diff = pos - search_key.Offset();
  6157. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6158. 193 | off_t logical = 0;
  6159. | ~~~~~~~~~~~~~~~~~~
  6160. 194 | if (extent_data->Type() == BTRFS_EXTENT_DATA_REGULAR)
  6161. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6162. 195 | logical = diff + extent_data->disk_offset;
  6163. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6164. 196 | else
  6165. | ~~~~
  6166. 197 | panic("unknown extent type; %d\n", extent_data->Type());
  6167. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6168. 198 | status = fVolume->FindBlock(logical, physical);
  6169. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6170. 199 | if (_length != NULL)
  6171. | ~~~~~~~~~~~~~~~~~~~~
  6172. 200 | *_length = extent_data->Size() - diff;
  6173. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6174. 201 | TRACE("Inode::FindBlock(%" B_PRIdINO ") %" B_PRIdOFF " physical %"
  6175. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6176. 202 | B_PRIdOFF "\n", ID(), pos, physical);
  6177. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6178. 203 |
  6179. |
  6180. 204 | free(extent_data);
  6181. | ~~~~~~~~~~~~~~~~~~
  6182. 205 | return status;
  6183. | ~~~~~~~~~~~~~~
  6184. 206 | }
  6185. | ~
  6186. 207 |
  6187. |
  6188. 208 |
  6189. |
  6190. 209 | status_t
  6191. | ~~~~~~~~
  6192. 210 | Inode::ReadAt(off_t pos, uint8* buffer, size_t* _length)
  6193. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6194. 211 | {
  6195. | ~
  6196. 212 | size_t length = *_length;
  6197. | ~~~~~~~~~~~~~~~~~~~~~~~~~
  6198. 213 |
  6199. |
  6200. 214 | // set/check boundaries for pos/length
  6201. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6202. 215 | if (pos < 0) {
  6203. | ~~~~~~~~~~~~~~
  6204. 216 | ERROR("inode %" B_PRIdINO ": ReadAt failed(pos %" B_PRIdOFF
  6205. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6206. 217 | ", length %lu)\n", ID(), pos, length);
  6207. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6208. 218 | return B_BAD_VALUE;
  6209. | ~~~~~~~~~~~~~~~~~~~
  6210. 219 | }
  6211. | ~
  6212. 220 |
  6213. |
  6214. 221 | if (pos >= Size() || length == 0) {
  6215. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6216. 222 | TRACE("inode %" B_PRIdINO ": ReadAt 0 (pos %" B_PRIdOFF
  6217. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6218. 223 | ", length %lu)\n", ID(), pos, length);
  6219. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6220. 224 | *_length = 0;
  6221. | ~~~~~~~~~~~~~
  6222. 225 | return B_NO_ERROR;
  6223. | ~~~~~~~~~~~~~~~~~~
  6224. 226 | }
  6225. | ~
  6226. 227 |
  6227. |
  6228. 228 | // the file cache doesn't seem to like non block aligned file offset
  6229. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6230. 229 | // so we avoid the file cache for inline extents
  6231. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6232. 230 | btrfs_key search_key;
  6233. | ~~~~~~~~~~~~~~~~~~~~~
  6234. 231 | search_key.SetType(BTRFS_KEY_TYPE_EXTENT_DATA);
  6235. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6236. 232 | search_key.SetObjectID(fID);
  6237. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6238. 233 | search_key.SetOffset(pos + 1);
  6239. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6240. 234 | BTree::Path path(fVolume->FSTree());
  6241. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6242. 235 |
  6243. |
  6244. 236 | uint32 item_size;
  6245. | ~~~~~~~~~~~~~~~~~
  6246. 237 | btrfs_extent_data* extent_data;
  6247. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6248. 238 | status_t status = fVolume->FSTree()->FindPrevious(&path, search_key,
  6249. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6250. 239 | (void**)&extent_data, &item_size);
  6251. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6252. 240 | if (status != B_OK) {
  6253. | ~~~~~~~~~~~~~~~~~~~~~
  6254. 241 | ERROR("Inode::FindBlock(): Couldn't find extent_data 0x%" B_PRIx32
  6255. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6256. 242 | "\n", status);
  6257. | ~~~~~~~~~~~~~~
  6258. 243 | return status;
  6259. | ~~~~~~~~~~~~~~
  6260. 244 | }
  6261. | ~
  6262. 245 | MemoryDeleter deleter(extent_data);
  6263. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6264. 246 |
  6265. |
  6266. 247 |
  6267. |
  6268. 248 | uint8 compression = extent_data->Compression();
  6269. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6270. 249 | if (FileCache() != NULL
  6271. | ~~~~~~~~~~~~~~~~~~~~~~~
  6272. 250 | && extent_data->Type() == BTRFS_EXTENT_DATA_REGULAR) {
  6273. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6274. 251 | TRACE("inode %" B_PRIdINO ": ReadAt cache (pos %" B_PRIdOFF ", length %lu)\n",
  6275. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6276. 252 | ID(), pos, length);
  6277. | ~~~~~~~~~~~~~~~~~~~
  6278. 253 | if (compression == BTRFS_EXTENT_COMPRESS_NONE)
  6279. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6280. 254 | return file_cache_read(FileCache(), NULL, pos, buffer, _length);
  6281. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6282. 255 | else if (compression == BTRFS_EXTENT_COMPRESS_ZLIB)
  6283. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6284. 256 | panic("zlib isn't unsupported for regular extent\n");
  6285. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6286. 257 | else
  6287. | ~~~~
  6288. 258 | panic("unknown extent compression; %d\n", compression);
  6289. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6290. 259 | return B_BAD_DATA;
  6291. | ~~~~~~~~~~~~~~~~~~
  6292. 260 | }
  6293. | ~
  6294. 261 |
  6295. |
  6296. 262 | TRACE("Inode::ReadAt(%" B_PRIdINO ") key.Offset() %" B_PRId64 "\n", ID(),
  6297. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6298. 263 | search_key.Offset());
  6299. | ~~~~~~~~~~~~~~~~~~~~~
  6300. 264 |
  6301. |
  6302. 265 | off_t diff = pos - search_key.Offset();
  6303. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6304. 266 | if (extent_data->Type() != BTRFS_EXTENT_DATA_INLINE) {
  6305. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6306. 267 | panic("unknown extent type; %d\n", extent_data->Type());
  6307. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6308. 268 | return B_BAD_DATA;
  6309. | ~~~~~~~~~~~~~~~~~~
  6310. 269 | }
  6311. | ~
  6312. 270 |
  6313. |
  6314. 271 | *_length = min_c(extent_data->Size() - diff, *_length);
  6315. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6316. 272 | if (compression == BTRFS_EXTENT_COMPRESS_NONE)
  6317. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6318. 273 | memcpy(buffer, extent_data->inline_data, *_length);
  6319. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6320. 274 | else if (compression == BTRFS_EXTENT_COMPRESS_ZLIB) {
  6321. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6322. 275 | char in[2048];
  6323. | ~~~~~~~~~~~~~~
  6324. 276 | z_stream zStream = {
  6325. | ~~~~~~~~~~~~~~~~~~~~
  6326. 277 | (Bytef*)in, // next in
  6327. | ~~~~~~~~~~~~~~~~~~~~~~~
  6328. 278 | sizeof(in), // avail in
  6329. | ~~~~~~~~~~~~~~~~~~~~~~~~
  6330. 279 | 0, // total in
  6331. | ~~~~~~~~~~~~~~~~~
  6332. 280 | NULL, // next out
  6333. | ~~~~~~~~~~~~~~~~~~~
  6334. 281 | 0, // avail out
  6335. | ~~~~~~~~~~~~~~~~~~
  6336. 282 | 0, // total out
  6337. | ~~~~~~~~~~~~~~~~~~
  6338. 283 | 0, // msg
  6339. | ~~~~~~~~~~~~
  6340. 284 | 0, // state
  6341. | ~~~~~~~~~~~~~~
  6342. 285 | Z_NULL, // zalloc
  6343. | ~~~~~~~~~~~~~~~~~~~
  6344. 286 | Z_NULL, // zfree
  6345. | ~~~~~~~~~~~~~~~~~~
  6346. 287 | Z_NULL, // opaque
  6347. | ~~~~~~~~~~~~~~~~~~~
  6348. 288 | 0, // data type
  6349. | ~~~~~~~~~~~~~~~~~~
  6350. 289 | 0, // adler
  6351. | ~~~~~~~~~~~~~~
  6352. 290 | 0, // reserved
  6353. | ~~~~~~~~~~~~~~~~~
  6354. 291 | };
  6355. | ~~
  6356. 292 |
  6357. |
  6358. 293 | int status;
  6359. | ~~~~~~~~~~~
  6360. 294 | ssize_t offset = 0;
  6361. | ~~~~~~~~~~~~~~~~~~~
  6362. 295 | uint32 inline_size = item_size - 13;
  6363. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6364. 296 | bool headerRead = false;
  6365. | ~~~~~~~~~~~~~~~~~~~~~~~~
  6366. 297 |
  6367. |
  6368. 298 | TRACE("Inode::ReadAt(%" B_PRIdINO ") diff %" B_PRIdOFF " size %"
  6369. | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6370. 299 | B_PRIuSIZE "\n", ID(), diff, item_size);
  6371. | ~~~~~~~~~~~~~~~ ~~~~~~~~~
  6372. | |
  6373. | uint32_t {aka unsigned int}
  6374. ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:298:3: note: in expansion of macro ‘TRACE’
  6375. 298 | TRACE("Inode::ReadAt(%" B_PRIdINO ") diff %" B_PRIdOFF " size %"
  6376. | ^~~~~
  6377. In file included from ../headers/private/fs_shell/fssh_dirent.h:8,
  6378. from ../headers/private/fs_shell/fssh_api_wrapper.h:15,
  6379. from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6380. from ../headers/private/kernel/util/AVLTree.h:9,
  6381. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6382. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6383. from ../src/add-ons/kernel/file_systems/btrfs/Inode.h:11,
  6384. from ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:10:
  6385. ../headers/private/fs_shell/fssh_defs.h:52:29: warning: comparison of integer expressions of different signedness: ‘long unsigned int’ and ‘fssh_ssize_t’ {aka ‘long int’} [-Wsign-compare]
  6386. 52 | #define fssh_min_c(a,b) ((a)>(b)?(b):(a))
  6387. | ~~~^~~~
  6388. ../headers/private/fs_shell/fssh_api_wrapper.h:174:23: note: in expansion of macro ‘fssh_min_c’
  6389. 174 | #define min_c(a,b) fssh_min_c(a,b)
  6390. | ^~~~~~~~~~
  6391. ../src/add-ons/kernel/file_systems/btrfs/Inode.cpp:302:24: note: in expansion of macro ‘min_c’
  6392. 302 | ssize_t bytesRead = min_c(sizeof(in), inline_size - offset);
  6393. | ^~~~~
  6394.  
  6395. gcc -c "../src/add-ons/kernel/file_systems/btrfs/Inode.cpp" -O2 -Wall -Wno-trigraphs -Wno-ctor-dtor-privacy -Woverloaded-virtual -Wpointer-arith -Wcast-align -Wsign-compare -Wno-multichar -DFS_SHELL -DTRACE_BTRFS -Wno-multichar -fno-rtti -DHAIKU_BUILD_COMPATIBILITY_H -DARCH_x86_64 -D_NO_INLINE_ASM -D__NO_INLINE__ -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DHAIKU_HOST_USE_XATTR_REF -DHAIKU_HOST_PLATFORM_LINUX -DHAIKU_HOST_PLATFORM_64_BIT -DHAIKU_PACKAGING_ARCH=\"x86_64\" -iquote ../build/user_config_headers -iquote ../build/config_headers -iquote ../src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/linux/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/haiku/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote ../src/add-ons/kernel/file_systems/btrfs -iquote ../src/tools/fs_shell -I ../headers/build -I ../headers/build/os -I ../headers/build/os/support -I ../headers/private/. -I ../headers/private/kernel -I ../headers/private/libroot -I ../headers/private/shared -I ../headers/private/kernel/boot/platform/bios_ia32 -I ../headers/private/kernel/arch/x86 -I objects/haiku/x86_64/common/system/kernel -I ../headers/private/. -I ../headers/private/system -I ../headers/private/system/arch/x86_64 -I ../headers/private/shared -I ../headers/private/storage -I ../headers/private/fs_shell -I ../headers/private -I ../headers/build/host/linux -o "objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Inode.o"
  6396.  
  6397. ...failed C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Inode.o ...
  6398. C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Journal.o
  6399. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6400. from ../headers/private/kernel/util/AVLTree.h:9,
  6401. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6402. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6403. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6404. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6405. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6406. ../headers/private/fs_shell/fssh_api_wrapper.h:1646: warning: "R_OK" redefined
  6407. 1646 | #define R_OK FSSH_R_OK
  6408. |
  6409. In file included from /usr/include/zconf.h:475,
  6410. from /usr/include/zlib.h:34,
  6411. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6412. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6413. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6414. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6415. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6416. /usr/include/unistd.h:281: note: this is the location of the previous definition
  6417. 281 | #define R_OK 4 /* Test for read permission. */
  6418. |
  6419. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6420. from ../headers/private/kernel/util/AVLTree.h:9,
  6421. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6422. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6423. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6424. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6425. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6426. ../headers/private/fs_shell/fssh_api_wrapper.h:1647: warning: "W_OK" redefined
  6427. 1647 | #define W_OK FSSH_W_OK
  6428. |
  6429. In file included from /usr/include/zconf.h:475,
  6430. from /usr/include/zlib.h:34,
  6431. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6432. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6433. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6434. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6435. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6436. /usr/include/unistd.h:282: note: this is the location of the previous definition
  6437. 282 | #define W_OK 2 /* Test for write permission. */
  6438. |
  6439. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6440. from ../headers/private/kernel/util/AVLTree.h:9,
  6441. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6442. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6443. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6444. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6445. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6446. ../headers/private/fs_shell/fssh_api_wrapper.h:1648: warning: "X_OK" redefined
  6447. 1648 | #define X_OK FSSH_X_OK
  6448. |
  6449. In file included from /usr/include/zconf.h:475,
  6450. from /usr/include/zlib.h:34,
  6451. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6452. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6453. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6454. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6455. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6456. /usr/include/unistd.h:283: note: this is the location of the previous definition
  6457. 283 | #define X_OK 1 /* Test for execute permission. */
  6458. |
  6459. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6460. from ../headers/private/kernel/util/AVLTree.h:9,
  6461. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6462. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6463. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6464. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6465. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6466. ../headers/private/fs_shell/fssh_api_wrapper.h:1649: warning: "F_OK" redefined
  6467. 1649 | #define F_OK FSSH_F_OK
  6468. |
  6469. In file included from /usr/include/zconf.h:475,
  6470. from /usr/include/zlib.h:34,
  6471. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6472. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6473. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6474. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6475. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6476. /usr/include/unistd.h:284: note: this is the location of the previous definition
  6477. 284 | #define F_OK 0 /* Test for existence. */
  6478. |
  6479. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6480. from ../headers/private/kernel/util/AVLTree.h:9,
  6481. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6482. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6483. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6484. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6485. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6486. ../headers/private/fs_shell/fssh_api_wrapper.h:1652: warning: "STDIN_FILENO" redefined
  6487. 1652 | #define STDIN_FILENO FSSH_STDIN_FILENO
  6488. |
  6489. In file included from /usr/include/zconf.h:475,
  6490. from /usr/include/zlib.h:34,
  6491. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6492. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6493. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6494. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6495. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6496. /usr/include/unistd.h:210: note: this is the location of the previous definition
  6497. 210 | #define STDIN_FILENO 0 /* Standard input. */
  6498. |
  6499. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6500. from ../headers/private/kernel/util/AVLTree.h:9,
  6501. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6502. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6503. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6504. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6505. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6506. ../headers/private/fs_shell/fssh_api_wrapper.h:1653: warning: "STDOUT_FILENO" redefined
  6507. 1653 | #define STDOUT_FILENO FSSH_STDOUT_FILENO
  6508. |
  6509. In file included from /usr/include/zconf.h:475,
  6510. from /usr/include/zlib.h:34,
  6511. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6512. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6513. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6514. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6515. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6516. /usr/include/unistd.h:211: note: this is the location of the previous definition
  6517. 211 | #define STDOUT_FILENO 1 /* Standard output. */
  6518. |
  6519. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6520. from ../headers/private/kernel/util/AVLTree.h:9,
  6521. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6522. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6523. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6524. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6525. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6526. ../headers/private/fs_shell/fssh_api_wrapper.h:1654: warning: "STDERR_FILENO" redefined
  6527. 1654 | #define STDERR_FILENO FSSH_STDERR_FILENO
  6528. |
  6529. In file included from /usr/include/zconf.h:475,
  6530. from /usr/include/zlib.h:34,
  6531. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6532. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6533. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6534. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6535. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6536. /usr/include/unistd.h:212: note: this is the location of the previous definition
  6537. 212 | #define STDERR_FILENO 2 /* Standard error output. */
  6538. |
  6539. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6540. from ../headers/private/kernel/util/AVLTree.h:9,
  6541. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6542. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6543. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6544. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6545. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6546. ../headers/private/fs_shell/fssh_api_wrapper.h:1657: warning: "SEEK_SET" redefined
  6547. 1657 | #define SEEK_SET FSSH_SEEK_SET
  6548. |
  6549. In file included from /usr/include/zconf.h:475,
  6550. from /usr/include/zlib.h:34,
  6551. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6552. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6553. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6554. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6555. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6556. /usr/include/unistd.h:311: note: this is the location of the previous definition
  6557. 311 | # define SEEK_SET 0 /* Seek from beginning of file. */
  6558. |
  6559. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6560. from ../headers/private/kernel/util/AVLTree.h:9,
  6561. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6562. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6563. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6564. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6565. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6566. ../headers/private/fs_shell/fssh_api_wrapper.h:1658: warning: "SEEK_CUR" redefined
  6567. 1658 | #define SEEK_CUR FSSH_SEEK_CUR
  6568. |
  6569. In file included from /usr/include/zconf.h:475,
  6570. from /usr/include/zlib.h:34,
  6571. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6572. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6573. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6574. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6575. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6576. /usr/include/unistd.h:312: note: this is the location of the previous definition
  6577. 312 | # define SEEK_CUR 1 /* Seek from current position. */
  6578. |
  6579. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6580. from ../headers/private/kernel/util/AVLTree.h:9,
  6581. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6582. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6583. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6584. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6585. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6586. ../headers/private/fs_shell/fssh_api_wrapper.h:1659: warning: "SEEK_END" redefined
  6587. 1659 | #define SEEK_END FSSH_SEEK_END
  6588. |
  6589. In file included from /usr/include/zconf.h:475,
  6590. from /usr/include/zlib.h:34,
  6591. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6592. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6593. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6594. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6595. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6596. /usr/include/unistd.h:313: note: this is the location of the previous definition
  6597. 313 | # define SEEK_END 2 /* Seek from end of file. */
  6598. |
  6599. In file included from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6600. from ../src/add-ons/kernel/file_systems/btrfs/Journal.h:10,
  6601. from ../src/add-ons/kernel/file_systems/btrfs/Journal.cpp:8:
  6602. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:100:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  6603. 100 | uuid_t fsid;
  6604. | ^~~~~~
  6605. | uid_t
  6606. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:103:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  6607. 103 | uuid_t chunk_tree_uuid;
  6608. | ^~~~~~
  6609. | uid_t
  6610. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:169:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  6611. 169 | uuid_t device_uuid;
  6612. | ^~~~~~
  6613. | uid_t
  6614. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:215:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  6615. 215 | uuid_t uuid;
  6616. | ^~~~~~
  6617. | uid_t
  6618. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:216:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  6619. 216 | uuid_t fsid;
  6620. | ^~~~~~
  6621. | uid_t
  6622. ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:222:2: error: ‘uuid_t’ does not name a type; did you mean ‘uid_t’?
  6623. 222 | uuid_t fsid;
  6624. | ^~~~~~
  6625. | uid_t
  6626.  
  6627. gcc -c "../src/add-ons/kernel/file_systems/btrfs/Journal.cpp" -O2 -Wall -Wno-trigraphs -Wno-ctor-dtor-privacy -Woverloaded-virtual -Wpointer-arith -Wcast-align -Wsign-compare -Wno-multichar -DFS_SHELL -DTRACE_BTRFS -Wno-multichar -fno-rtti -DHAIKU_BUILD_COMPATIBILITY_H -DARCH_x86_64 -D_NO_INLINE_ASM -D__NO_INLINE__ -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DHAIKU_HOST_USE_XATTR_REF -DHAIKU_HOST_PLATFORM_LINUX -DHAIKU_HOST_PLATFORM_64_BIT -DHAIKU_PACKAGING_ARCH=\"x86_64\" -iquote ../build/user_config_headers -iquote ../build/config_headers -iquote ../src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/linux/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/haiku/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote ../src/add-ons/kernel/file_systems/btrfs -iquote ../src/tools/fs_shell -I ../headers/build -I ../headers/build/os -I ../headers/build/os/support -I ../headers/private/. -I ../headers/private/kernel -I ../headers/private/libroot -I ../headers/private/shared -I ../headers/private/kernel/boot/platform/bios_ia32 -I ../headers/private/kernel/arch/x86 -I objects/haiku/x86_64/common/system/kernel -I ../headers/private/. -I ../headers/private/system -I ../headers/private/system/arch/x86_64 -I ../headers/private/shared -I ../headers/private/storage -I ../headers/private/fs_shell -I ../headers/private -I ../headers/build/host/linux -o "objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Journal.o"
  6628.  
  6629. ...failed C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Journal.o ...
  6630. C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Volume.o
  6631. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6632. from ../headers/private/kernel/util/AVLTree.h:9,
  6633. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6634. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6635. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6636. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6637. ../headers/private/fs_shell/fssh_api_wrapper.h:1646: warning: "R_OK" redefined
  6638. 1646 | #define R_OK FSSH_R_OK
  6639. |
  6640. In file included from /usr/include/zconf.h:475,
  6641. from /usr/include/zlib.h:34,
  6642. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6643. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6644. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6645. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6646. /usr/include/unistd.h:281: note: this is the location of the previous definition
  6647. 281 | #define R_OK 4 /* Test for read permission. */
  6648. |
  6649. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6650. from ../headers/private/kernel/util/AVLTree.h:9,
  6651. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6652. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6653. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6654. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6655. ../headers/private/fs_shell/fssh_api_wrapper.h:1647: warning: "W_OK" redefined
  6656. 1647 | #define W_OK FSSH_W_OK
  6657. |
  6658. In file included from /usr/include/zconf.h:475,
  6659. from /usr/include/zlib.h:34,
  6660. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6661. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6662. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6663. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6664. /usr/include/unistd.h:282: note: this is the location of the previous definition
  6665. 282 | #define W_OK 2 /* Test for write permission. */
  6666. |
  6667. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6668. from ../headers/private/kernel/util/AVLTree.h:9,
  6669. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6670. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6671. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6672. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6673. ../headers/private/fs_shell/fssh_api_wrapper.h:1648: warning: "X_OK" redefined
  6674. 1648 | #define X_OK FSSH_X_OK
  6675. |
  6676. In file included from /usr/include/zconf.h:475,
  6677. from /usr/include/zlib.h:34,
  6678. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6679. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6680. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6681. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6682. /usr/include/unistd.h:283: note: this is the location of the previous definition
  6683. 283 | #define X_OK 1 /* Test for execute permission. */
  6684. |
  6685. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6686. from ../headers/private/kernel/util/AVLTree.h:9,
  6687. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6688. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6689. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6690. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6691. ../headers/private/fs_shell/fssh_api_wrapper.h:1649: warning: "F_OK" redefined
  6692. 1649 | #define F_OK FSSH_F_OK
  6693. |
  6694. In file included from /usr/include/zconf.h:475,
  6695. from /usr/include/zlib.h:34,
  6696. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6697. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6698. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6699. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6700. /usr/include/unistd.h:284: note: this is the location of the previous definition
  6701. 284 | #define F_OK 0 /* Test for existence. */
  6702. |
  6703. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6704. from ../headers/private/kernel/util/AVLTree.h:9,
  6705. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6706. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6707. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6708. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6709. ../headers/private/fs_shell/fssh_api_wrapper.h:1652: warning: "STDIN_FILENO" redefined
  6710. 1652 | #define STDIN_FILENO FSSH_STDIN_FILENO
  6711. |
  6712. In file included from /usr/include/zconf.h:475,
  6713. from /usr/include/zlib.h:34,
  6714. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6715. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6716. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6717. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6718. /usr/include/unistd.h:210: note: this is the location of the previous definition
  6719. 210 | #define STDIN_FILENO 0 /* Standard input. */
  6720. |
  6721. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6722. from ../headers/private/kernel/util/AVLTree.h:9,
  6723. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6724. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6725. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6726. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6727. ../headers/private/fs_shell/fssh_api_wrapper.h:1653: warning: "STDOUT_FILENO" redefined
  6728. 1653 | #define STDOUT_FILENO FSSH_STDOUT_FILENO
  6729. |
  6730. In file included from /usr/include/zconf.h:475,
  6731. from /usr/include/zlib.h:34,
  6732. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6733. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6734. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6735. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6736. /usr/include/unistd.h:211: note: this is the location of the previous definition
  6737. 211 | #define STDOUT_FILENO 1 /* Standard output. */
  6738. |
  6739. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6740. from ../headers/private/kernel/util/AVLTree.h:9,
  6741. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6742. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6743. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6744. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6745. ../headers/private/fs_shell/fssh_api_wrapper.h:1654: warning: "STDERR_FILENO" redefined
  6746. 1654 | #define STDERR_FILENO FSSH_STDERR_FILENO
  6747. |
  6748. In file included from /usr/include/zconf.h:475,
  6749. from /usr/include/zlib.h:34,
  6750. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6751. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6752. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6753. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6754. /usr/include/unistd.h:212: note: this is the location of the previous definition
  6755. 212 | #define STDERR_FILENO 2 /* Standard error output. */
  6756. |
  6757. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6758. from ../headers/private/kernel/util/AVLTree.h:9,
  6759. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6760. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6761. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6762. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6763. ../headers/private/fs_shell/fssh_api_wrapper.h:1657: warning: "SEEK_SET" redefined
  6764. 1657 | #define SEEK_SET FSSH_SEEK_SET
  6765. |
  6766. In file included from /usr/include/zconf.h:475,
  6767. from /usr/include/zlib.h:34,
  6768. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6769. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6770. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6771. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6772. /usr/include/unistd.h:311: note: this is the location of the previous definition
  6773. 311 | # define SEEK_SET 0 /* Seek from beginning of file. */
  6774. |
  6775. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6776. from ../headers/private/kernel/util/AVLTree.h:9,
  6777. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6778. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6779. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6780. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6781. ../headers/private/fs_shell/fssh_api_wrapper.h:1658: warning: "SEEK_CUR" redefined
  6782. 1658 | #define SEEK_CUR FSSH_SEEK_CUR
  6783. |
  6784. In file included from /usr/include/zconf.h:475,
  6785. from /usr/include/zlib.h:34,
  6786. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6787. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6788. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6789. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6790. /usr/include/unistd.h:312: note: this is the location of the previous definition
  6791. 312 | # define SEEK_CUR 1 /* Seek from current position. */
  6792. |
  6793. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6794. from ../headers/private/kernel/util/AVLTree.h:9,
  6795. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6796. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6797. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6798. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6799. ../headers/private/fs_shell/fssh_api_wrapper.h:1659: warning: "SEEK_END" redefined
  6800. 1659 | #define SEEK_END FSSH_SEEK_END
  6801. |
  6802. In file included from /usr/include/zconf.h:475,
  6803. from /usr/include/zlib.h:34,
  6804. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6805. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6806. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6807. from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:14:
  6808. /usr/include/unistd.h:313: note: this is the location of the previous definition
  6809. 313 | # define SEEK_END 2 /* Seek from end of file. */
  6810. |
  6811. In file included from ../src/add-ons/kernel/file_systems/btrfs/Volume.cpp:18:
  6812. ../src/add-ons/kernel/file_systems/btrfs/DebugSupport.h:14:11: fatal error: KernelExport.h: No such file or directory
  6813. 14 | # include <KernelExport.h>
  6814. | ^~~~~~~~~~~~~~~~
  6815. compilation terminated.
  6816.  
  6817. gcc -c "../src/add-ons/kernel/file_systems/btrfs/Volume.cpp" -O2 -Wall -Wno-trigraphs -Wno-ctor-dtor-privacy -Woverloaded-virtual -Wpointer-arith -Wcast-align -Wsign-compare -Wno-multichar -DFS_SHELL -DTRACE_BTRFS -Wno-multichar -fno-rtti -DHAIKU_BUILD_COMPATIBILITY_H -DARCH_x86_64 -D_NO_INLINE_ASM -D__NO_INLINE__ -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DHAIKU_HOST_USE_XATTR_REF -DHAIKU_HOST_PLATFORM_LINUX -DHAIKU_HOST_PLATFORM_64_BIT -DHAIKU_PACKAGING_ARCH=\"x86_64\" -iquote ../build/user_config_headers -iquote ../build/config_headers -iquote ../src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/linux/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/haiku/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote ../src/add-ons/kernel/file_systems/btrfs -iquote ../src/tools/fs_shell -I ../headers/build -I ../headers/build/os -I ../headers/build/os/support -I ../headers/private/. -I ../headers/private/kernel -I ../headers/private/libroot -I ../headers/private/shared -I ../headers/private/kernel/boot/platform/bios_ia32 -I ../headers/private/kernel/arch/x86 -I objects/haiku/x86_64/common/system/kernel -I ../headers/private/. -I ../headers/private/system -I ../headers/private/system/arch/x86_64 -I ../headers/private/shared -I ../headers/private/storage -I ../headers/private/fs_shell -I ../headers/private -I ../headers/build/host/linux -o "objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Volume.o"
  6818.  
  6819. ...failed C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Volume.o ...
  6820. C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/kernel_interface.o
  6821. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6822. from ../headers/private/kernel/util/AVLTree.h:9,
  6823. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6824. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6825. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6826. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  6827. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  6828. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  6829. ../headers/private/fs_shell/fssh_api_wrapper.h:1646: warning: "R_OK" redefined
  6830. 1646 | #define R_OK FSSH_R_OK
  6831. |
  6832. In file included from /usr/include/zconf.h:475,
  6833. from /usr/include/zlib.h:34,
  6834. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6835. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6836. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6837. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  6838. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  6839. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  6840. /usr/include/unistd.h:281: note: this is the location of the previous definition
  6841. 281 | #define R_OK 4 /* Test for read permission. */
  6842. |
  6843. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6844. from ../headers/private/kernel/util/AVLTree.h:9,
  6845. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6846. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6847. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6848. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  6849. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  6850. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  6851. ../headers/private/fs_shell/fssh_api_wrapper.h:1647: warning: "W_OK" redefined
  6852. 1647 | #define W_OK FSSH_W_OK
  6853. |
  6854. In file included from /usr/include/zconf.h:475,
  6855. from /usr/include/zlib.h:34,
  6856. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6857. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6858. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6859. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  6860. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  6861. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  6862. /usr/include/unistd.h:282: note: this is the location of the previous definition
  6863. 282 | #define W_OK 2 /* Test for write permission. */
  6864. |
  6865. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6866. from ../headers/private/kernel/util/AVLTree.h:9,
  6867. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6868. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6869. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6870. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  6871. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  6872. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  6873. ../headers/private/fs_shell/fssh_api_wrapper.h:1648: warning: "X_OK" redefined
  6874. 1648 | #define X_OK FSSH_X_OK
  6875. |
  6876. In file included from /usr/include/zconf.h:475,
  6877. from /usr/include/zlib.h:34,
  6878. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6879. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6880. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6881. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  6882. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  6883. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  6884. /usr/include/unistd.h:283: note: this is the location of the previous definition
  6885. 283 | #define X_OK 1 /* Test for execute permission. */
  6886. |
  6887. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6888. from ../headers/private/kernel/util/AVLTree.h:9,
  6889. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6890. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6891. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6892. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  6893. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  6894. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  6895. ../headers/private/fs_shell/fssh_api_wrapper.h:1649: warning: "F_OK" redefined
  6896. 1649 | #define F_OK FSSH_F_OK
  6897. |
  6898. In file included from /usr/include/zconf.h:475,
  6899. from /usr/include/zlib.h:34,
  6900. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6901. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6902. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6903. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  6904. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  6905. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  6906. /usr/include/unistd.h:284: note: this is the location of the previous definition
  6907. 284 | #define F_OK 0 /* Test for existence. */
  6908. |
  6909. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6910. from ../headers/private/kernel/util/AVLTree.h:9,
  6911. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6912. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6913. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6914. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  6915. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  6916. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  6917. ../headers/private/fs_shell/fssh_api_wrapper.h:1652: warning: "STDIN_FILENO" redefined
  6918. 1652 | #define STDIN_FILENO FSSH_STDIN_FILENO
  6919. |
  6920. In file included from /usr/include/zconf.h:475,
  6921. from /usr/include/zlib.h:34,
  6922. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6923. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6924. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6925. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  6926. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  6927. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  6928. /usr/include/unistd.h:210: note: this is the location of the previous definition
  6929. 210 | #define STDIN_FILENO 0 /* Standard input. */
  6930. |
  6931. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6932. from ../headers/private/kernel/util/AVLTree.h:9,
  6933. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6934. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6935. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6936. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  6937. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  6938. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  6939. ../headers/private/fs_shell/fssh_api_wrapper.h:1653: warning: "STDOUT_FILENO" redefined
  6940. 1653 | #define STDOUT_FILENO FSSH_STDOUT_FILENO
  6941. |
  6942. In file included from /usr/include/zconf.h:475,
  6943. from /usr/include/zlib.h:34,
  6944. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6945. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6946. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6947. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  6948. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  6949. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  6950. /usr/include/unistd.h:211: note: this is the location of the previous definition
  6951. 211 | #define STDOUT_FILENO 1 /* Standard output. */
  6952. |
  6953. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6954. from ../headers/private/kernel/util/AVLTree.h:9,
  6955. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6956. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6957. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6958. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  6959. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  6960. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  6961. ../headers/private/fs_shell/fssh_api_wrapper.h:1654: warning: "STDERR_FILENO" redefined
  6962. 1654 | #define STDERR_FILENO FSSH_STDERR_FILENO
  6963. |
  6964. In file included from /usr/include/zconf.h:475,
  6965. from /usr/include/zlib.h:34,
  6966. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6967. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6968. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6969. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  6970. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  6971. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  6972. /usr/include/unistd.h:212: note: this is the location of the previous definition
  6973. 212 | #define STDERR_FILENO 2 /* Standard error output. */
  6974. |
  6975. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6976. from ../headers/private/kernel/util/AVLTree.h:9,
  6977. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  6978. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6979. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6980. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  6981. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  6982. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  6983. ../headers/private/fs_shell/fssh_api_wrapper.h:1657: warning: "SEEK_SET" redefined
  6984. 1657 | #define SEEK_SET FSSH_SEEK_SET
  6985. |
  6986. In file included from /usr/include/zconf.h:475,
  6987. from /usr/include/zlib.h:34,
  6988. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  6989. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  6990. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  6991. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  6992. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  6993. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  6994. /usr/include/unistd.h:311: note: this is the location of the previous definition
  6995. 311 | # define SEEK_SET 0 /* Seek from beginning of file. */
  6996. |
  6997. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  6998. from ../headers/private/kernel/util/AVLTree.h:9,
  6999. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  7000. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  7001. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  7002. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  7003. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  7004. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  7005. ../headers/private/fs_shell/fssh_api_wrapper.h:1658: warning: "SEEK_CUR" redefined
  7006. 1658 | #define SEEK_CUR FSSH_SEEK_CUR
  7007. |
  7008. In file included from /usr/include/zconf.h:475,
  7009. from /usr/include/zlib.h:34,
  7010. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  7011. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  7012. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  7013. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  7014. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  7015. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  7016. /usr/include/unistd.h:312: note: this is the location of the previous definition
  7017. 312 | # define SEEK_CUR 1 /* Seek from current position. */
  7018. |
  7019. In file included from ../headers/private/kernel/util/AVLTreeBase.h:13,
  7020. from ../headers/private/kernel/util/AVLTree.h:9,
  7021. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:14,
  7022. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  7023. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  7024. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  7025. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  7026. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  7027. ../headers/private/fs_shell/fssh_api_wrapper.h:1659: warning: "SEEK_END" redefined
  7028. 1659 | #define SEEK_END FSSH_SEEK_END
  7029. |
  7030. In file included from /usr/include/zconf.h:475,
  7031. from /usr/include/zlib.h:34,
  7032. from ../src/add-ons/kernel/file_systems/btrfs/system_dependencies.h:12,
  7033. from ../src/add-ons/kernel/file_systems/btrfs/btrfs.h:10,
  7034. from ../src/add-ons/kernel/file_systems/btrfs/Volume.h:11,
  7035. from ../src/add-ons/kernel/file_systems/btrfs/CachedBlock.h:12,
  7036. from ../src/add-ons/kernel/file_systems/btrfs/Attribute.h:11,
  7037. from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:12:
  7038. /usr/include/unistd.h:313: note: this is the location of the previous definition
  7039. 313 | # define SEEK_END 2 /* Seek from end of file. */
  7040. |
  7041. In file included from ../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:16:
  7042. ../src/add-ons/kernel/file_systems/btrfs/DebugSupport.h:14:11: fatal error: KernelExport.h: No such file or directory
  7043. 14 | # include <KernelExport.h>
  7044. | ^~~~~~~~~~~~~~~~
  7045. compilation terminated.
  7046.  
  7047. gcc -c "../src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp" -O2 -Wall -Wno-trigraphs -Wno-ctor-dtor-privacy -Woverloaded-virtual -Wpointer-arith -Wcast-align -Wsign-compare -Wno-multichar -DFS_SHELL -DTRACE_BTRFS -Wno-multichar -fno-rtti -DHAIKU_BUILD_COMPATIBILITY_H -DARCH_x86_64 -D_NO_INLINE_ASM -D__NO_INLINE__ -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DHAIKU_HOST_USE_XATTR_REF -DHAIKU_HOST_PLATFORM_LINUX -DHAIKU_HOST_PLATFORM_64_BIT -DHAIKU_PACKAGING_ARCH=\"x86_64\" -iquote ../build/user_config_headers -iquote ../build/config_headers -iquote ../src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/linux/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote objects/haiku/x86_64/common/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell -iquote ../src/add-ons/kernel/file_systems/btrfs -iquote ../src/tools/fs_shell -I ../headers/build -I ../headers/build/os -I ../headers/build/os/support -I ../headers/private/. -I ../headers/private/kernel -I ../headers/private/libroot -I ../headers/private/shared -I ../headers/private/kernel/boot/platform/bios_ia32 -I ../headers/private/kernel/arch/x86 -I objects/haiku/x86_64/common/system/kernel -I ../headers/private/. -I ../headers/private/system -I ../headers/private/system/arch/x86_64 -I ../headers/private/shared -I ../headers/private/storage -I ../headers/private/fs_shell -I ../headers/private -I ../headers/build/host/linux -o "objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/kernel_interface.o"
  7048.  
  7049. ...failed C++ objects/linux/x86_64/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/kernel_interface.o ...
  7050.  
  7051. BUILD FAILURE:
  7052. ...failed updating 10 target(s)...
  7053. ...skipped 3 target(s)...
Add Comment
Please, Sign In to add comment