1 /* SPDX-License-Identifier: GPL-2.0 */ << 2 /* 1 /* 3 * Copyright (C) 2007 Oracle. All rights rese 2 * Copyright (C) 2007 Oracle. All rights reserved. >> 3 * >> 4 * This program is free software; you can redistribute it and/or >> 5 * modify it under the terms of the GNU General Public >> 6 * License v2 as published by the Free Software Foundation. >> 7 * >> 8 * This program is distributed in the hope that it will be useful, >> 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of >> 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >> 11 * General Public License for more details. >> 12 * >> 13 * You should have received a copy of the GNU General Public >> 14 * License along with this program; if not, write to the >> 15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, >> 16 * Boston, MA 021110-1307, USA. 4 */ 17 */ 5 18 6 #ifndef BTRFS_CTREE_H !! 19 #ifndef __BTRFS_CTREE__ 7 #define BTRFS_CTREE_H !! 20 #define __BTRFS_CTREE__ 8 21 9 #include "linux/cleanup.h" !! 22 #include <linux/version.h> 10 #include <linux/pagemap.h> !! 23 #include <linux/mm.h> 11 #include <linux/spinlock.h> !! 24 #include <linux/highmem.h> 12 #include <linux/rbtree.h> !! 25 #include <linux/fs.h> 13 #include <linux/mutex.h> !! 26 #include <linux/completion.h> >> 27 #include <linux/backing-dev.h> 14 #include <linux/wait.h> 28 #include <linux/wait.h> 15 #include <linux/list.h> !! 29 #include <asm/kmap_types.h> 16 #include <linux/atomic.h> !! 30 #include "extent_io.h" 17 #include <linux/xarray.h> !! 31 #include "extent_map.h" 18 #include <linux/refcount.h> !! 32 #include "async-thread.h" 19 #include <uapi/linux/btrfs_tree.h> << 20 #include "locking.h" << 21 #include "fs.h" << 22 #include "accessors.h" << 23 #include "extent-io-tree.h" << 24 33 25 struct extent_buffer; << 26 struct btrfs_block_rsv; << 27 struct btrfs_trans_handle; 34 struct btrfs_trans_handle; 28 struct btrfs_block_group; !! 35 struct btrfs_transaction; >> 36 extern struct kmem_cache *btrfs_trans_handle_cachep; >> 37 extern struct kmem_cache *btrfs_transaction_cachep; >> 38 extern struct kmem_cache *btrfs_bit_radix_cachep; >> 39 extern struct kmem_cache *btrfs_path_cachep; >> 40 struct btrfs_ordered_sum; >> 41 >> 42 #define BTRFS_MAGIC "_BHRfS_M" >> 43 >> 44 #define BTRFS_MAX_LEVEL 8 >> 45 >> 46 #define BTRFS_COMPAT_EXTENT_TREE_V0 >> 47 >> 48 /* >> 49 * files bigger than this get some pre-flushing when they are added >> 50 * to the ordered operations list. That way we limit the total >> 51 * work done by the commit >> 52 */ >> 53 #define BTRFS_ORDERED_OPERATIONS_FLUSH_LIMIT (8 * 1024 * 1024) >> 54 >> 55 /* holds pointers to all of the tree roots */ >> 56 #define BTRFS_ROOT_TREE_OBJECTID 1ULL >> 57 >> 58 /* stores information about which extents are in use, and reference counts */ >> 59 #define BTRFS_EXTENT_TREE_OBJECTID 2ULL >> 60 >> 61 /* >> 62 * chunk tree stores translations from logical -> physical block numbering >> 63 * the super block points to the chunk tree >> 64 */ >> 65 #define BTRFS_CHUNK_TREE_OBJECTID 3ULL >> 66 >> 67 /* >> 68 * stores information about which areas of a given device are in use. >> 69 * one per device. The tree of tree roots points to the device tree >> 70 */ >> 71 #define BTRFS_DEV_TREE_OBJECTID 4ULL >> 72 >> 73 /* one per subvolume, storing files and directories */ >> 74 #define BTRFS_FS_TREE_OBJECTID 5ULL >> 75 >> 76 /* directory objectid inside the root tree */ >> 77 #define BTRFS_ROOT_TREE_DIR_OBJECTID 6ULL >> 78 >> 79 /* holds checksums of all the data extents */ >> 80 #define BTRFS_CSUM_TREE_OBJECTID 7ULL >> 81 >> 82 /* orhpan objectid for tracking unlinked/truncated files */ >> 83 #define BTRFS_ORPHAN_OBJECTID -5ULL >> 84 >> 85 /* does write ahead logging to speed up fsyncs */ >> 86 #define BTRFS_TREE_LOG_OBJECTID -6ULL >> 87 #define BTRFS_TREE_LOG_FIXUP_OBJECTID -7ULL >> 88 >> 89 /* for space balancing */ >> 90 #define BTRFS_TREE_RELOC_OBJECTID -8ULL >> 91 #define BTRFS_DATA_RELOC_TREE_OBJECTID -9ULL >> 92 >> 93 /* >> 94 * extent checksums all have this objectid >> 95 * this allows them to share the logging tree >> 96 * for fsyncs >> 97 */ >> 98 #define BTRFS_EXTENT_CSUM_OBJECTID -10ULL >> 99 >> 100 /* dummy objectid represents multiple objectids */ >> 101 #define BTRFS_MULTIPLE_OBJECTIDS -255ULL >> 102 >> 103 /* >> 104 * All files have objectids in this range. >> 105 */ >> 106 #define BTRFS_FIRST_FREE_OBJECTID 256ULL >> 107 #define BTRFS_LAST_FREE_OBJECTID -256ULL >> 108 #define BTRFS_FIRST_CHUNK_TREE_OBJECTID 256ULL >> 109 >> 110 >> 111 /* >> 112 * the device items go into the chunk tree. The key is in the form >> 113 * [ 1 BTRFS_DEV_ITEM_KEY device_id ] >> 114 */ >> 115 #define BTRFS_DEV_ITEMS_OBJECTID 1ULL >> 116 >> 117 #define BTRFS_BTREE_INODE_OBJECTID 1 >> 118 >> 119 #define BTRFS_EMPTY_SUBVOL_DIR_OBJECTID 2 >> 120 >> 121 /* >> 122 * we can actually store much bigger names, but lets not confuse the rest >> 123 * of linux >> 124 */ >> 125 #define BTRFS_NAME_LEN 255 >> 126 >> 127 /* 32 bytes in various csum fields */ >> 128 #define BTRFS_CSUM_SIZE 32 >> 129 >> 130 /* csum types */ >> 131 #define BTRFS_CSUM_TYPE_CRC32 0 >> 132 >> 133 static int btrfs_csum_sizes[] = { 4, 0 }; >> 134 >> 135 /* four bytes for CRC32 */ >> 136 #define BTRFS_EMPTY_DIR_SIZE 0 >> 137 >> 138 #define BTRFS_FT_UNKNOWN 0 >> 139 #define BTRFS_FT_REG_FILE 1 >> 140 #define BTRFS_FT_DIR 2 >> 141 #define BTRFS_FT_CHRDEV 3 >> 142 #define BTRFS_FT_BLKDEV 4 >> 143 #define BTRFS_FT_FIFO 5 >> 144 #define BTRFS_FT_SOCK 6 >> 145 #define BTRFS_FT_SYMLINK 7 >> 146 #define BTRFS_FT_XATTR 8 >> 147 #define BTRFS_FT_MAX 9 >> 148 >> 149 /* >> 150 * The key defines the order in the tree, and so it also defines (optimal) >> 151 * block layout. >> 152 * >> 153 * objectid corresponds to the inode number. >> 154 * >> 155 * type tells us things about the object, and is a kind of stream selector. >> 156 * so for a given inode, keys with type of 1 might refer to the inode data, >> 157 * type of 2 may point to file data in the btree and type == 3 may point to >> 158 * extents. >> 159 * >> 160 * offset is the starting byte offset for this key in the stream. >> 161 * >> 162 * btrfs_disk_key is in disk byte order. struct btrfs_key is always >> 163 * in cpu native order. Otherwise they are identical and their sizes >> 164 * should be the same (ie both packed) >> 165 */ >> 166 struct btrfs_disk_key { >> 167 __le64 objectid; >> 168 u8 type; >> 169 __le64 offset; >> 170 } __attribute__ ((__packed__)); >> 171 >> 172 struct btrfs_key { >> 173 u64 objectid; >> 174 u8 type; >> 175 u64 offset; >> 176 } __attribute__ ((__packed__)); >> 177 >> 178 struct btrfs_mapping_tree { >> 179 struct extent_map_tree map_tree; >> 180 }; >> 181 >> 182 #define BTRFS_UUID_SIZE 16 >> 183 struct btrfs_dev_item { >> 184 /* the internal btrfs device id */ >> 185 __le64 devid; >> 186 >> 187 /* size of the device */ >> 188 __le64 total_bytes; >> 189 >> 190 /* bytes used */ >> 191 __le64 bytes_used; >> 192 >> 193 /* optimal io alignment for this device */ >> 194 __le32 io_align; >> 195 >> 196 /* optimal io width for this device */ >> 197 __le32 io_width; >> 198 >> 199 /* minimal io size for this device */ >> 200 __le32 sector_size; >> 201 >> 202 /* type and info about this device */ >> 203 __le64 type; >> 204 >> 205 /* expected generation for this device */ >> 206 __le64 generation; 29 207 30 /* Read ahead values for struct btrfs_path.rea << 31 enum { << 32 READA_NONE, << 33 READA_BACK, << 34 READA_FORWARD, << 35 /* 208 /* 36 * Similar to READA_FORWARD but unlike !! 209 * starting byte of this partition on the device, 37 * !! 210 * to allow for stripe alignment in the future 38 * 1) It will trigger readahead even f << 39 * each other on disk; << 40 * 2) It also triggers readahead for n << 41 * 3) During a search, even when a nod << 42 * will still trigger readahead for << 43 * it. << 44 * << 45 * This is meant to be used only when << 46 * entire tree or a very large part of << 47 */ 211 */ 48 READA_FORWARD_ALWAYS, !! 212 __le64 start_offset; 49 }; !! 213 >> 214 /* grouping information for allocation decisions */ >> 215 __le32 dev_group; >> 216 >> 217 /* seek speed 0-100 where 100 is fastest */ >> 218 u8 seek_speed; >> 219 >> 220 /* bandwidth 0-100 where 100 is fastest */ >> 221 u8 bandwidth; >> 222 >> 223 /* btrfs generated uuid for this device */ >> 224 u8 uuid[BTRFS_UUID_SIZE]; >> 225 >> 226 /* uuid of FS who owns this device */ >> 227 u8 fsid[BTRFS_UUID_SIZE]; >> 228 } __attribute__ ((__packed__)); >> 229 >> 230 struct btrfs_stripe { >> 231 __le64 devid; >> 232 __le64 offset; >> 233 u8 dev_uuid[BTRFS_UUID_SIZE]; >> 234 } __attribute__ ((__packed__)); >> 235 >> 236 struct btrfs_chunk { >> 237 /* size of this chunk in bytes */ >> 238 __le64 length; >> 239 >> 240 /* objectid of the root referencing this chunk */ >> 241 __le64 owner; >> 242 >> 243 __le64 stripe_len; >> 244 __le64 type; >> 245 >> 246 /* optimal io alignment for this chunk */ >> 247 __le32 io_align; >> 248 >> 249 /* optimal io width for this chunk */ >> 250 __le32 io_width; >> 251 >> 252 /* minimal io size for this chunk */ >> 253 __le32 sector_size; >> 254 >> 255 /* 2^16 stripes is quite a lot, a second limit is the size of a single >> 256 * item in the btree >> 257 */ >> 258 __le16 num_stripes; >> 259 >> 260 /* sub stripes only matter for raid10 */ >> 261 __le16 sub_stripes; >> 262 struct btrfs_stripe stripe; >> 263 /* additional stripes go here */ >> 264 } __attribute__ ((__packed__)); >> 265 >> 266 static inline unsigned long btrfs_chunk_item_size(int num_stripes) >> 267 { >> 268 BUG_ON(num_stripes == 0); >> 269 return sizeof(struct btrfs_chunk) + >> 270 sizeof(struct btrfs_stripe) * (num_stripes - 1); >> 271 } >> 272 >> 273 #define BTRFS_FSID_SIZE 16 >> 274 #define BTRFS_HEADER_FLAG_WRITTEN (1ULL << 0) >> 275 #define BTRFS_HEADER_FLAG_RELOC (1ULL << 1) >> 276 #define BTRFS_SUPER_FLAG_SEEDING (1ULL << 32) >> 277 #define BTRFS_SUPER_FLAG_METADUMP (1ULL << 33) >> 278 >> 279 #define BTRFS_BACKREF_REV_MAX 256 >> 280 #define BTRFS_BACKREF_REV_SHIFT 56 >> 281 #define BTRFS_BACKREF_REV_MASK (((u64)BTRFS_BACKREF_REV_MAX - 1) << \ >> 282 BTRFS_BACKREF_REV_SHIFT) >> 283 >> 284 #define BTRFS_OLD_BACKREF_REV 0 >> 285 #define BTRFS_MIXED_BACKREF_REV 1 >> 286 >> 287 /* >> 288 * every tree block (leaf or node) starts with this header. >> 289 */ >> 290 struct btrfs_header { >> 291 /* these first four must match the super block */ >> 292 u8 csum[BTRFS_CSUM_SIZE]; >> 293 u8 fsid[BTRFS_FSID_SIZE]; /* FS specific uuid */ >> 294 __le64 bytenr; /* which block this node is supposed to live in */ >> 295 __le64 flags; >> 296 >> 297 /* allowed to be different from the super from here on down */ >> 298 u8 chunk_tree_uuid[BTRFS_UUID_SIZE]; >> 299 __le64 generation; >> 300 __le64 owner; >> 301 __le32 nritems; >> 302 u8 level; >> 303 } __attribute__ ((__packed__)); >> 304 >> 305 #define BTRFS_NODEPTRS_PER_BLOCK(r) (((r)->nodesize - \ >> 306 sizeof(struct btrfs_header)) / \ >> 307 sizeof(struct btrfs_key_ptr)) >> 308 #define __BTRFS_LEAF_DATA_SIZE(bs) ((bs) - sizeof(struct btrfs_header)) >> 309 #define BTRFS_LEAF_DATA_SIZE(r) (__BTRFS_LEAF_DATA_SIZE(r->leafsize)) >> 310 #define BTRFS_MAX_INLINE_DATA_SIZE(r) (BTRFS_LEAF_DATA_SIZE(r) - \ >> 311 sizeof(struct btrfs_item) - \ >> 312 sizeof(struct btrfs_file_extent_item)) >> 313 #define BTRFS_MAX_XATTR_SIZE(r) (BTRFS_LEAF_DATA_SIZE(r) - \ >> 314 sizeof(struct btrfs_item) -\ >> 315 sizeof(struct btrfs_dir_item)) >> 316 >> 317 >> 318 /* >> 319 * this is a very generous portion of the super block, giving us >> 320 * room to translate 14 chunks with 3 stripes each. >> 321 */ >> 322 #define BTRFS_SYSTEM_CHUNK_ARRAY_SIZE 2048 >> 323 #define BTRFS_LABEL_SIZE 256 >> 324 >> 325 /* >> 326 * the super block basically lists the main trees of the FS >> 327 * it currently lacks any block count etc etc >> 328 */ >> 329 struct btrfs_super_block { >> 330 u8 csum[BTRFS_CSUM_SIZE]; >> 331 /* the first 4 fields must match struct btrfs_header */ >> 332 u8 fsid[BTRFS_FSID_SIZE]; /* FS specific uuid */ >> 333 __le64 bytenr; /* this block number */ >> 334 __le64 flags; >> 335 >> 336 /* allowed to be different from the btrfs_header from here own down */ >> 337 __le64 magic; >> 338 __le64 generation; >> 339 __le64 root; >> 340 __le64 chunk_root; >> 341 __le64 log_root; >> 342 >> 343 /* this will help find the new super based on the log root */ >> 344 __le64 log_root_transid; >> 345 __le64 total_bytes; >> 346 __le64 bytes_used; >> 347 __le64 root_dir_objectid; >> 348 __le64 num_devices; >> 349 __le32 sectorsize; >> 350 __le32 nodesize; >> 351 __le32 leafsize; >> 352 __le32 stripesize; >> 353 __le32 sys_chunk_array_size; >> 354 __le64 chunk_root_generation; >> 355 __le64 compat_flags; >> 356 __le64 compat_ro_flags; >> 357 __le64 incompat_flags; >> 358 __le16 csum_type; >> 359 u8 root_level; >> 360 u8 chunk_root_level; >> 361 u8 log_root_level; >> 362 struct btrfs_dev_item dev_item; >> 363 >> 364 char label[BTRFS_LABEL_SIZE]; >> 365 >> 366 /* future expansion */ >> 367 __le64 reserved[32]; >> 368 u8 sys_chunk_array[BTRFS_SYSTEM_CHUNK_ARRAY_SIZE]; >> 369 } __attribute__ ((__packed__)); >> 370 >> 371 /* >> 372 * Compat flags that we support. If any incompat flags are set other than the >> 373 * ones specified below then we will fail to mount >> 374 */ >> 375 #define BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF (1ULL << 0) >> 376 >> 377 #define BTRFS_FEATURE_COMPAT_SUPP 0ULL >> 378 #define BTRFS_FEATURE_COMPAT_RO_SUPP 0ULL >> 379 #define BTRFS_FEATURE_INCOMPAT_SUPP \ >> 380 BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF >> 381 >> 382 /* >> 383 * A leaf is full of items. offset and size tell us where to find >> 384 * the item in the leaf (relative to the start of the data area) >> 385 */ >> 386 struct btrfs_item { >> 387 struct btrfs_disk_key key; >> 388 __le32 offset; >> 389 __le32 size; >> 390 } __attribute__ ((__packed__)); >> 391 >> 392 /* >> 393 * leaves have an item area and a data area: >> 394 * [item0, item1....itemN] [free space] [dataN...data1, data0] >> 395 * >> 396 * The data is separate from the items to get the keys closer together >> 397 * during searches. >> 398 */ >> 399 struct btrfs_leaf { >> 400 struct btrfs_header header; >> 401 struct btrfs_item items[]; >> 402 } __attribute__ ((__packed__)); >> 403 >> 404 /* >> 405 * all non-leaf blocks are nodes, they hold only keys and pointers to >> 406 * other blocks >> 407 */ >> 408 struct btrfs_key_ptr { >> 409 struct btrfs_disk_key key; >> 410 __le64 blockptr; >> 411 __le64 generation; >> 412 } __attribute__ ((__packed__)); >> 413 >> 414 struct btrfs_node { >> 415 struct btrfs_header header; >> 416 struct btrfs_key_ptr ptrs[]; >> 417 } __attribute__ ((__packed__)); 50 418 51 /* 419 /* 52 * btrfs_paths remember the path taken from th 420 * btrfs_paths remember the path taken from the root down to the leaf. 53 * level 0 is always the leaf, and nodes[1...B 421 * level 0 is always the leaf, and nodes[1...BTRFS_MAX_LEVEL] will point 54 * to any other levels that are present. 422 * to any other levels that are present. 55 * 423 * 56 * The slots array records the index of the it 424 * The slots array records the index of the item or block pointer 57 * used while walking the tree. 425 * used while walking the tree. 58 */ 426 */ 59 struct btrfs_path { 427 struct btrfs_path { 60 struct extent_buffer *nodes[BTRFS_MAX_ 428 struct extent_buffer *nodes[BTRFS_MAX_LEVEL]; 61 int slots[BTRFS_MAX_LEVEL]; 429 int slots[BTRFS_MAX_LEVEL]; 62 /* if there is real range locking, thi 430 /* if there is real range locking, this locks field will change */ 63 u8 locks[BTRFS_MAX_LEVEL]; !! 431 int locks[BTRFS_MAX_LEVEL]; 64 u8 reada; !! 432 int reada; 65 /* keep some upper locks as we walk do 433 /* keep some upper locks as we walk down */ 66 u8 lowest_level; !! 434 int lowest_level; 67 435 68 /* 436 /* 69 * set by btrfs_split_item, tells sear 437 * set by btrfs_split_item, tells search_slot to keep all locks 70 * and to force calls to keep space in 438 * and to force calls to keep space in the nodes 71 */ 439 */ 72 unsigned int search_for_split:1; 440 unsigned int search_for_split:1; 73 unsigned int keep_locks:1; 441 unsigned int keep_locks:1; 74 unsigned int skip_locking:1; 442 unsigned int skip_locking:1; >> 443 unsigned int leave_spinning:1; 75 unsigned int search_commit_root:1; 444 unsigned int search_commit_root:1; 76 unsigned int need_commit_sem:1; << 77 unsigned int skip_release_on_error:1; << 78 /* << 79 * Indicate that new item (btrfs_searc << 80 * existing item and ins_len contains << 81 * header (ie. sizeof(struct btrfs_ite << 82 */ << 83 unsigned int search_for_extension:1; << 84 /* Stop search if any locks need to be << 85 unsigned int nowait:1; << 86 }; 445 }; 87 446 88 #define BTRFS_PATH_AUTO_FREE(path_name) !! 447 /* 89 struct btrfs_path *path_name __free(bt !! 448 * items in the extent btree are used to record the objectid of the >> 449 * owner of the block and the number of references >> 450 */ >> 451 >> 452 struct btrfs_extent_item { >> 453 __le64 refs; >> 454 __le64 generation; >> 455 __le64 flags; >> 456 } __attribute__ ((__packed__)); >> 457 >> 458 struct btrfs_extent_item_v0 { >> 459 __le32 refs; >> 460 } __attribute__ ((__packed__)); >> 461 >> 462 #define BTRFS_MAX_EXTENT_ITEM_SIZE(r) ((BTRFS_LEAF_DATA_SIZE(r) >> 4) - \ >> 463 sizeof(struct btrfs_item)) >> 464 >> 465 #define BTRFS_EXTENT_FLAG_DATA (1ULL << 0) >> 466 #define BTRFS_EXTENT_FLAG_TREE_BLOCK (1ULL << 1) >> 467 >> 468 /* following flags only apply to tree blocks */ >> 469 >> 470 /* use full backrefs for extent pointers in the block */ >> 471 #define BTRFS_BLOCK_FLAG_FULL_BACKREF (1ULL << 8) >> 472 >> 473 struct btrfs_tree_block_info { >> 474 struct btrfs_disk_key key; >> 475 u8 level; >> 476 } __attribute__ ((__packed__)); >> 477 >> 478 struct btrfs_extent_data_ref { >> 479 __le64 root; >> 480 __le64 objectid; >> 481 __le64 offset; >> 482 __le32 count; >> 483 } __attribute__ ((__packed__)); >> 484 >> 485 struct btrfs_shared_data_ref { >> 486 __le32 count; >> 487 } __attribute__ ((__packed__)); >> 488 >> 489 struct btrfs_extent_inline_ref { >> 490 u8 type; >> 491 __le64 offset; >> 492 } __attribute__ ((__packed__)); >> 493 >> 494 /* old style backrefs item */ >> 495 struct btrfs_extent_ref_v0 { >> 496 __le64 root; >> 497 __le64 generation; >> 498 __le64 objectid; >> 499 __le32 count; >> 500 } __attribute__ ((__packed__)); >> 501 >> 502 >> 503 /* dev extents record free space on individual devices. The owner >> 504 * field points back to the chunk allocation mapping tree that allocated >> 505 * the extent. The chunk tree uuid field is a way to double check the owner >> 506 */ >> 507 struct btrfs_dev_extent { >> 508 __le64 chunk_tree; >> 509 __le64 chunk_objectid; >> 510 __le64 chunk_offset; >> 511 __le64 length; >> 512 u8 chunk_tree_uuid[BTRFS_UUID_SIZE]; >> 513 } __attribute__ ((__packed__)); >> 514 >> 515 struct btrfs_inode_ref { >> 516 __le64 index; >> 517 __le16 name_len; >> 518 /* name goes here */ >> 519 } __attribute__ ((__packed__)); >> 520 >> 521 struct btrfs_timespec { >> 522 __le64 sec; >> 523 __le32 nsec; >> 524 } __attribute__ ((__packed__)); >> 525 >> 526 enum btrfs_compression_type { >> 527 BTRFS_COMPRESS_NONE = 0, >> 528 BTRFS_COMPRESS_ZLIB = 1, >> 529 BTRFS_COMPRESS_LAST = 2, >> 530 }; >> 531 >> 532 struct btrfs_inode_item { >> 533 /* nfs style generation number */ >> 534 __le64 generation; >> 535 /* transid that last touched this inode */ >> 536 __le64 transid; >> 537 __le64 size; >> 538 __le64 nbytes; >> 539 __le64 block_group; >> 540 __le32 nlink; >> 541 __le32 uid; >> 542 __le32 gid; >> 543 __le32 mode; >> 544 __le64 rdev; >> 545 __le64 flags; >> 546 >> 547 /* modification sequence number for NFS */ >> 548 __le64 sequence; >> 549 >> 550 /* >> 551 * a little future expansion, for more than this we can >> 552 * just grow the inode item and version it >> 553 */ >> 554 __le64 reserved[4]; >> 555 struct btrfs_timespec atime; >> 556 struct btrfs_timespec ctime; >> 557 struct btrfs_timespec mtime; >> 558 struct btrfs_timespec otime; >> 559 } __attribute__ ((__packed__)); >> 560 >> 561 struct btrfs_dir_log_item { >> 562 __le64 end; >> 563 } __attribute__ ((__packed__)); >> 564 >> 565 struct btrfs_dir_item { >> 566 struct btrfs_disk_key location; >> 567 __le64 transid; >> 568 __le16 data_len; >> 569 __le16 name_len; >> 570 u8 type; >> 571 } __attribute__ ((__packed__)); >> 572 >> 573 struct btrfs_root_item { >> 574 struct btrfs_inode_item inode; >> 575 __le64 generation; >> 576 __le64 root_dirid; >> 577 __le64 bytenr; >> 578 __le64 byte_limit; >> 579 __le64 bytes_used; >> 580 __le64 last_snapshot; >> 581 __le64 flags; >> 582 __le32 refs; >> 583 struct btrfs_disk_key drop_progress; >> 584 u8 drop_level; >> 585 u8 level; >> 586 } __attribute__ ((__packed__)); >> 587 >> 588 /* >> 589 * this is used for both forward and backward root refs >> 590 */ >> 591 struct btrfs_root_ref { >> 592 __le64 dirid; >> 593 __le64 sequence; >> 594 __le16 name_len; >> 595 } __attribute__ ((__packed__)); >> 596 >> 597 #define BTRFS_FILE_EXTENT_INLINE 0 >> 598 #define BTRFS_FILE_EXTENT_REG 1 >> 599 #define BTRFS_FILE_EXTENT_PREALLOC 2 >> 600 >> 601 struct btrfs_file_extent_item { >> 602 /* >> 603 * transaction id that created this extent >> 604 */ >> 605 __le64 generation; >> 606 /* >> 607 * max number of bytes to hold this extent in ram >> 608 * when we split a compressed extent we can't know how big >> 609 * each of the resulting pieces will be. So, this is >> 610 * an upper limit on the size of the extent in ram instead of >> 611 * an exact limit. >> 612 */ >> 613 __le64 ram_bytes; >> 614 >> 615 /* >> 616 * 32 bits for the various ways we might encode the data, >> 617 * including compression and encryption. If any of these >> 618 * are set to something a given disk format doesn't understand >> 619 * it is treated like an incompat flag for reading and writing, >> 620 * but not for stat. >> 621 */ >> 622 u8 compression; >> 623 u8 encryption; >> 624 __le16 other_encoding; /* spare for later use */ >> 625 >> 626 /* are we inline data or a real extent? */ >> 627 u8 type; >> 628 >> 629 /* >> 630 * disk space consumed by the extent, checksum blocks are included >> 631 * in these numbers >> 632 */ >> 633 __le64 disk_bytenr; >> 634 __le64 disk_num_bytes; >> 635 /* >> 636 * the logical offset in file blocks (no csums) >> 637 * this extent record is for. This allows a file extent to point >> 638 * into the middle of an existing extent on disk, sharing it >> 639 * between two snapshots (useful if some bytes in the middle of the >> 640 * extent have changed >> 641 */ >> 642 __le64 offset; >> 643 /* >> 644 * the logical number of file blocks (no csums included). This >> 645 * always reflects the size uncompressed and without encoding. >> 646 */ >> 647 __le64 num_bytes; >> 648 >> 649 } __attribute__ ((__packed__)); >> 650 >> 651 struct btrfs_csum_item { >> 652 u8 csum; >> 653 } __attribute__ ((__packed__)); >> 654 >> 655 /* different types of block groups (and chunks) */ >> 656 #define BTRFS_BLOCK_GROUP_DATA (1 << 0) >> 657 #define BTRFS_BLOCK_GROUP_SYSTEM (1 << 1) >> 658 #define BTRFS_BLOCK_GROUP_METADATA (1 << 2) >> 659 #define BTRFS_BLOCK_GROUP_RAID0 (1 << 3) >> 660 #define BTRFS_BLOCK_GROUP_RAID1 (1 << 4) >> 661 #define BTRFS_BLOCK_GROUP_DUP (1 << 5) >> 662 #define BTRFS_BLOCK_GROUP_RAID10 (1 << 6) >> 663 >> 664 struct btrfs_block_group_item { >> 665 __le64 used; >> 666 __le64 chunk_objectid; >> 667 __le64 flags; >> 668 } __attribute__ ((__packed__)); >> 669 >> 670 struct btrfs_space_info { >> 671 u64 flags; >> 672 >> 673 u64 total_bytes; /* total bytes in the space */ >> 674 u64 bytes_used; /* total bytes used on disk */ >> 675 u64 bytes_pinned; /* total bytes pinned, will be freed when the >> 676 transaction finishes */ >> 677 u64 bytes_reserved; /* total bytes the allocator has reserved for >> 678 current allocations */ >> 679 u64 bytes_readonly; /* total bytes that are read only */ >> 680 u64 bytes_super; /* total bytes reserved for the super blocks */ >> 681 u64 bytes_root; /* the number of bytes needed to commit a >> 682 transaction */ >> 683 u64 bytes_may_use; /* number of bytes that may be used for >> 684 delalloc/allocations */ >> 685 u64 bytes_delalloc; /* number of bytes currently reserved for >> 686 delayed allocation */ >> 687 >> 688 int full; /* indicates that we cannot allocate any more >> 689 chunks for this space */ >> 690 int force_alloc; /* set if we need to force a chunk alloc for >> 691 this space */ >> 692 int force_delalloc; /* make people start doing filemap_flush until >> 693 we're under a threshold */ >> 694 >> 695 struct list_head list; >> 696 >> 697 /* for controlling how we free up space for allocations */ >> 698 wait_queue_head_t allocate_wait; >> 699 wait_queue_head_t flush_wait; >> 700 int allocating_chunk; >> 701 int flushing; >> 702 >> 703 /* for block groups in our same type */ >> 704 struct list_head block_groups; >> 705 spinlock_t lock; >> 706 struct rw_semaphore groups_sem; >> 707 atomic_t caching_threads; >> 708 }; 90 709 91 /* 710 /* 92 * The state of btrfs root !! 711 * free clusters are used to claim free space in relatively large chunks, >> 712 * allowing us to do less seeky writes. They are used for all metadata >> 713 * allocations and data allocations in ssd mode. 93 */ 714 */ 94 enum { !! 715 struct btrfs_free_cluster { >> 716 spinlock_t lock; >> 717 spinlock_t refill_lock; >> 718 struct rb_root root; >> 719 >> 720 /* largest extent in this cluster */ >> 721 u64 max_size; >> 722 >> 723 /* first extent starting offset */ >> 724 u64 window_start; >> 725 >> 726 /* if this cluster simply points at a bitmap in the block group */ >> 727 bool points_to_bitmap; >> 728 >> 729 struct btrfs_block_group_cache *block_group; >> 730 /* >> 731 * when a cluster is allocated from a block group, we put the >> 732 * cluster onto a list in the block group so that it can >> 733 * be freed before the block group is freed. >> 734 */ >> 735 struct list_head block_group_list; >> 736 }; >> 737 >> 738 enum btrfs_caching_type { >> 739 BTRFS_CACHE_NO = 0, >> 740 BTRFS_CACHE_STARTED = 1, >> 741 BTRFS_CACHE_FINISHED = 2, >> 742 }; >> 743 >> 744 struct btrfs_caching_control { >> 745 struct list_head list; >> 746 struct mutex mutex; >> 747 wait_queue_head_t wait; >> 748 struct btrfs_block_group_cache *block_group; >> 749 u64 progress; >> 750 atomic_t count; >> 751 }; >> 752 >> 753 struct btrfs_block_group_cache { >> 754 struct btrfs_key key; >> 755 struct btrfs_block_group_item item; >> 756 struct btrfs_fs_info *fs_info; >> 757 spinlock_t lock; >> 758 u64 pinned; >> 759 u64 reserved; >> 760 u64 bytes_super; >> 761 u64 flags; >> 762 u64 sectorsize; >> 763 int extents_thresh; >> 764 int free_extents; >> 765 int total_bitmaps; >> 766 int ro; >> 767 int dirty; >> 768 >> 769 /* cache tracking stuff */ >> 770 int cached; >> 771 struct btrfs_caching_control *caching_ctl; >> 772 u64 last_byte_to_unpin; >> 773 >> 774 struct btrfs_space_info *space_info; >> 775 >> 776 /* free space cache stuff */ >> 777 spinlock_t tree_lock; >> 778 struct rb_root free_space_offset; >> 779 u64 free_space; >> 780 >> 781 /* block group cache stuff */ >> 782 struct rb_node cache_node; >> 783 >> 784 /* for block groups in the same raid type */ >> 785 struct list_head list; >> 786 >> 787 /* usage count */ >> 788 atomic_t count; >> 789 >> 790 /* List of struct btrfs_free_clusters for this block group. >> 791 * Today it will only have one thing on it, but that may change >> 792 */ >> 793 struct list_head cluster_list; >> 794 }; >> 795 >> 796 struct reloc_control; >> 797 struct btrfs_device; >> 798 struct btrfs_fs_devices; >> 799 struct btrfs_fs_info { >> 800 u8 fsid[BTRFS_FSID_SIZE]; >> 801 u8 chunk_tree_uuid[BTRFS_UUID_SIZE]; >> 802 struct btrfs_root *extent_root; >> 803 struct btrfs_root *tree_root; >> 804 struct btrfs_root *chunk_root; >> 805 struct btrfs_root *dev_root; >> 806 struct btrfs_root *fs_root; >> 807 struct btrfs_root *csum_root; >> 808 >> 809 /* the log root tree is a directory of all the other log roots */ >> 810 struct btrfs_root *log_root_tree; >> 811 >> 812 spinlock_t fs_roots_radix_lock; >> 813 struct radix_tree_root fs_roots_radix; >> 814 >> 815 /* block group cache stuff */ >> 816 spinlock_t block_group_cache_lock; >> 817 struct rb_root block_group_cache_tree; >> 818 >> 819 struct extent_io_tree freed_extents[2]; >> 820 struct extent_io_tree *pinned_extents; >> 821 >> 822 /* logical->physical extent mapping */ >> 823 struct btrfs_mapping_tree mapping_tree; >> 824 >> 825 u64 generation; >> 826 u64 last_trans_committed; >> 827 >> 828 /* >> 829 * this is updated to the current trans every time a full commit >> 830 * is required instead of the faster short fsync log commits >> 831 */ >> 832 u64 last_trans_log_full_commit; >> 833 u64 open_ioctl_trans; >> 834 unsigned long mount_opt; >> 835 u64 max_extent; >> 836 u64 max_inline; >> 837 u64 alloc_start; >> 838 struct btrfs_transaction *running_transaction; >> 839 wait_queue_head_t transaction_throttle; >> 840 wait_queue_head_t transaction_wait; >> 841 wait_queue_head_t async_submit_wait; >> 842 >> 843 struct btrfs_super_block super_copy; >> 844 struct btrfs_super_block super_for_commit; >> 845 struct block_device *__bdev; >> 846 struct super_block *sb; >> 847 struct inode *btree_inode; >> 848 struct backing_dev_info bdi; >> 849 struct mutex trans_mutex; >> 850 struct mutex tree_log_mutex; >> 851 struct mutex transaction_kthread_mutex; >> 852 struct mutex cleaner_mutex; >> 853 struct mutex chunk_mutex; >> 854 struct mutex volume_mutex; >> 855 /* >> 856 * this protects the ordered operations list only while we are >> 857 * processing all of the entries on it. This way we make >> 858 * sure the commit code doesn't find the list temporarily empty >> 859 * because another function happens to be doing non-waiting preflush >> 860 * before jumping into the main commit. >> 861 */ >> 862 struct mutex ordered_operations_mutex; >> 863 struct rw_semaphore extent_commit_sem; >> 864 >> 865 struct rw_semaphore cleanup_work_sem; >> 866 >> 867 struct rw_semaphore subvol_sem; >> 868 struct srcu_struct subvol_srcu; >> 869 >> 870 struct list_head trans_list; >> 871 struct list_head hashers; >> 872 struct list_head dead_roots; >> 873 struct list_head caching_block_groups; >> 874 >> 875 spinlock_t delayed_iput_lock; >> 876 struct list_head delayed_iputs; >> 877 >> 878 atomic_t nr_async_submits; >> 879 atomic_t async_submit_draining; >> 880 atomic_t nr_async_bios; >> 881 atomic_t async_delalloc_pages; >> 882 95 /* 883 /* 96 * btrfs_record_root_in_trans is a mul !! 884 * this is used by the balancing code to wait for all the pending 97 * with the balancing code. But the !! 885 * ordered extents 98 * first time the root is added to eac << 99 * is used to tell us when more checks << 100 */ 886 */ 101 BTRFS_ROOT_IN_TRANS_SETUP, !! 887 spinlock_t ordered_extent_lock; 102 888 103 /* 889 /* 104 * Set if tree blocks of this root can !! 890 * all of the data=ordered extents pending writeback 105 * Only subvolume trees and their relo !! 891 * these can span multiple transactions and basically include 106 * Conflicts with TRACK_DIRTY bit. !! 892 * every dirty data page that isn't from nodatacow 107 * !! 893 */ 108 * This affects two things: !! 894 struct list_head ordered_extents; 109 * !! 895 110 * - How balance works !! 896 /* 111 * For shareable roots, we need to u !! 897 * all of the inodes that have delalloc bytes. It is possible for 112 * replacement for balance, and need !! 898 * this list to be empty even when there is still dirty data=ordered 113 * snapshot creation to handle them. !! 899 * extents waiting to finish IO. 114 * !! 900 */ 115 * While for non-shareable trees, we !! 901 struct list_head delalloc_inodes; 116 * with COW. !! 902 117 * !! 903 /* 118 * - How dirty roots are tracked !! 904 * special rename and truncate targets that must be on disk before 119 * For shareable roots, btrfs_record !! 905 * we're allowed to commit. This is basically the ext3 style 120 * track them, while non-subvolume r !! 906 * data=ordered list. 121 * don't need to set this manually. !! 907 */ 122 */ !! 908 struct list_head ordered_operations; 123 BTRFS_ROOT_SHAREABLE, << 124 BTRFS_ROOT_TRACK_DIRTY, << 125 BTRFS_ROOT_IN_RADIX, << 126 BTRFS_ROOT_ORPHAN_ITEM_INSERTED, << 127 BTRFS_ROOT_DEFRAG_RUNNING, << 128 BTRFS_ROOT_FORCE_COW, << 129 BTRFS_ROOT_MULTI_LOG_TASKS, << 130 BTRFS_ROOT_DIRTY, << 131 BTRFS_ROOT_DELETING, << 132 909 133 /* 910 /* 134 * Reloc tree is orphan, only kept her !! 911 * there is a pool of worker threads for checksumming during writes >> 912 * and a pool for checksumming after reads. This is because readers >> 913 * can run with FS locks held, and the writers may be waiting for >> 914 * those locks. We don't want ordering in the pending list to cause >> 915 * deadlocks, and so the two are serviced separately. 135 * 916 * 136 * Set for the subvolume tree owning t !! 917 * A third pool does submit_bio to avoid deadlocking with the other >> 918 * two 137 */ 919 */ 138 BTRFS_ROOT_DEAD_RELOC_TREE, !! 920 struct btrfs_workers generic_worker; 139 /* Mark dead root stored on device who !! 921 struct btrfs_workers workers; 140 BTRFS_ROOT_DEAD_TREE, !! 922 struct btrfs_workers delalloc_workers; 141 /* The root has a log tree. Used for s !! 923 struct btrfs_workers endio_workers; 142 BTRFS_ROOT_HAS_LOG_TREE, !! 924 struct btrfs_workers endio_meta_workers; 143 /* Qgroup flushing is in progress */ !! 925 struct btrfs_workers endio_meta_write_workers; 144 BTRFS_ROOT_QGROUP_FLUSHING, !! 926 struct btrfs_workers endio_write_workers; 145 /* We started the orphan cleanup for t !! 927 struct btrfs_workers submit_workers; 146 BTRFS_ROOT_ORPHAN_CLEANUP, !! 928 struct btrfs_workers enospc_workers; 147 /* This root has a drop operation that !! 929 /* 148 BTRFS_ROOT_UNFINISHED_DROP, !! 930 * fixup workers take dirty pages that didn't properly go through 149 /* This reloc root needs to have its b !! 931 * the cow mechanism and make them safe to write. It happens 150 BTRFS_ROOT_RESET_LOCKDEP_CLASS, !! 932 * for the sys_munmap function call path 151 }; !! 933 */ >> 934 struct btrfs_workers fixup_workers; >> 935 struct task_struct *transaction_kthread; >> 936 struct task_struct *cleaner_kthread; >> 937 int thread_pool_size; 152 938 153 /* !! 939 struct kobject super_kobj; 154 * Record swapped tree blocks of a subvolume t !! 940 struct completion kobj_unregister; 155 * code. For detail check comment in fs/btrfs/ !! 941 int do_barriers; 156 */ !! 942 int closing; 157 struct btrfs_qgroup_swapped_blocks { !! 943 int log_root_recovering; 158 spinlock_t lock; !! 944 159 /* RM_EMPTY_ROOT() of above blocks[] * !! 945 u64 total_pinned; 160 bool swapped; !! 946 161 struct rb_root blocks[BTRFS_MAX_LEVEL] !! 947 /* protected by the delalloc lock, used to keep from writing >> 948 * metadata until there is a nice batch >> 949 */ >> 950 u64 dirty_metadata_bytes; >> 951 struct list_head dirty_cowonly_roots; >> 952 >> 953 struct btrfs_fs_devices *fs_devices; >> 954 >> 955 /* >> 956 * the space_info list is almost entirely read only. It only changes >> 957 * when we add a new raid type to the FS, and that happens >> 958 * very rarely. RCU is used to protect it. >> 959 */ >> 960 struct list_head space_info; >> 961 >> 962 struct reloc_control *reloc_ctl; >> 963 >> 964 spinlock_t delalloc_lock; >> 965 spinlock_t new_trans_lock; >> 966 u64 delalloc_bytes; >> 967 >> 968 /* data_alloc_cluster is only used in ssd mode */ >> 969 struct btrfs_free_cluster data_alloc_cluster; >> 970 >> 971 /* all metadata allocations go through this cluster */ >> 972 struct btrfs_free_cluster meta_alloc_cluster; >> 973 >> 974 spinlock_t ref_cache_lock; >> 975 u64 total_ref_cache_size; >> 976 >> 977 u64 avail_data_alloc_bits; >> 978 u64 avail_metadata_alloc_bits; >> 979 u64 avail_system_alloc_bits; >> 980 u64 data_alloc_profile; >> 981 u64 metadata_alloc_profile; >> 982 u64 system_alloc_profile; >> 983 >> 984 unsigned data_chunk_allocations; >> 985 unsigned metadata_ratio; >> 986 >> 987 void *bdev_holder; 162 }; 988 }; 163 989 164 /* 990 /* 165 * in ram representation of the tree. extent_ 991 * in ram representation of the tree. extent_root is used for all allocations 166 * and for the extent tree extent_root root. 992 * and for the extent tree extent_root root. 167 */ 993 */ 168 struct btrfs_root { 994 struct btrfs_root { 169 struct rb_node rb_node; << 170 << 171 struct extent_buffer *node; 995 struct extent_buffer *node; 172 996 >> 997 /* the node lock is held while changing the node pointer */ >> 998 spinlock_t node_lock; >> 999 173 struct extent_buffer *commit_root; 1000 struct extent_buffer *commit_root; 174 struct btrfs_root *log_root; 1001 struct btrfs_root *log_root; 175 struct btrfs_root *reloc_root; 1002 struct btrfs_root *reloc_root; 176 1003 177 unsigned long state; << 178 struct btrfs_root_item root_item; 1004 struct btrfs_root_item root_item; 179 struct btrfs_key root_key; 1005 struct btrfs_key root_key; 180 struct btrfs_fs_info *fs_info; 1006 struct btrfs_fs_info *fs_info; 181 struct extent_io_tree dirty_log_pages; 1007 struct extent_io_tree dirty_log_pages; 182 1008 >> 1009 struct kobject root_kobj; >> 1010 struct completion kobj_unregister; 183 struct mutex objectid_mutex; 1011 struct mutex objectid_mutex; 184 1012 185 spinlock_t accounting_lock; << 186 struct btrfs_block_rsv *block_rsv; << 187 << 188 struct mutex log_mutex; 1013 struct mutex log_mutex; 189 wait_queue_head_t log_writer_wait; 1014 wait_queue_head_t log_writer_wait; 190 wait_queue_head_t log_commit_wait[2]; 1015 wait_queue_head_t log_commit_wait[2]; 191 struct list_head log_ctxs[2]; << 192 /* Used only for log trees of subvolum << 193 atomic_t log_writers; 1016 atomic_t log_writers; 194 atomic_t log_commit[2]; 1017 atomic_t log_commit[2]; 195 /* Used only for log trees of subvolum !! 1018 unsigned long log_transid; 196 atomic_t log_batch; !! 1019 unsigned long last_log_commit; 197 /* !! 1020 unsigned long log_batch; 198 * Protected by the 'log_mutex' lock b << 199 * that lock to avoid unnecessary lock << 200 * should be read using btrfs_get_root << 201 * log tree in which case it can be di << 202 * field should always use btrfs_set_r << 203 * trees where the field can be update << 204 */ << 205 int log_transid; << 206 /* No matter the commit succeeds or no << 207 int log_transid_committed; << 208 /* << 209 * Just be updated when the commit suc << 210 * btrfs_get_root_last_log_commit() an << 211 * to access this field. << 212 */ << 213 int last_log_commit; << 214 pid_t log_start_pid; 1021 pid_t log_start_pid; >> 1022 bool log_multiple_pids; 215 1023 >> 1024 u64 objectid; 216 u64 last_trans; 1025 u64 last_trans; 217 1026 218 u64 free_objectid; !! 1027 /* data allocations are done in sectorsize units */ >> 1028 u32 sectorsize; 219 1029 >> 1030 /* node allocations are done in nodesize units */ >> 1031 u32 nodesize; >> 1032 >> 1033 /* leaf allocations are done in leafsize units */ >> 1034 u32 leafsize; >> 1035 >> 1036 u32 stripesize; >> 1037 >> 1038 u32 type; >> 1039 >> 1040 u64 highest_objectid; >> 1041 int ref_cows; >> 1042 int track_dirty; >> 1043 int in_radix; >> 1044 int clean_orphans; >> 1045 >> 1046 u64 defrag_trans_start; 220 struct btrfs_key defrag_progress; 1047 struct btrfs_key defrag_progress; 221 struct btrfs_key defrag_max; 1048 struct btrfs_key defrag_max; >> 1049 int defrag_running; >> 1050 char *name; >> 1051 int in_sysfs; 222 1052 223 /* The dirty list is only used by non- !! 1053 /* the dirty list is only used by non-reference counted roots */ 224 struct list_head dirty_list; 1054 struct list_head dirty_list; 225 1055 226 struct list_head root_list; 1056 struct list_head root_list; 227 1057 228 /* !! 1058 spinlock_t list_lock; 229 * Xarray that keeps track of in-memor !! 1059 struct list_head orphan_list; 230 * @inode_lock. !! 1060 231 */ !! 1061 spinlock_t inode_lock; 232 struct xarray inodes; !! 1062 /* red-black tree that keeps track of in-memory inodes */ >> 1063 struct rb_root inode_tree; 233 1064 234 /* << 235 * Xarray that keeps track of delayed << 236 * by @inode_lock. << 237 */ << 238 struct xarray delayed_nodes; << 239 /* 1065 /* 240 * right now this just gets used so th 1066 * right now this just gets used so that a root has its own devid 241 * for stat. It may be used for more 1067 * for stat. It may be used for more later 242 */ 1068 */ 243 dev_t anon_dev; !! 1069 struct super_block anon_super; >> 1070 }; 244 1071 245 spinlock_t root_item_lock; !! 1072 /* 246 refcount_t refs; !! 1073 * inode items have the data typically returned from stat and store other >> 1074 * info about object characteristics. There is one for every file and dir in >> 1075 * the FS >> 1076 */ >> 1077 #define BTRFS_INODE_ITEM_KEY 1 >> 1078 #define BTRFS_INODE_REF_KEY 12 >> 1079 #define BTRFS_XATTR_ITEM_KEY 24 >> 1080 #define BTRFS_ORPHAN_ITEM_KEY 48 >> 1081 /* reserve 2-15 close to the inode for later flexibility */ 247 1082 248 struct mutex delalloc_mutex; !! 1083 /* 249 spinlock_t delalloc_lock; !! 1084 * dir items are the name -> inode pointers in a directory. There is one 250 /* !! 1085 * for every name in a directory. 251 * all of the inodes that have delallo !! 1086 */ 252 * this list to be empty even when the !! 1087 #define BTRFS_DIR_LOG_ITEM_KEY 60 253 * extents waiting to finish IO. !! 1088 #define BTRFS_DIR_LOG_INDEX_KEY 72 254 */ !! 1089 #define BTRFS_DIR_ITEM_KEY 84 255 struct list_head delalloc_inodes; !! 1090 #define BTRFS_DIR_INDEX_KEY 96 256 struct list_head delalloc_root; !! 1091 /* 257 u64 nr_delalloc_inodes; !! 1092 * extent data is for file data >> 1093 */ >> 1094 #define BTRFS_EXTENT_DATA_KEY 108 258 1095 259 struct mutex ordered_extent_mutex; !! 1096 /* 260 /* !! 1097 * extent csums are stored in a separate tree and hold csums for 261 * this is used by the balancing code !! 1098 * an entire extent on disk. 262 * ordered extents !! 1099 */ 263 */ !! 1100 #define BTRFS_EXTENT_CSUM_KEY 128 264 spinlock_t ordered_extent_lock; << 265 1101 266 /* !! 1102 /* 267 * all of the data=ordered extents pen !! 1103 * root items point to tree roots. They are typically in the root 268 * these can span multiple transaction !! 1104 * tree used by the super block to find all the other trees 269 * every dirty data page that isn't fr !! 1105 */ 270 */ !! 1106 #define BTRFS_ROOT_ITEM_KEY 132 271 struct list_head ordered_extents; << 272 struct list_head ordered_root; << 273 u64 nr_ordered_extents; << 274 1107 275 /* !! 1108 /* 276 * Not empty if this subvolume root ha !! 1109 * root backrefs tie subvols and snapshots to the directory entries that 277 * (relocation) !! 1110 * reference them 278 * !! 1111 */ 279 * Will be used by reloc_control::dirt !! 1112 #define BTRFS_ROOT_BACKREF_KEY 144 280 */ << 281 struct list_head reloc_dirty_list; << 282 1113 283 /* !! 1114 /* 284 * Number of currently running SEND io !! 1115 * root refs make a fast index for listing all of the snapshots and 285 * manipulation with the read-only sta !! 1116 * subvolumes referenced by a given root. They point directly to the 286 */ !! 1117 * directory item in the root that references the subvol 287 int send_in_progress; !! 1118 */ 288 /* !! 1119 #define BTRFS_ROOT_REF_KEY 156 289 * Number of currently running dedupli << 290 * destination inode belonging to this << 291 * root_item_lock. << 292 */ << 293 int dedupe_in_progress; << 294 /* For exclusion of snapshot creation << 295 struct btrfs_drew_lock snapshot_lock; << 296 1120 297 atomic_t snapshot_force_cow; !! 1121 /* >> 1122 * extent items are in the extent map tree. These record which blocks >> 1123 * are used, and how many references there are to each block >> 1124 */ >> 1125 #define BTRFS_EXTENT_ITEM_KEY 168 298 1126 299 /* For qgroup metadata reserved space !! 1127 #define BTRFS_TREE_BLOCK_REF_KEY 176 300 spinlock_t qgroup_meta_rsv_lock; << 301 u64 qgroup_meta_rsv_pertrans; << 302 u64 qgroup_meta_rsv_prealloc; << 303 wait_queue_head_t qgroup_flush_wait; << 304 1128 305 /* Number of active swapfiles */ !! 1129 #define BTRFS_EXTENT_DATA_REF_KEY 178 306 atomic_t nr_swapfiles; << 307 1130 308 /* Record pairs of swapped blocks for !! 1131 #define BTRFS_EXTENT_REF_V0_KEY 180 309 struct btrfs_qgroup_swapped_blocks swa << 310 1132 311 /* Used only by log trees, when loggin !! 1133 #define BTRFS_SHARED_BLOCK_REF_KEY 182 312 struct extent_io_tree log_csum_range; << 313 1134 314 /* Used in simple quotas, track root d !! 1135 #define BTRFS_SHARED_DATA_REF_KEY 184 315 u64 relocation_src_root; << 316 1136 317 #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS !! 1137 /* 318 u64 alloc_bytenr; !! 1138 * block groups give us hints into the extent allocation trees. Which 319 #endif !! 1139 * blocks are free etc etc >> 1140 */ >> 1141 #define BTRFS_BLOCK_GROUP_ITEM_KEY 192 >> 1142 >> 1143 #define BTRFS_DEV_EXTENT_KEY 204 >> 1144 #define BTRFS_DEV_ITEM_KEY 216 >> 1145 #define BTRFS_CHUNK_ITEM_KEY 228 320 1146 321 #ifdef CONFIG_BTRFS_DEBUG !! 1147 /* 322 struct list_head leak_list; !! 1148 * string items are for debugging. They just store a short string of >> 1149 * data in the FS >> 1150 */ >> 1151 #define BTRFS_STRING_ITEM_KEY 253 >> 1152 >> 1153 #define BTRFS_MOUNT_NODATASUM (1 << 0) >> 1154 #define BTRFS_MOUNT_NODATACOW (1 << 1) >> 1155 #define BTRFS_MOUNT_NOBARRIER (1 << 2) >> 1156 #define BTRFS_MOUNT_SSD (1 << 3) >> 1157 #define BTRFS_MOUNT_DEGRADED (1 << 4) >> 1158 #define BTRFS_MOUNT_COMPRESS (1 << 5) >> 1159 #define BTRFS_MOUNT_NOTREELOG (1 << 6) >> 1160 #define BTRFS_MOUNT_FLUSHONCOMMIT (1 << 7) >> 1161 #define BTRFS_MOUNT_SSD_SPREAD (1 << 8) >> 1162 #define BTRFS_MOUNT_NOSSD (1 << 9) >> 1163 #define BTRFS_MOUNT_DISCARD (1 << 10) >> 1164 >> 1165 #define btrfs_clear_opt(o, opt) ((o) &= ~BTRFS_MOUNT_##opt) >> 1166 #define btrfs_set_opt(o, opt) ((o) |= BTRFS_MOUNT_##opt) >> 1167 #define btrfs_test_opt(root, opt) ((root)->fs_info->mount_opt & \ >> 1168 BTRFS_MOUNT_##opt) >> 1169 /* >> 1170 * Inode flags >> 1171 */ >> 1172 #define BTRFS_INODE_NODATASUM (1 << 0) >> 1173 #define BTRFS_INODE_NODATACOW (1 << 1) >> 1174 #define BTRFS_INODE_READONLY (1 << 2) >> 1175 #define BTRFS_INODE_NOCOMPRESS (1 << 3) >> 1176 #define BTRFS_INODE_PREALLOC (1 << 4) >> 1177 #define BTRFS_INODE_SYNC (1 << 5) >> 1178 #define BTRFS_INODE_IMMUTABLE (1 << 6) >> 1179 #define BTRFS_INODE_APPEND (1 << 7) >> 1180 #define BTRFS_INODE_NODUMP (1 << 8) >> 1181 #define BTRFS_INODE_NOATIME (1 << 9) >> 1182 #define BTRFS_INODE_DIRSYNC (1 << 10) >> 1183 >> 1184 >> 1185 #define BTRFS_INODE_ROOT_ITEM_INIT (1 << 31) >> 1186 >> 1187 /* some macros to generate set/get funcs for the struct fields. This >> 1188 * assumes there is a lefoo_to_cpu for every type, so lets make a simple >> 1189 * one for u8: >> 1190 */ >> 1191 #define le8_to_cpu(v) (v) >> 1192 #define cpu_to_le8(v) (v) >> 1193 #define __le8 u8 >> 1194 >> 1195 #define read_eb_member(eb, ptr, type, member, result) ( \ >> 1196 read_extent_buffer(eb, (char *)(result), \ >> 1197 ((unsigned long)(ptr)) + \ >> 1198 offsetof(type, member), \ >> 1199 sizeof(((type *)0)->member))) >> 1200 >> 1201 #define write_eb_member(eb, ptr, type, member, result) ( \ >> 1202 write_extent_buffer(eb, (char *)(result), \ >> 1203 ((unsigned long)(ptr)) + \ >> 1204 offsetof(type, member), \ >> 1205 sizeof(((type *)0)->member))) >> 1206 >> 1207 #ifndef BTRFS_SETGET_FUNCS >> 1208 #define BTRFS_SETGET_FUNCS(name, type, member, bits) \ >> 1209 u##bits btrfs_##name(struct extent_buffer *eb, type *s); \ >> 1210 void btrfs_set_##name(struct extent_buffer *eb, type *s, u##bits val); 323 #endif 1211 #endif 324 }; << 325 1212 326 static inline bool btrfs_root_readonly(const s !! 1213 #define BTRFS_SETGET_HEADER_FUNCS(name, type, member, bits) \ >> 1214 static inline u##bits btrfs_##name(struct extent_buffer *eb) \ >> 1215 { \ >> 1216 type *p = kmap_atomic(eb->first_page, KM_USER0); \ >> 1217 u##bits res = le##bits##_to_cpu(p->member); \ >> 1218 kunmap_atomic(p, KM_USER0); \ >> 1219 return res; \ >> 1220 } \ >> 1221 static inline void btrfs_set_##name(struct extent_buffer *eb, \ >> 1222 u##bits val) \ >> 1223 { \ >> 1224 type *p = kmap_atomic(eb->first_page, KM_USER0); \ >> 1225 p->member = cpu_to_le##bits(val); \ >> 1226 kunmap_atomic(p, KM_USER0); \ >> 1227 } >> 1228 >> 1229 #define BTRFS_SETGET_STACK_FUNCS(name, type, member, bits) \ >> 1230 static inline u##bits btrfs_##name(type *s) \ >> 1231 { \ >> 1232 return le##bits##_to_cpu(s->member); \ >> 1233 } \ >> 1234 static inline void btrfs_set_##name(type *s, u##bits val) \ >> 1235 { \ >> 1236 s->member = cpu_to_le##bits(val); \ >> 1237 } >> 1238 >> 1239 BTRFS_SETGET_FUNCS(device_type, struct btrfs_dev_item, type, 64); >> 1240 BTRFS_SETGET_FUNCS(device_total_bytes, struct btrfs_dev_item, total_bytes, 64); >> 1241 BTRFS_SETGET_FUNCS(device_bytes_used, struct btrfs_dev_item, bytes_used, 64); >> 1242 BTRFS_SETGET_FUNCS(device_io_align, struct btrfs_dev_item, io_align, 32); >> 1243 BTRFS_SETGET_FUNCS(device_io_width, struct btrfs_dev_item, io_width, 32); >> 1244 BTRFS_SETGET_FUNCS(device_start_offset, struct btrfs_dev_item, >> 1245 start_offset, 64); >> 1246 BTRFS_SETGET_FUNCS(device_sector_size, struct btrfs_dev_item, sector_size, 32); >> 1247 BTRFS_SETGET_FUNCS(device_id, struct btrfs_dev_item, devid, 64); >> 1248 BTRFS_SETGET_FUNCS(device_group, struct btrfs_dev_item, dev_group, 32); >> 1249 BTRFS_SETGET_FUNCS(device_seek_speed, struct btrfs_dev_item, seek_speed, 8); >> 1250 BTRFS_SETGET_FUNCS(device_bandwidth, struct btrfs_dev_item, bandwidth, 8); >> 1251 BTRFS_SETGET_FUNCS(device_generation, struct btrfs_dev_item, generation, 64); >> 1252 >> 1253 BTRFS_SETGET_STACK_FUNCS(stack_device_type, struct btrfs_dev_item, type, 64); >> 1254 BTRFS_SETGET_STACK_FUNCS(stack_device_total_bytes, struct btrfs_dev_item, >> 1255 total_bytes, 64); >> 1256 BTRFS_SETGET_STACK_FUNCS(stack_device_bytes_used, struct btrfs_dev_item, >> 1257 bytes_used, 64); >> 1258 BTRFS_SETGET_STACK_FUNCS(stack_device_io_align, struct btrfs_dev_item, >> 1259 io_align, 32); >> 1260 BTRFS_SETGET_STACK_FUNCS(stack_device_io_width, struct btrfs_dev_item, >> 1261 io_width, 32); >> 1262 BTRFS_SETGET_STACK_FUNCS(stack_device_sector_size, struct btrfs_dev_item, >> 1263 sector_size, 32); >> 1264 BTRFS_SETGET_STACK_FUNCS(stack_device_id, struct btrfs_dev_item, devid, 64); >> 1265 BTRFS_SETGET_STACK_FUNCS(stack_device_group, struct btrfs_dev_item, >> 1266 dev_group, 32); >> 1267 BTRFS_SETGET_STACK_FUNCS(stack_device_seek_speed, struct btrfs_dev_item, >> 1268 seek_speed, 8); >> 1269 BTRFS_SETGET_STACK_FUNCS(stack_device_bandwidth, struct btrfs_dev_item, >> 1270 bandwidth, 8); >> 1271 BTRFS_SETGET_STACK_FUNCS(stack_device_generation, struct btrfs_dev_item, >> 1272 generation, 64); >> 1273 >> 1274 static inline char *btrfs_device_uuid(struct btrfs_dev_item *d) >> 1275 { >> 1276 return (char *)d + offsetof(struct btrfs_dev_item, uuid); >> 1277 } >> 1278 >> 1279 static inline char *btrfs_device_fsid(struct btrfs_dev_item *d) >> 1280 { >> 1281 return (char *)d + offsetof(struct btrfs_dev_item, fsid); >> 1282 } >> 1283 >> 1284 BTRFS_SETGET_FUNCS(chunk_length, struct btrfs_chunk, length, 64); >> 1285 BTRFS_SETGET_FUNCS(chunk_owner, struct btrfs_chunk, owner, 64); >> 1286 BTRFS_SETGET_FUNCS(chunk_stripe_len, struct btrfs_chunk, stripe_len, 64); >> 1287 BTRFS_SETGET_FUNCS(chunk_io_align, struct btrfs_chunk, io_align, 32); >> 1288 BTRFS_SETGET_FUNCS(chunk_io_width, struct btrfs_chunk, io_width, 32); >> 1289 BTRFS_SETGET_FUNCS(chunk_sector_size, struct btrfs_chunk, sector_size, 32); >> 1290 BTRFS_SETGET_FUNCS(chunk_type, struct btrfs_chunk, type, 64); >> 1291 BTRFS_SETGET_FUNCS(chunk_num_stripes, struct btrfs_chunk, num_stripes, 16); >> 1292 BTRFS_SETGET_FUNCS(chunk_sub_stripes, struct btrfs_chunk, sub_stripes, 16); >> 1293 BTRFS_SETGET_FUNCS(stripe_devid, struct btrfs_stripe, devid, 64); >> 1294 BTRFS_SETGET_FUNCS(stripe_offset, struct btrfs_stripe, offset, 64); >> 1295 >> 1296 static inline char *btrfs_stripe_dev_uuid(struct btrfs_stripe *s) >> 1297 { >> 1298 return (char *)s + offsetof(struct btrfs_stripe, dev_uuid); >> 1299 } >> 1300 >> 1301 BTRFS_SETGET_STACK_FUNCS(stack_chunk_length, struct btrfs_chunk, length, 64); >> 1302 BTRFS_SETGET_STACK_FUNCS(stack_chunk_owner, struct btrfs_chunk, owner, 64); >> 1303 BTRFS_SETGET_STACK_FUNCS(stack_chunk_stripe_len, struct btrfs_chunk, >> 1304 stripe_len, 64); >> 1305 BTRFS_SETGET_STACK_FUNCS(stack_chunk_io_align, struct btrfs_chunk, >> 1306 io_align, 32); >> 1307 BTRFS_SETGET_STACK_FUNCS(stack_chunk_io_width, struct btrfs_chunk, >> 1308 io_width, 32); >> 1309 BTRFS_SETGET_STACK_FUNCS(stack_chunk_sector_size, struct btrfs_chunk, >> 1310 sector_size, 32); >> 1311 BTRFS_SETGET_STACK_FUNCS(stack_chunk_type, struct btrfs_chunk, type, 64); >> 1312 BTRFS_SETGET_STACK_FUNCS(stack_chunk_num_stripes, struct btrfs_chunk, >> 1313 num_stripes, 16); >> 1314 BTRFS_SETGET_STACK_FUNCS(stack_chunk_sub_stripes, struct btrfs_chunk, >> 1315 sub_stripes, 16); >> 1316 BTRFS_SETGET_STACK_FUNCS(stack_stripe_devid, struct btrfs_stripe, devid, 64); >> 1317 BTRFS_SETGET_STACK_FUNCS(stack_stripe_offset, struct btrfs_stripe, offset, 64); >> 1318 >> 1319 static inline struct btrfs_stripe *btrfs_stripe_nr(struct btrfs_chunk *c, >> 1320 int nr) >> 1321 { >> 1322 unsigned long offset = (unsigned long)c; >> 1323 offset += offsetof(struct btrfs_chunk, stripe); >> 1324 offset += nr * sizeof(struct btrfs_stripe); >> 1325 return (struct btrfs_stripe *)offset; >> 1326 } >> 1327 >> 1328 static inline char *btrfs_stripe_dev_uuid_nr(struct btrfs_chunk *c, int nr) >> 1329 { >> 1330 return btrfs_stripe_dev_uuid(btrfs_stripe_nr(c, nr)); >> 1331 } >> 1332 >> 1333 static inline u64 btrfs_stripe_offset_nr(struct extent_buffer *eb, >> 1334 struct btrfs_chunk *c, int nr) >> 1335 { >> 1336 return btrfs_stripe_offset(eb, btrfs_stripe_nr(c, nr)); >> 1337 } >> 1338 >> 1339 static inline void btrfs_set_stripe_offset_nr(struct extent_buffer *eb, >> 1340 struct btrfs_chunk *c, int nr, >> 1341 u64 val) >> 1342 { >> 1343 btrfs_set_stripe_offset(eb, btrfs_stripe_nr(c, nr), val); >> 1344 } >> 1345 >> 1346 static inline u64 btrfs_stripe_devid_nr(struct extent_buffer *eb, >> 1347 struct btrfs_chunk *c, int nr) >> 1348 { >> 1349 return btrfs_stripe_devid(eb, btrfs_stripe_nr(c, nr)); >> 1350 } >> 1351 >> 1352 static inline void btrfs_set_stripe_devid_nr(struct extent_buffer *eb, >> 1353 struct btrfs_chunk *c, int nr, >> 1354 u64 val) >> 1355 { >> 1356 btrfs_set_stripe_devid(eb, btrfs_stripe_nr(c, nr), val); >> 1357 } >> 1358 >> 1359 /* struct btrfs_block_group_item */ >> 1360 BTRFS_SETGET_STACK_FUNCS(block_group_used, struct btrfs_block_group_item, >> 1361 used, 64); >> 1362 BTRFS_SETGET_FUNCS(disk_block_group_used, struct btrfs_block_group_item, >> 1363 used, 64); >> 1364 BTRFS_SETGET_STACK_FUNCS(block_group_chunk_objectid, >> 1365 struct btrfs_block_group_item, chunk_objectid, 64); >> 1366 >> 1367 BTRFS_SETGET_FUNCS(disk_block_group_chunk_objectid, >> 1368 struct btrfs_block_group_item, chunk_objectid, 64); >> 1369 BTRFS_SETGET_FUNCS(disk_block_group_flags, >> 1370 struct btrfs_block_group_item, flags, 64); >> 1371 BTRFS_SETGET_STACK_FUNCS(block_group_flags, >> 1372 struct btrfs_block_group_item, flags, 64); >> 1373 >> 1374 /* struct btrfs_inode_ref */ >> 1375 BTRFS_SETGET_FUNCS(inode_ref_name_len, struct btrfs_inode_ref, name_len, 16); >> 1376 BTRFS_SETGET_FUNCS(inode_ref_index, struct btrfs_inode_ref, index, 64); >> 1377 >> 1378 /* struct btrfs_inode_item */ >> 1379 BTRFS_SETGET_FUNCS(inode_generation, struct btrfs_inode_item, generation, 64); >> 1380 BTRFS_SETGET_FUNCS(inode_sequence, struct btrfs_inode_item, sequence, 64); >> 1381 BTRFS_SETGET_FUNCS(inode_transid, struct btrfs_inode_item, transid, 64); >> 1382 BTRFS_SETGET_FUNCS(inode_size, struct btrfs_inode_item, size, 64); >> 1383 BTRFS_SETGET_FUNCS(inode_nbytes, struct btrfs_inode_item, nbytes, 64); >> 1384 BTRFS_SETGET_FUNCS(inode_block_group, struct btrfs_inode_item, block_group, 64); >> 1385 BTRFS_SETGET_FUNCS(inode_nlink, struct btrfs_inode_item, nlink, 32); >> 1386 BTRFS_SETGET_FUNCS(inode_uid, struct btrfs_inode_item, uid, 32); >> 1387 BTRFS_SETGET_FUNCS(inode_gid, struct btrfs_inode_item, gid, 32); >> 1388 BTRFS_SETGET_FUNCS(inode_mode, struct btrfs_inode_item, mode, 32); >> 1389 BTRFS_SETGET_FUNCS(inode_rdev, struct btrfs_inode_item, rdev, 64); >> 1390 BTRFS_SETGET_FUNCS(inode_flags, struct btrfs_inode_item, flags, 64); >> 1391 >> 1392 static inline struct btrfs_timespec * >> 1393 btrfs_inode_atime(struct btrfs_inode_item *inode_item) >> 1394 { >> 1395 unsigned long ptr = (unsigned long)inode_item; >> 1396 ptr += offsetof(struct btrfs_inode_item, atime); >> 1397 return (struct btrfs_timespec *)ptr; >> 1398 } >> 1399 >> 1400 static inline struct btrfs_timespec * >> 1401 btrfs_inode_mtime(struct btrfs_inode_item *inode_item) >> 1402 { >> 1403 unsigned long ptr = (unsigned long)inode_item; >> 1404 ptr += offsetof(struct btrfs_inode_item, mtime); >> 1405 return (struct btrfs_timespec *)ptr; >> 1406 } >> 1407 >> 1408 static inline struct btrfs_timespec * >> 1409 btrfs_inode_ctime(struct btrfs_inode_item *inode_item) >> 1410 { >> 1411 unsigned long ptr = (unsigned long)inode_item; >> 1412 ptr += offsetof(struct btrfs_inode_item, ctime); >> 1413 return (struct btrfs_timespec *)ptr; >> 1414 } >> 1415 >> 1416 static inline struct btrfs_timespec * >> 1417 btrfs_inode_otime(struct btrfs_inode_item *inode_item) >> 1418 { >> 1419 unsigned long ptr = (unsigned long)inode_item; >> 1420 ptr += offsetof(struct btrfs_inode_item, otime); >> 1421 return (struct btrfs_timespec *)ptr; >> 1422 } >> 1423 >> 1424 BTRFS_SETGET_FUNCS(timespec_sec, struct btrfs_timespec, sec, 64); >> 1425 BTRFS_SETGET_FUNCS(timespec_nsec, struct btrfs_timespec, nsec, 32); >> 1426 >> 1427 /* struct btrfs_dev_extent */ >> 1428 BTRFS_SETGET_FUNCS(dev_extent_chunk_tree, struct btrfs_dev_extent, >> 1429 chunk_tree, 64); >> 1430 BTRFS_SETGET_FUNCS(dev_extent_chunk_objectid, struct btrfs_dev_extent, >> 1431 chunk_objectid, 64); >> 1432 BTRFS_SETGET_FUNCS(dev_extent_chunk_offset, struct btrfs_dev_extent, >> 1433 chunk_offset, 64); >> 1434 BTRFS_SETGET_FUNCS(dev_extent_length, struct btrfs_dev_extent, length, 64); >> 1435 >> 1436 static inline u8 *btrfs_dev_extent_chunk_tree_uuid(struct btrfs_dev_extent *dev) >> 1437 { >> 1438 unsigned long ptr = offsetof(struct btrfs_dev_extent, chunk_tree_uuid); >> 1439 return (u8 *)((unsigned long)dev + ptr); >> 1440 } >> 1441 >> 1442 BTRFS_SETGET_FUNCS(extent_refs, struct btrfs_extent_item, refs, 64); >> 1443 BTRFS_SETGET_FUNCS(extent_generation, struct btrfs_extent_item, >> 1444 generation, 64); >> 1445 BTRFS_SETGET_FUNCS(extent_flags, struct btrfs_extent_item, flags, 64); >> 1446 >> 1447 BTRFS_SETGET_FUNCS(extent_refs_v0, struct btrfs_extent_item_v0, refs, 32); >> 1448 >> 1449 >> 1450 BTRFS_SETGET_FUNCS(tree_block_level, struct btrfs_tree_block_info, level, 8); >> 1451 >> 1452 static inline void btrfs_tree_block_key(struct extent_buffer *eb, >> 1453 struct btrfs_tree_block_info *item, >> 1454 struct btrfs_disk_key *key) >> 1455 { >> 1456 read_eb_member(eb, item, struct btrfs_tree_block_info, key, key); >> 1457 } >> 1458 >> 1459 static inline void btrfs_set_tree_block_key(struct extent_buffer *eb, >> 1460 struct btrfs_tree_block_info *item, >> 1461 struct btrfs_disk_key *key) >> 1462 { >> 1463 write_eb_member(eb, item, struct btrfs_tree_block_info, key, key); >> 1464 } >> 1465 >> 1466 BTRFS_SETGET_FUNCS(extent_data_ref_root, struct btrfs_extent_data_ref, >> 1467 root, 64); >> 1468 BTRFS_SETGET_FUNCS(extent_data_ref_objectid, struct btrfs_extent_data_ref, >> 1469 objectid, 64); >> 1470 BTRFS_SETGET_FUNCS(extent_data_ref_offset, struct btrfs_extent_data_ref, >> 1471 offset, 64); >> 1472 BTRFS_SETGET_FUNCS(extent_data_ref_count, struct btrfs_extent_data_ref, >> 1473 count, 32); >> 1474 >> 1475 BTRFS_SETGET_FUNCS(shared_data_ref_count, struct btrfs_shared_data_ref, >> 1476 count, 32); >> 1477 >> 1478 BTRFS_SETGET_FUNCS(extent_inline_ref_type, struct btrfs_extent_inline_ref, >> 1479 type, 8); >> 1480 BTRFS_SETGET_FUNCS(extent_inline_ref_offset, struct btrfs_extent_inline_ref, >> 1481 offset, 64); >> 1482 >> 1483 static inline u32 btrfs_extent_inline_ref_size(int type) >> 1484 { >> 1485 if (type == BTRFS_TREE_BLOCK_REF_KEY || >> 1486 type == BTRFS_SHARED_BLOCK_REF_KEY) >> 1487 return sizeof(struct btrfs_extent_inline_ref); >> 1488 if (type == BTRFS_SHARED_DATA_REF_KEY) >> 1489 return sizeof(struct btrfs_shared_data_ref) + >> 1490 sizeof(struct btrfs_extent_inline_ref); >> 1491 if (type == BTRFS_EXTENT_DATA_REF_KEY) >> 1492 return sizeof(struct btrfs_extent_data_ref) + >> 1493 offsetof(struct btrfs_extent_inline_ref, offset); >> 1494 BUG(); >> 1495 return 0; >> 1496 } >> 1497 >> 1498 BTRFS_SETGET_FUNCS(ref_root_v0, struct btrfs_extent_ref_v0, root, 64); >> 1499 BTRFS_SETGET_FUNCS(ref_generation_v0, struct btrfs_extent_ref_v0, >> 1500 generation, 64); >> 1501 BTRFS_SETGET_FUNCS(ref_objectid_v0, struct btrfs_extent_ref_v0, objectid, 64); >> 1502 BTRFS_SETGET_FUNCS(ref_count_v0, struct btrfs_extent_ref_v0, count, 32); >> 1503 >> 1504 /* struct btrfs_node */ >> 1505 BTRFS_SETGET_FUNCS(key_blockptr, struct btrfs_key_ptr, blockptr, 64); >> 1506 BTRFS_SETGET_FUNCS(key_generation, struct btrfs_key_ptr, generation, 64); >> 1507 >> 1508 static inline u64 btrfs_node_blockptr(struct extent_buffer *eb, int nr) >> 1509 { >> 1510 unsigned long ptr; >> 1511 ptr = offsetof(struct btrfs_node, ptrs) + >> 1512 sizeof(struct btrfs_key_ptr) * nr; >> 1513 return btrfs_key_blockptr(eb, (struct btrfs_key_ptr *)ptr); >> 1514 } >> 1515 >> 1516 static inline void btrfs_set_node_blockptr(struct extent_buffer *eb, >> 1517 int nr, u64 val) >> 1518 { >> 1519 unsigned long ptr; >> 1520 ptr = offsetof(struct btrfs_node, ptrs) + >> 1521 sizeof(struct btrfs_key_ptr) * nr; >> 1522 btrfs_set_key_blockptr(eb, (struct btrfs_key_ptr *)ptr, val); >> 1523 } >> 1524 >> 1525 static inline u64 btrfs_node_ptr_generation(struct extent_buffer *eb, int nr) >> 1526 { >> 1527 unsigned long ptr; >> 1528 ptr = offsetof(struct btrfs_node, ptrs) + >> 1529 sizeof(struct btrfs_key_ptr) * nr; >> 1530 return btrfs_key_generation(eb, (struct btrfs_key_ptr *)ptr); >> 1531 } >> 1532 >> 1533 static inline void btrfs_set_node_ptr_generation(struct extent_buffer *eb, >> 1534 int nr, u64 val) >> 1535 { >> 1536 unsigned long ptr; >> 1537 ptr = offsetof(struct btrfs_node, ptrs) + >> 1538 sizeof(struct btrfs_key_ptr) * nr; >> 1539 btrfs_set_key_generation(eb, (struct btrfs_key_ptr *)ptr, val); >> 1540 } >> 1541 >> 1542 static inline unsigned long btrfs_node_key_ptr_offset(int nr) >> 1543 { >> 1544 return offsetof(struct btrfs_node, ptrs) + >> 1545 sizeof(struct btrfs_key_ptr) * nr; >> 1546 } >> 1547 >> 1548 void btrfs_node_key(struct extent_buffer *eb, >> 1549 struct btrfs_disk_key *disk_key, int nr); >> 1550 >> 1551 static inline void btrfs_set_node_key(struct extent_buffer *eb, >> 1552 struct btrfs_disk_key *disk_key, int nr) 327 { 1553 { 328 /* Byte-swap the constant at compile t !! 1554 unsigned long ptr; 329 return (root->root_item.flags & cpu_to !! 1555 ptr = btrfs_node_key_ptr_offset(nr); >> 1556 write_eb_member(eb, (struct btrfs_key_ptr *)ptr, >> 1557 struct btrfs_key_ptr, key, disk_key); 330 } 1558 } 331 1559 332 static inline bool btrfs_root_dead(const struc !! 1560 /* struct btrfs_item */ >> 1561 BTRFS_SETGET_FUNCS(item_offset, struct btrfs_item, offset, 32); >> 1562 BTRFS_SETGET_FUNCS(item_size, struct btrfs_item, size, 32); >> 1563 >> 1564 static inline unsigned long btrfs_item_nr_offset(int nr) 333 { 1565 { 334 /* Byte-swap the constant at compile t !! 1566 return offsetof(struct btrfs_leaf, items) + 335 return (root->root_item.flags & cpu_to !! 1567 sizeof(struct btrfs_item) * nr; 336 } 1568 } 337 1569 338 static inline u64 btrfs_root_id(const struct b !! 1570 static inline struct btrfs_item *btrfs_item_nr(struct extent_buffer *eb, >> 1571 int nr) 339 { 1572 { 340 return root->root_key.objectid; !! 1573 return (struct btrfs_item *)btrfs_item_nr_offset(nr); 341 } 1574 } 342 1575 343 static inline int btrfs_get_root_log_transid(c !! 1576 static inline u32 btrfs_item_end(struct extent_buffer *eb, >> 1577 struct btrfs_item *item) 344 { 1578 { 345 return READ_ONCE(root->log_transid); !! 1579 return btrfs_item_offset(eb, item) + btrfs_item_size(eb, item); 346 } 1580 } 347 1581 348 static inline void btrfs_set_root_log_transid( !! 1582 static inline u32 btrfs_item_end_nr(struct extent_buffer *eb, int nr) 349 { 1583 { 350 WRITE_ONCE(root->log_transid, log_tran !! 1584 return btrfs_item_end(eb, btrfs_item_nr(eb, nr)); 351 } 1585 } 352 1586 353 static inline int btrfs_get_root_last_log_comm !! 1587 static inline u32 btrfs_item_offset_nr(struct extent_buffer *eb, int nr) 354 { 1588 { 355 return READ_ONCE(root->last_log_commit !! 1589 return btrfs_item_offset(eb, btrfs_item_nr(eb, nr)); 356 } 1590 } 357 1591 358 static inline void btrfs_set_root_last_log_com !! 1592 static inline u32 btrfs_item_size_nr(struct extent_buffer *eb, int nr) 359 { 1593 { 360 WRITE_ONCE(root->last_log_commit, comm !! 1594 return btrfs_item_size(eb, btrfs_item_nr(eb, nr)); 361 } 1595 } 362 1596 363 static inline u64 btrfs_get_root_last_trans(co !! 1597 static inline void btrfs_item_key(struct extent_buffer *eb, >> 1598 struct btrfs_disk_key *disk_key, int nr) 364 { 1599 { 365 return READ_ONCE(root->last_trans); !! 1600 struct btrfs_item *item = btrfs_item_nr(eb, nr); >> 1601 read_eb_member(eb, item, struct btrfs_item, key, disk_key); 366 } 1602 } 367 1603 368 static inline void btrfs_set_root_last_trans(s !! 1604 static inline void btrfs_set_item_key(struct extent_buffer *eb, >> 1605 struct btrfs_disk_key *disk_key, int nr) 369 { 1606 { 370 WRITE_ONCE(root->last_trans, transid); !! 1607 struct btrfs_item *item = btrfs_item_nr(eb, nr); >> 1608 write_eb_member(eb, item, struct btrfs_item, key, disk_key); 371 } 1609 } 372 1610 >> 1611 BTRFS_SETGET_FUNCS(dir_log_end, struct btrfs_dir_log_item, end, 64); >> 1612 373 /* 1613 /* 374 * Structure that conveys information about an !! 1614 * struct btrfs_root_ref 375 * all the extents in a file range. << 376 */ 1615 */ 377 struct btrfs_replace_extent_info { !! 1616 BTRFS_SETGET_FUNCS(root_ref_dirid, struct btrfs_root_ref, dirid, 64); 378 u64 disk_offset; !! 1617 BTRFS_SETGET_FUNCS(root_ref_sequence, struct btrfs_root_ref, sequence, 64); 379 u64 disk_len; !! 1618 BTRFS_SETGET_FUNCS(root_ref_name_len, struct btrfs_root_ref, name_len, 16); 380 u64 data_offset; << 381 u64 data_len; << 382 u64 file_offset; << 383 /* Pointer to a file extent item of ty << 384 char *extent_buf; << 385 /* << 386 * Set to true when attempting to repl << 387 * described by this structure, set to << 388 * existing extent into a file range. << 389 */ << 390 bool is_new_extent; << 391 /* Indicate if we should update the in << 392 bool update_times; << 393 /* Meaningful only if is_new_extent is << 394 int qgroup_reserved; << 395 /* << 396 * Meaningful only if is_new_extent is << 397 * Used to track how many extent items << 398 * subvolume tree that refer to the ex << 399 * so that we know when to create a ne << 400 * one. << 401 */ << 402 int insertions; << 403 }; << 404 1619 405 /* Arguments for btrfs_drop_extents() */ !! 1620 /* struct btrfs_dir_item */ 406 struct btrfs_drop_extents_args { !! 1621 BTRFS_SETGET_FUNCS(dir_data_len, struct btrfs_dir_item, data_len, 16); 407 /* Input parameters */ !! 1622 BTRFS_SETGET_FUNCS(dir_type, struct btrfs_dir_item, type, 8); >> 1623 BTRFS_SETGET_FUNCS(dir_name_len, struct btrfs_dir_item, name_len, 16); >> 1624 BTRFS_SETGET_FUNCS(dir_transid, struct btrfs_dir_item, transid, 64); 408 1625 409 /* !! 1626 static inline void btrfs_dir_item_key(struct extent_buffer *eb, 410 * If NULL, btrfs_drop_extents() will !! 1627 struct btrfs_dir_item *item, 411 * If 'replace_extent' is true, this m !! 1628 struct btrfs_disk_key *key) 412 * is always released except if 'repla !! 1629 { 413 * btrfs_drop_extents() sets 'extent_i !! 1630 read_eb_member(eb, item, struct btrfs_dir_item, location, key); 414 * the path is kept locked. !! 1631 } 415 */ << 416 struct btrfs_path *path; << 417 /* Start offset of the range to drop e << 418 u64 start; << 419 /* End (exclusive, last byte + 1) of t << 420 u64 end; << 421 /* If true drop all the extent maps in << 422 bool drop_cache; << 423 /* << 424 * If true it means we want to insert << 425 * the extents in the range. If this i << 426 * parameter must be set as well and t << 427 * be set to true by btrfs_drop_extent << 428 * extent. << 429 * Note: when this is set to true the << 430 */ << 431 bool replace_extent; << 432 /* << 433 * Used if 'replace_extent' is true. S << 434 * insert after dropping all existing << 435 */ << 436 u32 extent_item_size; << 437 1632 438 /* Output parameters */ !! 1633 static inline void btrfs_set_dir_item_key(struct extent_buffer *eb, >> 1634 struct btrfs_dir_item *item, >> 1635 struct btrfs_disk_key *key) >> 1636 { >> 1637 write_eb_member(eb, item, struct btrfs_dir_item, location, key); >> 1638 } 439 1639 440 /* !! 1640 /* struct btrfs_disk_key */ 441 * Set to the minimum between the inpu !! 1641 BTRFS_SETGET_STACK_FUNCS(disk_key_objectid, struct btrfs_disk_key, 442 * (exclusive, last byte + 1) of the l !! 1642 objectid, 64); 443 * set even if btrfs_drop_extents() re !! 1643 BTRFS_SETGET_STACK_FUNCS(disk_key_offset, struct btrfs_disk_key, offset, 64); 444 */ !! 1644 BTRFS_SETGET_STACK_FUNCS(disk_key_type, struct btrfs_disk_key, type, 8); 445 u64 drop_end; << 446 /* << 447 * The number of allocated bytes found << 448 * than the range's length when there << 449 */ << 450 u64 bytes_found; << 451 /* << 452 * Only set if 'replace_extent' is tru << 453 * to insert a replacement extent afte << 454 * range, otherwise set to false by bt << 455 * Also, if btrfs_drop_extents() has s << 456 * returned with the path locked, othe << 457 * false it has returned with the path << 458 */ << 459 bool extent_inserted; << 460 }; << 461 1645 462 struct btrfs_file_private { !! 1646 static inline void btrfs_disk_key_to_cpu(struct btrfs_key *cpu, 463 void *filldir_buf; !! 1647 struct btrfs_disk_key *disk) 464 u64 last_index; !! 1648 { 465 struct extent_state *llseek_cached_sta !! 1649 cpu->offset = le64_to_cpu(disk->offset); 466 /* Task that allocated this structure. !! 1650 cpu->type = disk->type; 467 struct task_struct *owner_task; !! 1651 cpu->objectid = le64_to_cpu(disk->objectid); 468 }; !! 1652 } 469 1653 470 static inline u32 BTRFS_LEAF_DATA_SIZE(const s !! 1654 static inline void btrfs_cpu_key_to_disk(struct btrfs_disk_key *disk, >> 1655 struct btrfs_key *cpu) 471 { 1656 { 472 return info->nodesize - sizeof(struct !! 1657 disk->offset = cpu_to_le64(cpu->offset); >> 1658 disk->type = cpu->type; >> 1659 disk->objectid = cpu_to_le64(cpu->objectid); 473 } 1660 } 474 1661 475 static inline u32 BTRFS_MAX_ITEM_SIZE(const st !! 1662 static inline void btrfs_node_key_to_cpu(struct extent_buffer *eb, >> 1663 struct btrfs_key *key, int nr) 476 { 1664 { 477 return BTRFS_LEAF_DATA_SIZE(info) - si !! 1665 struct btrfs_disk_key disk_key; >> 1666 btrfs_node_key(eb, &disk_key, nr); >> 1667 btrfs_disk_key_to_cpu(key, &disk_key); 478 } 1668 } 479 1669 480 static inline u32 BTRFS_NODEPTRS_PER_BLOCK(con !! 1670 static inline void btrfs_item_key_to_cpu(struct extent_buffer *eb, >> 1671 struct btrfs_key *key, int nr) 481 { 1672 { 482 return BTRFS_LEAF_DATA_SIZE(info) / si !! 1673 struct btrfs_disk_key disk_key; >> 1674 btrfs_item_key(eb, &disk_key, nr); >> 1675 btrfs_disk_key_to_cpu(key, &disk_key); 483 } 1676 } 484 1677 485 static inline u32 BTRFS_MAX_XATTR_SIZE(const s !! 1678 static inline void btrfs_dir_item_key_to_cpu(struct extent_buffer *eb, >> 1679 struct btrfs_dir_item *item, >> 1680 struct btrfs_key *key) 486 { 1681 { 487 return BTRFS_MAX_ITEM_SIZE(info) - siz !! 1682 struct btrfs_disk_key disk_key; >> 1683 btrfs_dir_item_key(eb, item, &disk_key); >> 1684 btrfs_disk_key_to_cpu(key, &disk_key); 488 } 1685 } 489 1686 490 #define BTRFS_BYTES_TO_BLKS(fs_info, bytes) \ << 491 ((bytes) >> (f << 492 1687 493 static inline gfp_t btrfs_alloc_write_mask(str !! 1688 static inline u8 btrfs_key_type(struct btrfs_key *key) 494 { 1689 { 495 return mapping_gfp_constraint(mapping, !! 1690 return key->type; 496 } 1691 } 497 1692 498 void btrfs_error_unpin_extent_range(struct btr !! 1693 static inline void btrfs_set_key_type(struct btrfs_key *key, u8 val) 499 int btrfs_discard_extent(struct btrfs_fs_info !! 1694 { 500 u64 num_bytes, u64 *a !! 1695 key->type = val; 501 int btrfs_trim_fs(struct btrfs_fs_info *fs_inf !! 1696 } 502 1697 503 /* ctree.c */ !! 1698 /* struct btrfs_header */ 504 int __init btrfs_ctree_init(void); !! 1699 BTRFS_SETGET_HEADER_FUNCS(header_bytenr, struct btrfs_header, bytenr, 64); 505 void __cold btrfs_ctree_exit(void); !! 1700 BTRFS_SETGET_HEADER_FUNCS(header_generation, struct btrfs_header, >> 1701 generation, 64); >> 1702 BTRFS_SETGET_HEADER_FUNCS(header_owner, struct btrfs_header, owner, 64); >> 1703 BTRFS_SETGET_HEADER_FUNCS(header_nritems, struct btrfs_header, nritems, 32); >> 1704 BTRFS_SETGET_HEADER_FUNCS(header_flags, struct btrfs_header, flags, 64); >> 1705 BTRFS_SETGET_HEADER_FUNCS(header_level, struct btrfs_header, level, 8); >> 1706 >> 1707 static inline int btrfs_header_flag(struct extent_buffer *eb, u64 flag) >> 1708 { >> 1709 return (btrfs_header_flags(eb) & flag) == flag; >> 1710 } >> 1711 >> 1712 static inline int btrfs_set_header_flag(struct extent_buffer *eb, u64 flag) >> 1713 { >> 1714 u64 flags = btrfs_header_flags(eb); >> 1715 btrfs_set_header_flags(eb, flags | flag); >> 1716 return (flags & flag) == flag; >> 1717 } >> 1718 >> 1719 static inline int btrfs_clear_header_flag(struct extent_buffer *eb, u64 flag) >> 1720 { >> 1721 u64 flags = btrfs_header_flags(eb); >> 1722 btrfs_set_header_flags(eb, flags & ~flag); >> 1723 return (flags & flag) == flag; >> 1724 } >> 1725 >> 1726 static inline int btrfs_header_backref_rev(struct extent_buffer *eb) >> 1727 { >> 1728 u64 flags = btrfs_header_flags(eb); >> 1729 return flags >> BTRFS_BACKREF_REV_SHIFT; >> 1730 } >> 1731 >> 1732 static inline void btrfs_set_header_backref_rev(struct extent_buffer *eb, >> 1733 int rev) >> 1734 { >> 1735 u64 flags = btrfs_header_flags(eb); >> 1736 flags &= ~BTRFS_BACKREF_REV_MASK; >> 1737 flags |= (u64)rev << BTRFS_BACKREF_REV_SHIFT; >> 1738 btrfs_set_header_flags(eb, flags); >> 1739 } >> 1740 >> 1741 static inline u8 *btrfs_header_fsid(struct extent_buffer *eb) >> 1742 { >> 1743 unsigned long ptr = offsetof(struct btrfs_header, fsid); >> 1744 return (u8 *)ptr; >> 1745 } >> 1746 >> 1747 static inline u8 *btrfs_header_chunk_tree_uuid(struct extent_buffer *eb) >> 1748 { >> 1749 unsigned long ptr = offsetof(struct btrfs_header, chunk_tree_uuid); >> 1750 return (u8 *)ptr; >> 1751 } 506 1752 507 int btrfs_bin_search(struct extent_buffer *eb, !! 1753 static inline u8 *btrfs_super_fsid(struct extent_buffer *eb) 508 const struct btrfs_key *k !! 1754 { >> 1755 unsigned long ptr = offsetof(struct btrfs_super_block, fsid); >> 1756 return (u8 *)ptr; >> 1757 } >> 1758 >> 1759 static inline u8 *btrfs_header_csum(struct extent_buffer *eb) >> 1760 { >> 1761 unsigned long ptr = offsetof(struct btrfs_header, csum); >> 1762 return (u8 *)ptr; >> 1763 } >> 1764 >> 1765 static inline struct btrfs_node *btrfs_buffer_node(struct extent_buffer *eb) >> 1766 { >> 1767 return NULL; >> 1768 } >> 1769 >> 1770 static inline struct btrfs_leaf *btrfs_buffer_leaf(struct extent_buffer *eb) >> 1771 { >> 1772 return NULL; >> 1773 } >> 1774 >> 1775 static inline struct btrfs_header *btrfs_buffer_header(struct extent_buffer *eb) >> 1776 { >> 1777 return NULL; >> 1778 } >> 1779 >> 1780 static inline int btrfs_is_leaf(struct extent_buffer *eb) >> 1781 { >> 1782 return btrfs_header_level(eb) == 0; >> 1783 } >> 1784 >> 1785 /* struct btrfs_root_item */ >> 1786 BTRFS_SETGET_FUNCS(disk_root_generation, struct btrfs_root_item, >> 1787 generation, 64); >> 1788 BTRFS_SETGET_FUNCS(disk_root_refs, struct btrfs_root_item, refs, 32); >> 1789 BTRFS_SETGET_FUNCS(disk_root_bytenr, struct btrfs_root_item, bytenr, 64); >> 1790 BTRFS_SETGET_FUNCS(disk_root_level, struct btrfs_root_item, level, 8); >> 1791 >> 1792 BTRFS_SETGET_STACK_FUNCS(root_generation, struct btrfs_root_item, >> 1793 generation, 64); >> 1794 BTRFS_SETGET_STACK_FUNCS(root_bytenr, struct btrfs_root_item, bytenr, 64); >> 1795 BTRFS_SETGET_STACK_FUNCS(root_level, struct btrfs_root_item, level, 8); >> 1796 BTRFS_SETGET_STACK_FUNCS(root_dirid, struct btrfs_root_item, root_dirid, 64); >> 1797 BTRFS_SETGET_STACK_FUNCS(root_refs, struct btrfs_root_item, refs, 32); >> 1798 BTRFS_SETGET_STACK_FUNCS(root_flags, struct btrfs_root_item, flags, 64); >> 1799 BTRFS_SETGET_STACK_FUNCS(root_used, struct btrfs_root_item, bytes_used, 64); >> 1800 BTRFS_SETGET_STACK_FUNCS(root_limit, struct btrfs_root_item, byte_limit, 64); >> 1801 BTRFS_SETGET_STACK_FUNCS(root_last_snapshot, struct btrfs_root_item, >> 1802 last_snapshot, 64); >> 1803 >> 1804 /* struct btrfs_super_block */ >> 1805 >> 1806 BTRFS_SETGET_STACK_FUNCS(super_bytenr, struct btrfs_super_block, bytenr, 64); >> 1807 BTRFS_SETGET_STACK_FUNCS(super_flags, struct btrfs_super_block, flags, 64); >> 1808 BTRFS_SETGET_STACK_FUNCS(super_generation, struct btrfs_super_block, >> 1809 generation, 64); >> 1810 BTRFS_SETGET_STACK_FUNCS(super_root, struct btrfs_super_block, root, 64); >> 1811 BTRFS_SETGET_STACK_FUNCS(super_sys_array_size, >> 1812 struct btrfs_super_block, sys_chunk_array_size, 32); >> 1813 BTRFS_SETGET_STACK_FUNCS(super_chunk_root_generation, >> 1814 struct btrfs_super_block, chunk_root_generation, 64); >> 1815 BTRFS_SETGET_STACK_FUNCS(super_root_level, struct btrfs_super_block, >> 1816 root_level, 8); >> 1817 BTRFS_SETGET_STACK_FUNCS(super_chunk_root, struct btrfs_super_block, >> 1818 chunk_root, 64); >> 1819 BTRFS_SETGET_STACK_FUNCS(super_chunk_root_level, struct btrfs_super_block, >> 1820 chunk_root_level, 8); >> 1821 BTRFS_SETGET_STACK_FUNCS(super_log_root, struct btrfs_super_block, >> 1822 log_root, 64); >> 1823 BTRFS_SETGET_STACK_FUNCS(super_log_root_transid, struct btrfs_super_block, >> 1824 log_root_transid, 64); >> 1825 BTRFS_SETGET_STACK_FUNCS(super_log_root_level, struct btrfs_super_block, >> 1826 log_root_level, 8); >> 1827 BTRFS_SETGET_STACK_FUNCS(super_total_bytes, struct btrfs_super_block, >> 1828 total_bytes, 64); >> 1829 BTRFS_SETGET_STACK_FUNCS(super_bytes_used, struct btrfs_super_block, >> 1830 bytes_used, 64); >> 1831 BTRFS_SETGET_STACK_FUNCS(super_sectorsize, struct btrfs_super_block, >> 1832 sectorsize, 32); >> 1833 BTRFS_SETGET_STACK_FUNCS(super_nodesize, struct btrfs_super_block, >> 1834 nodesize, 32); >> 1835 BTRFS_SETGET_STACK_FUNCS(super_leafsize, struct btrfs_super_block, >> 1836 leafsize, 32); >> 1837 BTRFS_SETGET_STACK_FUNCS(super_stripesize, struct btrfs_super_block, >> 1838 stripesize, 32); >> 1839 BTRFS_SETGET_STACK_FUNCS(super_root_dir, struct btrfs_super_block, >> 1840 root_dir_objectid, 64); >> 1841 BTRFS_SETGET_STACK_FUNCS(super_num_devices, struct btrfs_super_block, >> 1842 num_devices, 64); >> 1843 BTRFS_SETGET_STACK_FUNCS(super_compat_flags, struct btrfs_super_block, >> 1844 compat_flags, 64); >> 1845 BTRFS_SETGET_STACK_FUNCS(super_compat_ro_flags, struct btrfs_super_block, >> 1846 compat_flags, 64); >> 1847 BTRFS_SETGET_STACK_FUNCS(super_incompat_flags, struct btrfs_super_block, >> 1848 incompat_flags, 64); >> 1849 BTRFS_SETGET_STACK_FUNCS(super_csum_type, struct btrfs_super_block, >> 1850 csum_type, 16); >> 1851 >> 1852 static inline int btrfs_super_csum_size(struct btrfs_super_block *s) >> 1853 { >> 1854 int t = btrfs_super_csum_type(s); >> 1855 BUG_ON(t >= ARRAY_SIZE(btrfs_csum_sizes)); >> 1856 return btrfs_csum_sizes[t]; >> 1857 } >> 1858 >> 1859 static inline unsigned long btrfs_leaf_data(struct extent_buffer *l) >> 1860 { >> 1861 return offsetof(struct btrfs_leaf, items); >> 1862 } 509 1863 510 int __pure btrfs_comp_cpu_keys(const struct bt !! 1864 /* struct btrfs_file_extent_item */ >> 1865 BTRFS_SETGET_FUNCS(file_extent_type, struct btrfs_file_extent_item, type, 8); 511 1866 512 #ifdef __LITTLE_ENDIAN !! 1867 static inline unsigned long >> 1868 btrfs_file_extent_inline_start(struct btrfs_file_extent_item *e) >> 1869 { >> 1870 unsigned long offset = (unsigned long)e; >> 1871 offset += offsetof(struct btrfs_file_extent_item, disk_bytenr); >> 1872 return offset; >> 1873 } >> 1874 >> 1875 static inline u32 btrfs_file_extent_calc_inline_size(u32 datasize) >> 1876 { >> 1877 return offsetof(struct btrfs_file_extent_item, disk_bytenr) + datasize; >> 1878 } >> 1879 >> 1880 BTRFS_SETGET_FUNCS(file_extent_disk_bytenr, struct btrfs_file_extent_item, >> 1881 disk_bytenr, 64); >> 1882 BTRFS_SETGET_FUNCS(file_extent_generation, struct btrfs_file_extent_item, >> 1883 generation, 64); >> 1884 BTRFS_SETGET_FUNCS(file_extent_disk_num_bytes, struct btrfs_file_extent_item, >> 1885 disk_num_bytes, 64); >> 1886 BTRFS_SETGET_FUNCS(file_extent_offset, struct btrfs_file_extent_item, >> 1887 offset, 64); >> 1888 BTRFS_SETGET_FUNCS(file_extent_num_bytes, struct btrfs_file_extent_item, >> 1889 num_bytes, 64); >> 1890 BTRFS_SETGET_FUNCS(file_extent_ram_bytes, struct btrfs_file_extent_item, >> 1891 ram_bytes, 64); >> 1892 BTRFS_SETGET_FUNCS(file_extent_compression, struct btrfs_file_extent_item, >> 1893 compression, 8); >> 1894 BTRFS_SETGET_FUNCS(file_extent_encryption, struct btrfs_file_extent_item, >> 1895 encryption, 8); >> 1896 BTRFS_SETGET_FUNCS(file_extent_other_encoding, struct btrfs_file_extent_item, >> 1897 other_encoding, 16); >> 1898 >> 1899 /* this returns the number of file bytes represented by the inline item. >> 1900 * If an item is compressed, this is the uncompressed size >> 1901 */ >> 1902 static inline u32 btrfs_file_extent_inline_len(struct extent_buffer *eb, >> 1903 struct btrfs_file_extent_item *e) >> 1904 { >> 1905 return btrfs_file_extent_ram_bytes(eb, e); >> 1906 } 513 1907 514 /* 1908 /* 515 * Compare two keys, on little-endian the disk !! 1909 * this returns the number of bytes used by the item on disk, minus the 516 * we can avoid the conversion. !! 1910 * size of any extent headers. If a file is compressed on disk, this is >> 1911 * the compressed size 517 */ 1912 */ 518 static inline int btrfs_comp_keys(const struct !! 1913 static inline u32 btrfs_file_extent_inline_item_len(struct extent_buffer *eb, 519 const struct !! 1914 struct btrfs_item *e) 520 { 1915 { 521 const struct btrfs_key *k1 = (const st !! 1916 unsigned long offset; >> 1917 offset = offsetof(struct btrfs_file_extent_item, disk_bytenr); >> 1918 return btrfs_item_size(eb, e) - offset; >> 1919 } 522 1920 523 return btrfs_comp_cpu_keys(k1, k2); !! 1921 static inline struct btrfs_root *btrfs_sb(struct super_block *sb) >> 1922 { >> 1923 return sb->s_fs_info; 524 } 1924 } 525 1925 526 #else !! 1926 static inline int btrfs_set_root_name(struct btrfs_root *root, >> 1927 const char *name, int len) >> 1928 { >> 1929 /* if we already have a name just free it */ >> 1930 kfree(root->name); 527 1931 528 /* Compare two keys in a memcmp fashion. */ !! 1932 root->name = kmalloc(len+1, GFP_KERNEL); 529 static inline int btrfs_comp_keys(const struct !! 1933 if (!root->name) 530 const struct !! 1934 return -ENOMEM; >> 1935 >> 1936 memcpy(root->name, name, len); >> 1937 root->name[len] = '\0'; >> 1938 >> 1939 return 0; >> 1940 } >> 1941 >> 1942 static inline u32 btrfs_level_size(struct btrfs_root *root, int level) 531 { 1943 { 532 struct btrfs_key k1; !! 1944 if (level == 0) >> 1945 return root->leafsize; >> 1946 return root->nodesize; >> 1947 } >> 1948 >> 1949 /* helper function to cast into the data area of the leaf. */ >> 1950 #define btrfs_item_ptr(leaf, slot, type) \ >> 1951 ((type *)(btrfs_leaf_data(leaf) + \ >> 1952 btrfs_item_offset_nr(leaf, slot))) 533 1953 534 btrfs_disk_key_to_cpu(&k1, disk); !! 1954 #define btrfs_item_ptr_offset(leaf, slot) \ >> 1955 ((unsigned long)(btrfs_leaf_data(leaf) + \ >> 1956 btrfs_item_offset_nr(leaf, slot))) 535 1957 536 return btrfs_comp_cpu_keys(&k1, k2); !! 1958 static inline struct dentry *fdentry(struct file *file) >> 1959 { >> 1960 return file->f_path.dentry; 537 } 1961 } 538 1962 539 #endif !! 1963 /* extent-tree.c */ >> 1964 void btrfs_put_block_group(struct btrfs_block_group_cache *cache); >> 1965 int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans, >> 1966 struct btrfs_root *root, unsigned long count); >> 1967 int btrfs_lookup_extent(struct btrfs_root *root, u64 start, u64 len); >> 1968 int btrfs_pin_extent(struct btrfs_root *root, >> 1969 u64 bytenr, u64 num, int reserved); >> 1970 int btrfs_drop_leaf_ref(struct btrfs_trans_handle *trans, >> 1971 struct btrfs_root *root, struct extent_buffer *leaf); >> 1972 int btrfs_cross_ref_exist(struct btrfs_trans_handle *trans, >> 1973 struct btrfs_root *root, >> 1974 u64 objectid, u64 offset, u64 bytenr); >> 1975 int btrfs_copy_pinned(struct btrfs_root *root, struct extent_io_tree *copy); >> 1976 struct btrfs_block_group_cache *btrfs_lookup_block_group( >> 1977 struct btrfs_fs_info *info, >> 1978 u64 bytenr); >> 1979 void btrfs_put_block_group(struct btrfs_block_group_cache *cache); >> 1980 u64 btrfs_find_block_group(struct btrfs_root *root, >> 1981 u64 search_start, u64 search_hint, int owner); >> 1982 struct extent_buffer *btrfs_alloc_free_block(struct btrfs_trans_handle *trans, >> 1983 struct btrfs_root *root, u32 blocksize, >> 1984 u64 parent, u64 root_objectid, >> 1985 struct btrfs_disk_key *key, int level, >> 1986 u64 hint, u64 empty_size); >> 1987 int btrfs_free_tree_block(struct btrfs_trans_handle *trans, >> 1988 struct btrfs_root *root, >> 1989 u64 bytenr, u32 blocksize, >> 1990 u64 parent, u64 root_objectid, int level); >> 1991 struct extent_buffer *btrfs_init_new_buffer(struct btrfs_trans_handle *trans, >> 1992 struct btrfs_root *root, >> 1993 u64 bytenr, u32 blocksize, >> 1994 int level); >> 1995 int btrfs_alloc_reserved_file_extent(struct btrfs_trans_handle *trans, >> 1996 struct btrfs_root *root, >> 1997 u64 root_objectid, u64 owner, >> 1998 u64 offset, struct btrfs_key *ins); >> 1999 int btrfs_alloc_logged_file_extent(struct btrfs_trans_handle *trans, >> 2000 struct btrfs_root *root, >> 2001 u64 root_objectid, u64 owner, u64 offset, >> 2002 struct btrfs_key *ins); >> 2003 int btrfs_reserve_extent(struct btrfs_trans_handle *trans, >> 2004 struct btrfs_root *root, >> 2005 u64 num_bytes, u64 min_alloc_size, >> 2006 u64 empty_size, u64 hint_byte, >> 2007 u64 search_end, struct btrfs_key *ins, >> 2008 u64 data); >> 2009 int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, >> 2010 struct extent_buffer *buf, int full_backref); >> 2011 int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, >> 2012 struct extent_buffer *buf, int full_backref); >> 2013 int btrfs_set_disk_extent_flags(struct btrfs_trans_handle *trans, >> 2014 struct btrfs_root *root, >> 2015 u64 bytenr, u64 num_bytes, u64 flags, >> 2016 int is_data); >> 2017 int btrfs_free_extent(struct btrfs_trans_handle *trans, >> 2018 struct btrfs_root *root, >> 2019 u64 bytenr, u64 num_bytes, u64 parent, >> 2020 u64 root_objectid, u64 owner, u64 offset); >> 2021 >> 2022 int btrfs_free_reserved_extent(struct btrfs_root *root, u64 start, u64 len); >> 2023 int btrfs_prepare_extent_commit(struct btrfs_trans_handle *trans, >> 2024 struct btrfs_root *root); >> 2025 int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans, >> 2026 struct btrfs_root *root); >> 2027 int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, >> 2028 struct btrfs_root *root, >> 2029 u64 bytenr, u64 num_bytes, u64 parent, >> 2030 u64 root_objectid, u64 owner, u64 offset); 540 2031 >> 2032 int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans, >> 2033 struct btrfs_root *root); >> 2034 int btrfs_extent_readonly(struct btrfs_root *root, u64 bytenr); >> 2035 int btrfs_free_block_groups(struct btrfs_fs_info *info); >> 2036 int btrfs_read_block_groups(struct btrfs_root *root); >> 2037 int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr); >> 2038 int btrfs_make_block_group(struct btrfs_trans_handle *trans, >> 2039 struct btrfs_root *root, u64 bytes_used, >> 2040 u64 type, u64 chunk_objectid, u64 chunk_offset, >> 2041 u64 size); >> 2042 int btrfs_remove_block_group(struct btrfs_trans_handle *trans, >> 2043 struct btrfs_root *root, u64 group_start); >> 2044 int btrfs_prepare_block_group_relocation(struct btrfs_root *root, >> 2045 struct btrfs_block_group_cache *group); >> 2046 >> 2047 u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags); >> 2048 void btrfs_set_inode_space_info(struct btrfs_root *root, struct inode *ionde); >> 2049 void btrfs_clear_space_info_full(struct btrfs_fs_info *info); >> 2050 >> 2051 int btrfs_reserve_metadata_space(struct btrfs_root *root, int num_items); >> 2052 int btrfs_unreserve_metadata_space(struct btrfs_root *root, int num_items); >> 2053 int btrfs_unreserve_metadata_for_delalloc(struct btrfs_root *root, >> 2054 struct inode *inode, int num_items); >> 2055 int btrfs_reserve_metadata_for_delalloc(struct btrfs_root *root, >> 2056 struct inode *inode, int num_items); >> 2057 int btrfs_check_data_free_space(struct btrfs_root *root, struct inode *inode, >> 2058 u64 bytes); >> 2059 void btrfs_free_reserved_data_space(struct btrfs_root *root, >> 2060 struct inode *inode, u64 bytes); >> 2061 void btrfs_delalloc_reserve_space(struct btrfs_root *root, struct inode *inode, >> 2062 u64 bytes); >> 2063 void btrfs_delalloc_free_space(struct btrfs_root *root, struct inode *inode, >> 2064 u64 bytes); >> 2065 /* ctree.c */ >> 2066 int btrfs_bin_search(struct extent_buffer *eb, struct btrfs_key *key, >> 2067 int level, int *slot); >> 2068 int btrfs_comp_cpu_keys(struct btrfs_key *k1, struct btrfs_key *k2); 541 int btrfs_previous_item(struct btrfs_root *roo 2069 int btrfs_previous_item(struct btrfs_root *root, 542 struct btrfs_path *pat 2070 struct btrfs_path *path, u64 min_objectid, 543 int type); 2071 int type); 544 int btrfs_previous_extent_item(struct btrfs_ro !! 2072 int btrfs_set_item_key_safe(struct btrfs_trans_handle *trans, 545 struct btrfs_path *pat !! 2073 struct btrfs_root *root, struct btrfs_path *path, 546 void btrfs_set_item_key_safe(struct btrfs_tran !! 2074 struct btrfs_key *new_key); 547 const struct btrf << 548 const struct btrf << 549 struct extent_buffer *btrfs_root_node(struct b 2075 struct extent_buffer *btrfs_root_node(struct btrfs_root *root); >> 2076 struct extent_buffer *btrfs_lock_root_node(struct btrfs_root *root); 550 int btrfs_find_next_key(struct btrfs_root *roo 2077 int btrfs_find_next_key(struct btrfs_root *root, struct btrfs_path *path, 551 struct btrfs_key *key, 2078 struct btrfs_key *key, int lowest_level, 552 u64 min_trans); !! 2079 int cache_only, u64 min_trans); 553 int btrfs_search_forward(struct btrfs_root *ro 2080 int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key, 554 struct btrfs_path *pa !! 2081 struct btrfs_key *max_key, >> 2082 struct btrfs_path *path, int cache_only, 555 u64 min_trans); 2083 u64 min_trans); 556 struct extent_buffer *btrfs_read_node_slot(str << 557 int << 558 << 559 int btrfs_cow_block(struct btrfs_trans_handle 2084 int btrfs_cow_block(struct btrfs_trans_handle *trans, 560 struct btrfs_root *root, s 2085 struct btrfs_root *root, struct extent_buffer *buf, 561 struct extent_buffer *pare 2086 struct extent_buffer *parent, int parent_slot, 562 struct extent_buffer **cow !! 2087 struct extent_buffer **cow_ret); 563 enum btrfs_lock_nesting ne << 564 int btrfs_force_cow_block(struct btrfs_trans_h << 565 struct btrfs_root *r << 566 struct extent_buffer << 567 struct extent_buffer << 568 struct extent_buffer << 569 u64 search_start, u6 << 570 enum btrfs_lock_nest << 571 int btrfs_copy_root(struct btrfs_trans_handle 2088 int btrfs_copy_root(struct btrfs_trans_handle *trans, 572 struct btrfs_root *root, 2089 struct btrfs_root *root, 573 struct extent_buffer *bu 2090 struct extent_buffer *buf, 574 struct extent_buffer **c 2091 struct extent_buffer **cow_ret, u64 new_root_objectid); 575 bool btrfs_block_can_be_shared(struct btrfs_tr !! 2092 int btrfs_block_can_be_shared(struct btrfs_root *root, 576 struct btrfs_ro !! 2093 struct extent_buffer *buf); 577 struct extent_b !! 2094 int btrfs_extend_item(struct btrfs_trans_handle *trans, struct btrfs_root 578 int btrfs_del_ptr(struct btrfs_trans_handle *t !! 2095 *root, struct btrfs_path *path, u32 data_size); 579 struct btrfs_path *path, int !! 2096 int btrfs_truncate_item(struct btrfs_trans_handle *trans, 580 void btrfs_extend_item(struct btrfs_trans_hand !! 2097 struct btrfs_root *root, 581 const struct btrfs_path !! 2098 struct btrfs_path *path, 582 void btrfs_truncate_item(struct btrfs_trans_ha !! 2099 u32 new_size, int from_end); 583 const struct btrfs_pa << 584 int btrfs_split_item(struct btrfs_trans_handle 2100 int btrfs_split_item(struct btrfs_trans_handle *trans, 585 struct btrfs_root *root, 2101 struct btrfs_root *root, 586 struct btrfs_path *path, 2102 struct btrfs_path *path, 587 const struct btrfs_key *n !! 2103 struct btrfs_key *new_key, 588 unsigned long split_offse 2104 unsigned long split_offset); 589 int btrfs_duplicate_item(struct btrfs_trans_ha 2105 int btrfs_duplicate_item(struct btrfs_trans_handle *trans, 590 struct btrfs_root *ro 2106 struct btrfs_root *root, 591 struct btrfs_path *pa 2107 struct btrfs_path *path, 592 const struct btrfs_ke !! 2108 struct btrfs_key *new_key); 593 int btrfs_find_item(struct btrfs_root *fs_root !! 2109 int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root 594 u64 inum, u64 ioff, u8 key_typ !! 2110 *root, struct btrfs_key *key, struct btrfs_path *p, int 595 int btrfs_search_slot(struct btrfs_trans_handl !! 2111 ins_len, int cow); 596 const struct btrfs_key * !! 2112 int btrfs_realloc_node(struct btrfs_trans_handle *trans, 597 int ins_len, int cow); !! 2113 struct btrfs_root *root, struct extent_buffer *parent, 598 int btrfs_search_old_slot(struct btrfs_root *r !! 2114 int start_slot, int cache_only, u64 *last_ret, 599 struct btrfs_path *p !! 2115 struct btrfs_key *progress); 600 int btrfs_search_slot_for_read(struct btrfs_ro !! 2116 void btrfs_release_path(struct btrfs_root *root, struct btrfs_path *p); 601 const struct bt << 602 struct btrfs_pa << 603 int return_any) << 604 void btrfs_release_path(struct btrfs_path *p); << 605 struct btrfs_path *btrfs_alloc_path(void); 2117 struct btrfs_path *btrfs_alloc_path(void); 606 void btrfs_free_path(struct btrfs_path *p); 2118 void btrfs_free_path(struct btrfs_path *p); 607 DEFINE_FREE(btrfs_free_path, struct btrfs_path !! 2119 void btrfs_set_path_blocking(struct btrfs_path *p); >> 2120 void btrfs_unlock_up_safe(struct btrfs_path *p, int level); 608 2121 609 int btrfs_del_items(struct btrfs_trans_handle 2122 int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root, 610 struct btrfs_path *path, in 2123 struct btrfs_path *path, int slot, int nr); 611 static inline int btrfs_del_item(struct btrfs_ 2124 static inline int btrfs_del_item(struct btrfs_trans_handle *trans, 612 struct btrfs_ 2125 struct btrfs_root *root, 613 struct btrfs_ 2126 struct btrfs_path *path) 614 { 2127 { 615 return btrfs_del_items(trans, root, pa 2128 return btrfs_del_items(trans, root, path, path->slots[0], 1); 616 } 2129 } 617 2130 618 /* !! 2131 int btrfs_insert_item(struct btrfs_trans_handle *trans, struct btrfs_root 619 * Describes a batch of items to insert in a b !! 2132 *root, struct btrfs_key *key, void *data, u32 data_size); 620 * btrfs_insert_empty_items(). !! 2133 int btrfs_insert_some_items(struct btrfs_trans_handle *trans, 621 */ !! 2134 struct btrfs_root *root, 622 struct btrfs_item_batch { !! 2135 struct btrfs_path *path, 623 /* !! 2136 struct btrfs_key *cpu_key, u32 *data_size, 624 * Pointer to an array containing the !! 2137 int nr); 625 * sorted order). << 626 */ << 627 const struct btrfs_key *keys; << 628 /* Pointer to an array containing the << 629 const u32 *data_sizes; << 630 /* << 631 * The sum of data sizes for all items << 632 * setting up the data_sizes array, so << 633 * than having btrfs_insert_empty_item << 634 * doing it, as it would avoid an extr << 635 * array, and in the case of setup_ite << 636 * it while holding a write lock on a << 637 * too, unnecessarily increasing the s << 638 */ << 639 u32 total_data_size; << 640 /* Size of the keys and data_sizes arr << 641 int nr; << 642 }; << 643 << 644 void btrfs_setup_item_for_insert(struct btrfs_ << 645 struct btrfs_ << 646 struct btrfs_ << 647 const struct << 648 u32 data_size << 649 int btrfs_insert_item(struct btrfs_trans_handl << 650 const struct btrfs_key * << 651 int btrfs_insert_empty_items(struct btrfs_tran 2138 int btrfs_insert_empty_items(struct btrfs_trans_handle *trans, 652 struct btrfs_root 2139 struct btrfs_root *root, 653 struct btrfs_path 2140 struct btrfs_path *path, 654 const struct btrf !! 2141 struct btrfs_key *cpu_key, u32 *data_size, int nr); 655 2142 656 static inline int btrfs_insert_empty_item(stru 2143 static inline int btrfs_insert_empty_item(struct btrfs_trans_handle *trans, 657 stru 2144 struct btrfs_root *root, 658 stru 2145 struct btrfs_path *path, 659 cons !! 2146 struct btrfs_key *key, 660 u32 2147 u32 data_size) 661 { 2148 { 662 struct btrfs_item_batch batch; !! 2149 return btrfs_insert_empty_items(trans, root, path, key, &data_size, 1); 663 << 664 batch.keys = key; << 665 batch.data_sizes = &data_size; << 666 batch.total_data_size = data_size; << 667 batch.nr = 1; << 668 << 669 return btrfs_insert_empty_items(trans, << 670 } << 671 << 672 int btrfs_next_old_leaf(struct btrfs_root *roo << 673 u64 time_seq); << 674 << 675 int btrfs_search_backwards(struct btrfs_root * << 676 struct btrfs_path * << 677 << 678 int btrfs_get_next_valid_item(struct btrfs_roo << 679 struct btrfs_pat << 680 << 681 /* << 682 * Search in @root for a given @key, and store << 683 * << 684 * @root: The root node of the tree. << 685 * @key: The key we are looking for. << 686 * @found_key: Will hold the found item. << 687 * @path: Holds the current slot/leaf. << 688 * @iter_ret: Contains the value returned fr << 689 * btrfs_get_next_valid_item, whi << 690 * << 691 * The @iter_ret is an output variable that wi << 692 * btrfs_search_slot, if it encountered an err << 693 * btrfs_get_next_valid_item otherwise. That r << 694 * slot was found, 1 if there were no more lea << 695 * << 696 * It's recommended to use a separate variable << 697 * set the function return value so there's no << 698 * values stemming from btrfs_search_slot. << 699 */ << 700 #define btrfs_for_each_slot(root, key, found_k << 701 for (iter_ret = btrfs_search_slot(NULL << 702 (iter_ret) >= 0 && << 703 (iter_ret = btrfs_get_next_val << 704 (path)->slots[0]++ << 705 ) << 706 << 707 int btrfs_next_old_item(struct btrfs_root *roo << 708 << 709 /* << 710 * Search the tree again to find a leaf with g << 711 * << 712 * Returns 0 if it found something or 1 if the << 713 * Returns < 0 on error. << 714 */ << 715 static inline int btrfs_next_leaf(struct btrfs << 716 { << 717 return btrfs_next_old_leaf(root, path, << 718 } << 719 << 720 static inline int btrfs_next_item(struct btrfs << 721 { << 722 return btrfs_next_old_item(root, p, 0) << 723 } << 724 int btrfs_leaf_free_space(const struct extent_ << 725 << 726 static inline int is_fstree(u64 rootid) << 727 { << 728 if (rootid == BTRFS_FS_TREE_OBJECTID | << 729 ((s64)rootid >= (s64)BTRFS_FIRST_F << 730 !btrfs_qgroup_level(rootid))) << 731 return 1; << 732 return 0; << 733 } << 734 << 735 static inline bool btrfs_is_data_reloc_root(co << 736 { << 737 return root->root_key.objectid == BTRF << 738 } 2150 } 739 2151 740 u16 btrfs_csum_type_size(u16 type); !! 2152 int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path); 741 int btrfs_super_csum_size(const struct btrfs_s !! 2153 int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path); 742 const char *btrfs_super_csum_name(u16 csum_typ !! 2154 int btrfs_leaf_free_space(struct btrfs_root *root, struct extent_buffer *leaf); 743 const char *btrfs_super_csum_driver(u16 csum_t !! 2155 int btrfs_drop_snapshot(struct btrfs_root *root, int update_ref); 744 size_t __attribute_const__ btrfs_get_num_csums !! 2156 int btrfs_drop_subtree(struct btrfs_trans_handle *trans, >> 2157 struct btrfs_root *root, >> 2158 struct extent_buffer *node, >> 2159 struct extent_buffer *parent); >> 2160 /* root-item.c */ >> 2161 int btrfs_find_root_ref(struct btrfs_root *tree_root, >> 2162 struct btrfs_path *path, >> 2163 u64 root_id, u64 ref_id); >> 2164 int btrfs_add_root_ref(struct btrfs_trans_handle *trans, >> 2165 struct btrfs_root *tree_root, >> 2166 u64 root_id, u64 ref_id, u64 dirid, u64 sequence, >> 2167 const char *name, int name_len); >> 2168 int btrfs_del_root_ref(struct btrfs_trans_handle *trans, >> 2169 struct btrfs_root *tree_root, >> 2170 u64 root_id, u64 ref_id, u64 dirid, u64 *sequence, >> 2171 const char *name, int name_len); >> 2172 int btrfs_del_root(struct btrfs_trans_handle *trans, struct btrfs_root *root, >> 2173 struct btrfs_key *key); >> 2174 int btrfs_insert_root(struct btrfs_trans_handle *trans, struct btrfs_root >> 2175 *root, struct btrfs_key *key, struct btrfs_root_item >> 2176 *item); >> 2177 int btrfs_update_root(struct btrfs_trans_handle *trans, struct btrfs_root >> 2178 *root, struct btrfs_key *key, struct btrfs_root_item >> 2179 *item); >> 2180 int btrfs_find_last_root(struct btrfs_root *root, u64 objectid, struct >> 2181 btrfs_root_item *item, struct btrfs_key *key); >> 2182 int btrfs_search_root(struct btrfs_root *root, u64 search_start, >> 2183 u64 *found_objectid); >> 2184 int btrfs_find_dead_roots(struct btrfs_root *root, u64 objectid); >> 2185 int btrfs_find_orphan_roots(struct btrfs_root *tree_root); >> 2186 int btrfs_set_root_node(struct btrfs_root_item *item, >> 2187 struct extent_buffer *node); >> 2188 void btrfs_check_and_init_root_item(struct btrfs_root_item *item); >> 2189 >> 2190 /* dir-item.c */ >> 2191 int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, >> 2192 struct btrfs_root *root, const char *name, >> 2193 int name_len, u64 dir, >> 2194 struct btrfs_key *location, u8 type, u64 index); >> 2195 struct btrfs_dir_item *btrfs_lookup_dir_item(struct btrfs_trans_handle *trans, >> 2196 struct btrfs_root *root, >> 2197 struct btrfs_path *path, u64 dir, >> 2198 const char *name, int name_len, >> 2199 int mod); >> 2200 struct btrfs_dir_item * >> 2201 btrfs_lookup_dir_index_item(struct btrfs_trans_handle *trans, >> 2202 struct btrfs_root *root, >> 2203 struct btrfs_path *path, u64 dir, >> 2204 u64 objectid, const char *name, int name_len, >> 2205 int mod); >> 2206 struct btrfs_dir_item * >> 2207 btrfs_search_dir_index_item(struct btrfs_root *root, >> 2208 struct btrfs_path *path, u64 dirid, >> 2209 const char *name, int name_len); >> 2210 struct btrfs_dir_item *btrfs_match_dir_item_name(struct btrfs_root *root, >> 2211 struct btrfs_path *path, >> 2212 const char *name, int name_len); >> 2213 int btrfs_delete_one_dir_name(struct btrfs_trans_handle *trans, >> 2214 struct btrfs_root *root, >> 2215 struct btrfs_path *path, >> 2216 struct btrfs_dir_item *di); >> 2217 int btrfs_insert_xattr_item(struct btrfs_trans_handle *trans, >> 2218 struct btrfs_root *root, >> 2219 struct btrfs_path *path, u64 objectid, >> 2220 const char *name, u16 name_len, >> 2221 const void *data, u16 data_len); >> 2222 struct btrfs_dir_item *btrfs_lookup_xattr(struct btrfs_trans_handle *trans, >> 2223 struct btrfs_root *root, >> 2224 struct btrfs_path *path, u64 dir, >> 2225 const char *name, u16 name_len, >> 2226 int mod); >> 2227 >> 2228 /* orphan.c */ >> 2229 int btrfs_insert_orphan_item(struct btrfs_trans_handle *trans, >> 2230 struct btrfs_root *root, u64 offset); >> 2231 int btrfs_del_orphan_item(struct btrfs_trans_handle *trans, >> 2232 struct btrfs_root *root, u64 offset); >> 2233 int btrfs_find_orphan_item(struct btrfs_root *root, u64 offset); >> 2234 >> 2235 /* inode-map.c */ >> 2236 int btrfs_find_free_objectid(struct btrfs_trans_handle *trans, >> 2237 struct btrfs_root *fs_root, >> 2238 u64 dirid, u64 *objectid); >> 2239 int btrfs_find_highest_inode(struct btrfs_root *fs_root, u64 *objectid); >> 2240 >> 2241 /* inode-item.c */ >> 2242 int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans, >> 2243 struct btrfs_root *root, >> 2244 const char *name, int name_len, >> 2245 u64 inode_objectid, u64 ref_objectid, u64 index); >> 2246 int btrfs_del_inode_ref(struct btrfs_trans_handle *trans, >> 2247 struct btrfs_root *root, >> 2248 const char *name, int name_len, >> 2249 u64 inode_objectid, u64 ref_objectid, u64 *index); >> 2250 int btrfs_insert_empty_inode(struct btrfs_trans_handle *trans, >> 2251 struct btrfs_root *root, >> 2252 struct btrfs_path *path, u64 objectid); >> 2253 int btrfs_lookup_inode(struct btrfs_trans_handle *trans, struct btrfs_root >> 2254 *root, struct btrfs_path *path, >> 2255 struct btrfs_key *location, int mod); >> 2256 >> 2257 /* file-item.c */ >> 2258 int btrfs_del_csums(struct btrfs_trans_handle *trans, >> 2259 struct btrfs_root *root, u64 bytenr, u64 len); >> 2260 int btrfs_lookup_bio_sums(struct btrfs_root *root, struct inode *inode, >> 2261 struct bio *bio, u32 *dst); >> 2262 int btrfs_insert_file_extent(struct btrfs_trans_handle *trans, >> 2263 struct btrfs_root *root, >> 2264 u64 objectid, u64 pos, >> 2265 u64 disk_offset, u64 disk_num_bytes, >> 2266 u64 num_bytes, u64 offset, u64 ram_bytes, >> 2267 u8 compression, u8 encryption, u16 other_encoding); >> 2268 int btrfs_lookup_file_extent(struct btrfs_trans_handle *trans, >> 2269 struct btrfs_root *root, >> 2270 struct btrfs_path *path, u64 objectid, >> 2271 u64 bytenr, int mod); >> 2272 int btrfs_csum_file_blocks(struct btrfs_trans_handle *trans, >> 2273 struct btrfs_root *root, >> 2274 struct btrfs_ordered_sum *sums); >> 2275 int btrfs_csum_one_bio(struct btrfs_root *root, struct inode *inode, >> 2276 struct bio *bio, u64 file_start, int contig); >> 2277 int btrfs_csum_file_bytes(struct btrfs_root *root, struct inode *inode, >> 2278 u64 start, unsigned long len); >> 2279 struct btrfs_csum_item *btrfs_lookup_csum(struct btrfs_trans_handle *trans, >> 2280 struct btrfs_root *root, >> 2281 struct btrfs_path *path, >> 2282 u64 bytenr, int cow); >> 2283 int btrfs_csum_truncate(struct btrfs_trans_handle *trans, >> 2284 struct btrfs_root *root, struct btrfs_path *path, >> 2285 u64 isize); >> 2286 int btrfs_lookup_csums_range(struct btrfs_root *root, u64 start, >> 2287 u64 end, struct list_head *list); >> 2288 /* inode.c */ >> 2289 >> 2290 /* RHEL and EL kernels have a patch that renames PG_checked to FsMisc */ >> 2291 #if defined(ClearPageFsMisc) && !defined(ClearPageChecked) >> 2292 #define ClearPageChecked ClearPageFsMisc >> 2293 #define SetPageChecked SetPageFsMisc >> 2294 #define PageChecked PageFsMisc >> 2295 #endif 745 2296 746 /* !! 2297 struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry); 747 * We use page status Private2 to indicate the !! 2298 int btrfs_set_inode_index(struct inode *dir, u64 *index); 748 * unfinished IO. !! 2299 int btrfs_unlink_inode(struct btrfs_trans_handle *trans, 749 * !! 2300 struct btrfs_root *root, 750 * Rename the Private2 accessors to Ordered, t !! 2301 struct inode *dir, struct inode *inode, 751 */ !! 2302 const char *name, int name_len); 752 #define PageOrdered(page) PagePr !! 2303 int btrfs_add_link(struct btrfs_trans_handle *trans, 753 #define SetPageOrdered(page) SetPag !! 2304 struct inode *parent_inode, struct inode *inode, 754 #define ClearPageOrdered(page) ClearP !! 2305 const char *name, int name_len, int add_backref, u64 index); 755 #define folio_test_ordered(folio) folio_ !! 2306 int btrfs_unlink_subvol(struct btrfs_trans_handle *trans, 756 #define folio_set_ordered(folio) folio_ !! 2307 struct btrfs_root *root, 757 #define folio_clear_ordered(folio) folio_ !! 2308 struct inode *dir, u64 objectid, >> 2309 const char *name, int name_len); >> 2310 int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans, >> 2311 struct btrfs_root *root, >> 2312 struct inode *inode, u64 new_size, >> 2313 u32 min_type); 758 2314 >> 2315 int btrfs_start_delalloc_inodes(struct btrfs_root *root, int delay_iput); >> 2316 int btrfs_set_extent_delalloc(struct inode *inode, u64 start, u64 end); >> 2317 int btrfs_writepages(struct address_space *mapping, >> 2318 struct writeback_control *wbc); >> 2319 int btrfs_create_subvol_root(struct btrfs_trans_handle *trans, >> 2320 struct btrfs_root *new_root, >> 2321 u64 new_dirid, u64 alloc_hint); >> 2322 int btrfs_merge_bio_hook(struct page *page, unsigned long offset, >> 2323 size_t size, struct bio *bio, unsigned long bio_flags); >> 2324 >> 2325 unsigned long btrfs_force_ra(struct address_space *mapping, >> 2326 struct file_ra_state *ra, struct file *file, >> 2327 pgoff_t offset, pgoff_t last_index); >> 2328 int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf); >> 2329 int btrfs_readpage(struct file *file, struct page *page); >> 2330 void btrfs_delete_inode(struct inode *inode); >> 2331 void btrfs_put_inode(struct inode *inode); >> 2332 int btrfs_write_inode(struct inode *inode, int wait); >> 2333 void btrfs_dirty_inode(struct inode *inode); >> 2334 struct inode *btrfs_alloc_inode(struct super_block *sb); >> 2335 void btrfs_destroy_inode(struct inode *inode); >> 2336 void btrfs_drop_inode(struct inode *inode); >> 2337 int btrfs_init_cachep(void); >> 2338 void btrfs_destroy_cachep(void); >> 2339 long btrfs_ioctl_trans_end(struct file *file); >> 2340 struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location, >> 2341 struct btrfs_root *root); >> 2342 int btrfs_commit_write(struct file *file, struct page *page, >> 2343 unsigned from, unsigned to); >> 2344 struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page, >> 2345 size_t page_offset, u64 start, u64 end, >> 2346 int create); >> 2347 int btrfs_update_inode(struct btrfs_trans_handle *trans, >> 2348 struct btrfs_root *root, >> 2349 struct inode *inode); >> 2350 int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode); >> 2351 int btrfs_orphan_del(struct btrfs_trans_handle *trans, struct inode *inode); >> 2352 void btrfs_orphan_cleanup(struct btrfs_root *root); >> 2353 int btrfs_cont_expand(struct inode *inode, loff_t size); >> 2354 int btrfs_invalidate_inodes(struct btrfs_root *root); >> 2355 void btrfs_add_delayed_iput(struct inode *inode); >> 2356 void btrfs_run_delayed_iputs(struct btrfs_root *root); >> 2357 extern const struct dentry_operations btrfs_dentry_operations; >> 2358 >> 2359 /* ioctl.c */ >> 2360 long btrfs_ioctl(struct file *file, unsigned int cmd, unsigned long arg); >> 2361 void btrfs_update_iflags(struct inode *inode); >> 2362 void btrfs_inherit_iflags(struct inode *inode, struct inode *dir); >> 2363 >> 2364 /* file.c */ >> 2365 int btrfs_sync_file(struct file *file, struct dentry *dentry, int datasync); >> 2366 int btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end, >> 2367 int skip_pinned); >> 2368 int btrfs_check_file(struct btrfs_root *root, struct inode *inode); >> 2369 extern const struct file_operations btrfs_file_operations; >> 2370 int btrfs_drop_extents(struct btrfs_trans_handle *trans, struct inode *inode, >> 2371 u64 start, u64 end, u64 *hint_byte, int drop_cache); >> 2372 int btrfs_mark_extent_written(struct btrfs_trans_handle *trans, >> 2373 struct inode *inode, u64 start, u64 end); >> 2374 int btrfs_release_file(struct inode *inode, struct file *file); >> 2375 >> 2376 /* tree-defrag.c */ >> 2377 int btrfs_defrag_leaves(struct btrfs_trans_handle *trans, >> 2378 struct btrfs_root *root, int cache_only); >> 2379 >> 2380 /* sysfs.c */ >> 2381 int btrfs_init_sysfs(void); >> 2382 void btrfs_exit_sysfs(void); >> 2383 int btrfs_sysfs_add_super(struct btrfs_fs_info *fs); >> 2384 int btrfs_sysfs_add_root(struct btrfs_root *root); >> 2385 void btrfs_sysfs_del_root(struct btrfs_root *root); >> 2386 void btrfs_sysfs_del_super(struct btrfs_fs_info *root); >> 2387 >> 2388 /* xattr.c */ >> 2389 ssize_t btrfs_listxattr(struct dentry *dentry, char *buffer, size_t size); >> 2390 >> 2391 /* super.c */ >> 2392 u64 btrfs_parse_size(char *str); >> 2393 int btrfs_parse_options(struct btrfs_root *root, char *options); >> 2394 int btrfs_sync_fs(struct super_block *sb, int wait); >> 2395 >> 2396 /* acl.c */ >> 2397 #ifdef CONFIG_BTRFS_FS_POSIX_ACL >> 2398 int btrfs_check_acl(struct inode *inode, int mask); >> 2399 #else >> 2400 #define btrfs_check_acl NULL >> 2401 #endif >> 2402 int btrfs_init_acl(struct btrfs_trans_handle *trans, >> 2403 struct inode *inode, struct inode *dir); >> 2404 int btrfs_acl_chmod(struct inode *inode); >> 2405 >> 2406 /* relocation.c */ >> 2407 int btrfs_relocate_block_group(struct btrfs_root *root, u64 group_start); >> 2408 int btrfs_init_reloc_root(struct btrfs_trans_handle *trans, >> 2409 struct btrfs_root *root); >> 2410 int btrfs_update_reloc_root(struct btrfs_trans_handle *trans, >> 2411 struct btrfs_root *root); >> 2412 int btrfs_recover_relocation(struct btrfs_root *root); >> 2413 int btrfs_reloc_clone_csums(struct inode *inode, u64 file_pos, u64 len); 759 #endif 2414 #endif 760 2415
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.