1 /* 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. 17 */ 18 19 #ifndef __BTRFS_CTREE__ 20 #define __BTRFS_CTREE__ 21 22 #include <linux/mm.h> 23 #include <linux/highmem.h> 24 #include <linux/fs.h> 25 #include <linux/rwsem.h> 26 #include <linux/completion.h> 27 #include <linux/backing-dev.h> 28 #include <linux/wait.h> 29 #include <linux/slab.h> 30 #include <linux/kobject.h> 31 #include <trace/events/btrfs.h> 32 #include <asm/kmap_types.h> 33 #include <linux/pagemap.h> 34 #include "extent_io.h" 35 #include "extent_map.h" 36 #include "async-thread.h" 37 #include "ioctl.h" 38 39 struct btrfs_trans_handle; 40 struct btrfs_transaction; 41 struct btrfs_pending_snapshot; 42 extern struct kmem_cache *btrfs_trans_handle_cachep; 43 extern struct kmem_cache *btrfs_transaction_cachep; 44 extern struct kmem_cache *btrfs_bit_radix_cachep; 45 extern struct kmem_cache *btrfs_path_cachep; 46 extern struct kmem_cache *btrfs_free_space_cachep; 47 struct btrfs_ordered_sum; 48 49 #define BTRFS_MAGIC "_BHRfS_M" 50 51 #define BTRFS_MAX_MIRRORS 2 52 53 #define BTRFS_MAX_LEVEL 8 54 55 #define BTRFS_COMPAT_EXTENT_TREE_V0 56 57 /* 58 * files bigger than this get some pre-flushing when they are added 59 * to the ordered operations list. That way we limit the total 60 * work done by the commit 61 */ 62 #define BTRFS_ORDERED_OPERATIONS_FLUSH_LIMIT (8 * 1024 * 1024) 63 64 /* holds pointers to all of the tree roots */ 65 #define BTRFS_ROOT_TREE_OBJECTID 1ULL 66 67 /* stores information about which extents are in use, and reference counts */ 68 #define BTRFS_EXTENT_TREE_OBJECTID 2ULL 69 70 /* 71 * chunk tree stores translations from logical -> physical block numbering 72 * the super block points to the chunk tree 73 */ 74 #define BTRFS_CHUNK_TREE_OBJECTID 3ULL 75 76 /* 77 * stores information about which areas of a given device are in use. 78 * one per device. The tree of tree roots points to the device tree 79 */ 80 #define BTRFS_DEV_TREE_OBJECTID 4ULL 81 82 /* one per subvolume, storing files and directories */ 83 #define BTRFS_FS_TREE_OBJECTID 5ULL 84 85 /* directory objectid inside the root tree */ 86 #define BTRFS_ROOT_TREE_DIR_OBJECTID 6ULL 87 88 /* holds checksums of all the data extents */ 89 #define BTRFS_CSUM_TREE_OBJECTID 7ULL 90 91 /* for storing balance parameters in the root tree */ 92 #define BTRFS_BALANCE_OBJECTID -4ULL 93 94 /* orhpan objectid for tracking unlinked/truncated files */ 95 #define BTRFS_ORPHAN_OBJECTID -5ULL 96 97 /* does write ahead logging to speed up fsyncs */ 98 #define BTRFS_TREE_LOG_OBJECTID -6ULL 99 #define BTRFS_TREE_LOG_FIXUP_OBJECTID -7ULL 100 101 /* for space balancing */ 102 #define BTRFS_TREE_RELOC_OBJECTID -8ULL 103 #define BTRFS_DATA_RELOC_TREE_OBJECTID -9ULL 104 105 /* 106 * extent checksums all have this objectid 107 * this allows them to share the logging tree 108 * for fsyncs 109 */ 110 #define BTRFS_EXTENT_CSUM_OBJECTID -10ULL 111 112 /* For storing free space cache */ 113 #define BTRFS_FREE_SPACE_OBJECTID -11ULL 114 115 /* 116 * The inode number assigned to the special inode for sotring 117 * free ino cache 118 */ 119 #define BTRFS_FREE_INO_OBJECTID -12ULL 120 121 /* dummy objectid represents multiple objectids */ 122 #define BTRFS_MULTIPLE_OBJECTIDS -255ULL 123 124 /* 125 * All files have objectids in this range. 126 */ 127 #define BTRFS_FIRST_FREE_OBJECTID 256ULL 128 #define BTRFS_LAST_FREE_OBJECTID -256ULL 129 #define BTRFS_FIRST_CHUNK_TREE_OBJECTID 256ULL 130 131 132 /* 133 * the device items go into the chunk tree. The key is in the form 134 * [ 1 BTRFS_DEV_ITEM_KEY device_id ] 135 */ 136 #define BTRFS_DEV_ITEMS_OBJECTID 1ULL 137 138 #define BTRFS_BTREE_INODE_OBJECTID 1 139 140 #define BTRFS_EMPTY_SUBVOL_DIR_OBJECTID 2 141 142 /* 143 * the max metadata block size. This limit is somewhat artificial, 144 * but the memmove costs go through the roof for larger blocks. 145 */ 146 #define BTRFS_MAX_METADATA_BLOCKSIZE 65536 147 148 /* 149 * we can actually store much bigger names, but lets not confuse the rest 150 * of linux 151 */ 152 #define BTRFS_NAME_LEN 255 153 154 /* 32 bytes in various csum fields */ 155 #define BTRFS_CSUM_SIZE 32 156 157 /* csum types */ 158 #define BTRFS_CSUM_TYPE_CRC32 0 159 160 static int btrfs_csum_sizes[] = { 4, 0 }; 161 162 /* four bytes for CRC32 */ 163 #define BTRFS_EMPTY_DIR_SIZE 0 164 165 #define BTRFS_FT_UNKNOWN 0 166 #define BTRFS_FT_REG_FILE 1 167 #define BTRFS_FT_DIR 2 168 #define BTRFS_FT_CHRDEV 3 169 #define BTRFS_FT_BLKDEV 4 170 #define BTRFS_FT_FIFO 5 171 #define BTRFS_FT_SOCK 6 172 #define BTRFS_FT_SYMLINK 7 173 #define BTRFS_FT_XATTR 8 174 #define BTRFS_FT_MAX 9 175 176 /* ioprio of readahead is set to idle */ 177 #define BTRFS_IOPRIO_READA (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0)) 178 179 /* 180 * The key defines the order in the tree, and so it also defines (optimal) 181 * block layout. 182 * 183 * objectid corresponds to the inode number. 184 * 185 * type tells us things about the object, and is a kind of stream selector. 186 * so for a given inode, keys with type of 1 might refer to the inode data, 187 * type of 2 may point to file data in the btree and type == 3 may point to 188 * extents. 189 * 190 * offset is the starting byte offset for this key in the stream. 191 * 192 * btrfs_disk_key is in disk byte order. struct btrfs_key is always 193 * in cpu native order. Otherwise they are identical and their sizes 194 * should be the same (ie both packed) 195 */ 196 struct btrfs_disk_key { 197 __le64 objectid; 198 u8 type; 199 __le64 offset; 200 } __attribute__ ((__packed__)); 201 202 struct btrfs_key { 203 u64 objectid; 204 u8 type; 205 u64 offset; 206 } __attribute__ ((__packed__)); 207 208 struct btrfs_mapping_tree { 209 struct extent_map_tree map_tree; 210 }; 211 212 struct btrfs_dev_item { 213 /* the internal btrfs device id */ 214 __le64 devid; 215 216 /* size of the device */ 217 __le64 total_bytes; 218 219 /* bytes used */ 220 __le64 bytes_used; 221 222 /* optimal io alignment for this device */ 223 __le32 io_align; 224 225 /* optimal io width for this device */ 226 __le32 io_width; 227 228 /* minimal io size for this device */ 229 __le32 sector_size; 230 231 /* type and info about this device */ 232 __le64 type; 233 234 /* expected generation for this device */ 235 __le64 generation; 236 237 /* 238 * starting byte of this partition on the device, 239 * to allow for stripe alignment in the future 240 */ 241 __le64 start_offset; 242 243 /* grouping information for allocation decisions */ 244 __le32 dev_group; 245 246 /* seek speed 0-100 where 100 is fastest */ 247 u8 seek_speed; 248 249 /* bandwidth 0-100 where 100 is fastest */ 250 u8 bandwidth; 251 252 /* btrfs generated uuid for this device */ 253 u8 uuid[BTRFS_UUID_SIZE]; 254 255 /* uuid of FS who owns this device */ 256 u8 fsid[BTRFS_UUID_SIZE]; 257 } __attribute__ ((__packed__)); 258 259 struct btrfs_stripe { 260 __le64 devid; 261 __le64 offset; 262 u8 dev_uuid[BTRFS_UUID_SIZE]; 263 } __attribute__ ((__packed__)); 264 265 struct btrfs_chunk { 266 /* size of this chunk in bytes */ 267 __le64 length; 268 269 /* objectid of the root referencing this chunk */ 270 __le64 owner; 271 272 __le64 stripe_len; 273 __le64 type; 274 275 /* optimal io alignment for this chunk */ 276 __le32 io_align; 277 278 /* optimal io width for this chunk */ 279 __le32 io_width; 280 281 /* minimal io size for this chunk */ 282 __le32 sector_size; 283 284 /* 2^16 stripes is quite a lot, a second limit is the size of a single 285 * item in the btree 286 */ 287 __le16 num_stripes; 288 289 /* sub stripes only matter for raid10 */ 290 __le16 sub_stripes; 291 struct btrfs_stripe stripe; 292 /* additional stripes go here */ 293 } __attribute__ ((__packed__)); 294 295 #define BTRFS_FREE_SPACE_EXTENT 1 296 #define BTRFS_FREE_SPACE_BITMAP 2 297 298 struct btrfs_free_space_entry { 299 __le64 offset; 300 __le64 bytes; 301 u8 type; 302 } __attribute__ ((__packed__)); 303 304 struct btrfs_free_space_header { 305 struct btrfs_disk_key location; 306 __le64 generation; 307 __le64 num_entries; 308 __le64 num_bitmaps; 309 } __attribute__ ((__packed__)); 310 311 static inline unsigned long btrfs_chunk_item_size(int num_stripes) 312 { 313 BUG_ON(num_stripes == 0); 314 return sizeof(struct btrfs_chunk) + 315 sizeof(struct btrfs_stripe) * (num_stripes - 1); 316 } 317 318 #define BTRFS_HEADER_FLAG_WRITTEN (1ULL << 0) 319 #define BTRFS_HEADER_FLAG_RELOC (1ULL << 1) 320 321 /* 322 * File system states 323 */ 324 325 /* Errors detected */ 326 #define BTRFS_SUPER_FLAG_ERROR (1ULL << 2) 327 328 #define BTRFS_SUPER_FLAG_SEEDING (1ULL << 32) 329 #define BTRFS_SUPER_FLAG_METADUMP (1ULL << 33) 330 331 #define BTRFS_BACKREF_REV_MAX 256 332 #define BTRFS_BACKREF_REV_SHIFT 56 333 #define BTRFS_BACKREF_REV_MASK (((u64)BTRFS_BACKREF_REV_MAX - 1) << \ 334 BTRFS_BACKREF_REV_SHIFT) 335 336 #define BTRFS_OLD_BACKREF_REV 0 337 #define BTRFS_MIXED_BACKREF_REV 1 338 339 /* 340 * every tree block (leaf or node) starts with this header. 341 */ 342 struct btrfs_header { 343 /* these first four must match the super block */ 344 u8 csum[BTRFS_CSUM_SIZE]; 345 u8 fsid[BTRFS_FSID_SIZE]; /* FS specific uuid */ 346 __le64 bytenr; /* which block this node is supposed to live in */ 347 __le64 flags; 348 349 /* allowed to be different from the super from here on down */ 350 u8 chunk_tree_uuid[BTRFS_UUID_SIZE]; 351 __le64 generation; 352 __le64 owner; 353 __le32 nritems; 354 u8 level; 355 } __attribute__ ((__packed__)); 356 357 #define BTRFS_NODEPTRS_PER_BLOCK(r) (((r)->nodesize - \ 358 sizeof(struct btrfs_header)) / \ 359 sizeof(struct btrfs_key_ptr)) 360 #define __BTRFS_LEAF_DATA_SIZE(bs) ((bs) - sizeof(struct btrfs_header)) 361 #define BTRFS_LEAF_DATA_SIZE(r) (__BTRFS_LEAF_DATA_SIZE(r->leafsize)) 362 #define BTRFS_MAX_INLINE_DATA_SIZE(r) (BTRFS_LEAF_DATA_SIZE(r) - \ 363 sizeof(struct btrfs_item) - \ 364 sizeof(struct btrfs_file_extent_item)) 365 #define BTRFS_MAX_XATTR_SIZE(r) (BTRFS_LEAF_DATA_SIZE(r) - \ 366 sizeof(struct btrfs_item) -\ 367 sizeof(struct btrfs_dir_item)) 368 369 370 /* 371 * this is a very generous portion of the super block, giving us 372 * room to translate 14 chunks with 3 stripes each. 373 */ 374 #define BTRFS_SYSTEM_CHUNK_ARRAY_SIZE 2048 375 #define BTRFS_LABEL_SIZE 256 376 377 /* 378 * just in case we somehow lose the roots and are not able to mount, 379 * we store an array of the roots from previous transactions 380 * in the super. 381 */ 382 #define BTRFS_NUM_BACKUP_ROOTS 4 383 struct btrfs_root_backup { 384 __le64 tree_root; 385 __le64 tree_root_gen; 386 387 __le64 chunk_root; 388 __le64 chunk_root_gen; 389 390 __le64 extent_root; 391 __le64 extent_root_gen; 392 393 __le64 fs_root; 394 __le64 fs_root_gen; 395 396 __le64 dev_root; 397 __le64 dev_root_gen; 398 399 __le64 csum_root; 400 __le64 csum_root_gen; 401 402 __le64 total_bytes; 403 __le64 bytes_used; 404 __le64 num_devices; 405 /* future */ 406 __le64 unsed_64[4]; 407 408 u8 tree_root_level; 409 u8 chunk_root_level; 410 u8 extent_root_level; 411 u8 fs_root_level; 412 u8 dev_root_level; 413 u8 csum_root_level; 414 /* future and to align */ 415 u8 unused_8[10]; 416 } __attribute__ ((__packed__)); 417 418 /* 419 * the super block basically lists the main trees of the FS 420 * it currently lacks any block count etc etc 421 */ 422 struct btrfs_super_block { 423 u8 csum[BTRFS_CSUM_SIZE]; 424 /* the first 4 fields must match struct btrfs_header */ 425 u8 fsid[BTRFS_FSID_SIZE]; /* FS specific uuid */ 426 __le64 bytenr; /* this block number */ 427 __le64 flags; 428 429 /* allowed to be different from the btrfs_header from here own down */ 430 __le64 magic; 431 __le64 generation; 432 __le64 root; 433 __le64 chunk_root; 434 __le64 log_root; 435 436 /* this will help find the new super based on the log root */ 437 __le64 log_root_transid; 438 __le64 total_bytes; 439 __le64 bytes_used; 440 __le64 root_dir_objectid; 441 __le64 num_devices; 442 __le32 sectorsize; 443 __le32 nodesize; 444 __le32 leafsize; 445 __le32 stripesize; 446 __le32 sys_chunk_array_size; 447 __le64 chunk_root_generation; 448 __le64 compat_flags; 449 __le64 compat_ro_flags; 450 __le64 incompat_flags; 451 __le16 csum_type; 452 u8 root_level; 453 u8 chunk_root_level; 454 u8 log_root_level; 455 struct btrfs_dev_item dev_item; 456 457 char label[BTRFS_LABEL_SIZE]; 458 459 __le64 cache_generation; 460 461 /* future expansion */ 462 __le64 reserved[31]; 463 u8 sys_chunk_array[BTRFS_SYSTEM_CHUNK_ARRAY_SIZE]; 464 struct btrfs_root_backup super_roots[BTRFS_NUM_BACKUP_ROOTS]; 465 } __attribute__ ((__packed__)); 466 467 /* 468 * Compat flags that we support. If any incompat flags are set other than the 469 * ones specified below then we will fail to mount 470 */ 471 #define BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF (1ULL << 0) 472 #define BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL (1ULL << 1) 473 #define BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS (1ULL << 2) 474 #define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO (1ULL << 3) 475 /* 476 * some patches floated around with a second compression method 477 * lets save that incompat here for when they do get in 478 * Note we don't actually support it, we're just reserving the 479 * number 480 */ 481 #define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZOv2 (1ULL << 4) 482 483 /* 484 * older kernels tried to do bigger metadata blocks, but the 485 * code was pretty buggy. Lets not let them try anymore. 486 */ 487 #define BTRFS_FEATURE_INCOMPAT_BIG_METADATA (1ULL << 5) 488 489 #define BTRFS_FEATURE_COMPAT_SUPP 0ULL 490 #define BTRFS_FEATURE_COMPAT_RO_SUPP 0ULL 491 #define BTRFS_FEATURE_INCOMPAT_SUPP \ 492 (BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF | \ 493 BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL | \ 494 BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS | \ 495 BTRFS_FEATURE_INCOMPAT_BIG_METADATA | \ 496 BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO) 497 498 /* 499 * A leaf is full of items. offset and size tell us where to find 500 * the item in the leaf (relative to the start of the data area) 501 */ 502 struct btrfs_item { 503 struct btrfs_disk_key key; 504 __le32 offset; 505 __le32 size; 506 } __attribute__ ((__packed__)); 507 508 /* 509 * leaves have an item area and a data area: 510 * [item0, item1....itemN] [free space] [dataN...data1, data0] 511 * 512 * The data is separate from the items to get the keys closer together 513 * during searches. 514 */ 515 struct btrfs_leaf { 516 struct btrfs_header header; 517 struct btrfs_item items[]; 518 } __attribute__ ((__packed__)); 519 520 /* 521 * all non-leaf blocks are nodes, they hold only keys and pointers to 522 * other blocks 523 */ 524 struct btrfs_key_ptr { 525 struct btrfs_disk_key key; 526 __le64 blockptr; 527 __le64 generation; 528 } __attribute__ ((__packed__)); 529 530 struct btrfs_node { 531 struct btrfs_header header; 532 struct btrfs_key_ptr ptrs[]; 533 } __attribute__ ((__packed__)); 534 535 /* 536 * btrfs_paths remember the path taken from the root down to the leaf. 537 * level 0 is always the leaf, and nodes[1...BTRFS_MAX_LEVEL] will point 538 * to any other levels that are present. 539 * 540 * The slots array records the index of the item or block pointer 541 * used while walking the tree. 542 */ 543 struct btrfs_path { 544 struct extent_buffer *nodes[BTRFS_MAX_LEVEL]; 545 int slots[BTRFS_MAX_LEVEL]; 546 /* if there is real range locking, this locks field will change */ 547 int locks[BTRFS_MAX_LEVEL]; 548 int reada; 549 /* keep some upper locks as we walk down */ 550 int lowest_level; 551 552 /* 553 * set by btrfs_split_item, tells search_slot to keep all locks 554 * and to force calls to keep space in the nodes 555 */ 556 unsigned int search_for_split:1; 557 unsigned int keep_locks:1; 558 unsigned int skip_locking:1; 559 unsigned int leave_spinning:1; 560 unsigned int search_commit_root:1; 561 }; 562 563 /* 564 * items in the extent btree are used to record the objectid of the 565 * owner of the block and the number of references 566 */ 567 568 struct btrfs_extent_item { 569 __le64 refs; 570 __le64 generation; 571 __le64 flags; 572 } __attribute__ ((__packed__)); 573 574 struct btrfs_extent_item_v0 { 575 __le32 refs; 576 } __attribute__ ((__packed__)); 577 578 #define BTRFS_MAX_EXTENT_ITEM_SIZE(r) ((BTRFS_LEAF_DATA_SIZE(r) >> 4) - \ 579 sizeof(struct btrfs_item)) 580 581 #define BTRFS_EXTENT_FLAG_DATA (1ULL << 0) 582 #define BTRFS_EXTENT_FLAG_TREE_BLOCK (1ULL << 1) 583 584 /* following flags only apply to tree blocks */ 585 586 /* use full backrefs for extent pointers in the block */ 587 #define BTRFS_BLOCK_FLAG_FULL_BACKREF (1ULL << 8) 588 589 /* 590 * this flag is only used internally by scrub and may be changed at any time 591 * it is only declared here to avoid collisions 592 */ 593 #define BTRFS_EXTENT_FLAG_SUPER (1ULL << 48) 594 595 struct btrfs_tree_block_info { 596 struct btrfs_disk_key key; 597 u8 level; 598 } __attribute__ ((__packed__)); 599 600 struct btrfs_extent_data_ref { 601 __le64 root; 602 __le64 objectid; 603 __le64 offset; 604 __le32 count; 605 } __attribute__ ((__packed__)); 606 607 struct btrfs_shared_data_ref { 608 __le32 count; 609 } __attribute__ ((__packed__)); 610 611 struct btrfs_extent_inline_ref { 612 u8 type; 613 __le64 offset; 614 } __attribute__ ((__packed__)); 615 616 /* old style backrefs item */ 617 struct btrfs_extent_ref_v0 { 618 __le64 root; 619 __le64 generation; 620 __le64 objectid; 621 __le32 count; 622 } __attribute__ ((__packed__)); 623 624 625 /* dev extents record free space on individual devices. The owner 626 * field points back to the chunk allocation mapping tree that allocated 627 * the extent. The chunk tree uuid field is a way to double check the owner 628 */ 629 struct btrfs_dev_extent { 630 __le64 chunk_tree; 631 __le64 chunk_objectid; 632 __le64 chunk_offset; 633 __le64 length; 634 u8 chunk_tree_uuid[BTRFS_UUID_SIZE]; 635 } __attribute__ ((__packed__)); 636 637 struct btrfs_inode_ref { 638 __le64 index; 639 __le16 name_len; 640 /* name goes here */ 641 } __attribute__ ((__packed__)); 642 643 struct btrfs_timespec { 644 __le64 sec; 645 __le32 nsec; 646 } __attribute__ ((__packed__)); 647 648 enum btrfs_compression_type { 649 BTRFS_COMPRESS_NONE = 0, 650 BTRFS_COMPRESS_ZLIB = 1, 651 BTRFS_COMPRESS_LZO = 2, 652 BTRFS_COMPRESS_TYPES = 2, 653 BTRFS_COMPRESS_LAST = 3, 654 }; 655 656 struct btrfs_inode_item { 657 /* nfs style generation number */ 658 __le64 generation; 659 /* transid that last touched this inode */ 660 __le64 transid; 661 __le64 size; 662 __le64 nbytes; 663 __le64 block_group; 664 __le32 nlink; 665 __le32 uid; 666 __le32 gid; 667 __le32 mode; 668 __le64 rdev; 669 __le64 flags; 670 671 /* modification sequence number for NFS */ 672 __le64 sequence; 673 674 /* 675 * a little future expansion, for more than this we can 676 * just grow the inode item and version it 677 */ 678 __le64 reserved[4]; 679 struct btrfs_timespec atime; 680 struct btrfs_timespec ctime; 681 struct btrfs_timespec mtime; 682 struct btrfs_timespec otime; 683 } __attribute__ ((__packed__)); 684 685 struct btrfs_dir_log_item { 686 __le64 end; 687 } __attribute__ ((__packed__)); 688 689 struct btrfs_dir_item { 690 struct btrfs_disk_key location; 691 __le64 transid; 692 __le16 data_len; 693 __le16 name_len; 694 u8 type; 695 } __attribute__ ((__packed__)); 696 697 #define BTRFS_ROOT_SUBVOL_RDONLY (1ULL << 0) 698 699 struct btrfs_root_item { 700 struct btrfs_inode_item inode; 701 __le64 generation; 702 __le64 root_dirid; 703 __le64 bytenr; 704 __le64 byte_limit; 705 __le64 bytes_used; 706 __le64 last_snapshot; 707 __le64 flags; 708 __le32 refs; 709 struct btrfs_disk_key drop_progress; 710 u8 drop_level; 711 u8 level; 712 } __attribute__ ((__packed__)); 713 714 /* 715 * this is used for both forward and backward root refs 716 */ 717 struct btrfs_root_ref { 718 __le64 dirid; 719 __le64 sequence; 720 __le16 name_len; 721 } __attribute__ ((__packed__)); 722 723 struct btrfs_disk_balance_args { 724 /* 725 * profiles to operate on, single is denoted by 726 * BTRFS_AVAIL_ALLOC_BIT_SINGLE 727 */ 728 __le64 profiles; 729 730 /* usage filter */ 731 __le64 usage; 732 733 /* devid filter */ 734 __le64 devid; 735 736 /* devid subset filter [pstart..pend) */ 737 __le64 pstart; 738 __le64 pend; 739 740 /* btrfs virtual address space subset filter [vstart..vend) */ 741 __le64 vstart; 742 __le64 vend; 743 744 /* 745 * profile to convert to, single is denoted by 746 * BTRFS_AVAIL_ALLOC_BIT_SINGLE 747 */ 748 __le64 target; 749 750 /* BTRFS_BALANCE_ARGS_* */ 751 __le64 flags; 752 753 __le64 unused[8]; 754 } __attribute__ ((__packed__)); 755 756 /* 757 * store balance parameters to disk so that balance can be properly 758 * resumed after crash or unmount 759 */ 760 struct btrfs_balance_item { 761 /* BTRFS_BALANCE_* */ 762 __le64 flags; 763 764 struct btrfs_disk_balance_args data; 765 struct btrfs_disk_balance_args meta; 766 struct btrfs_disk_balance_args sys; 767 768 __le64 unused[4]; 769 } __attribute__ ((__packed__)); 770 771 #define BTRFS_FILE_EXTENT_INLINE 0 772 #define BTRFS_FILE_EXTENT_REG 1 773 #define BTRFS_FILE_EXTENT_PREALLOC 2 774 775 struct btrfs_file_extent_item { 776 /* 777 * transaction id that created this extent 778 */ 779 __le64 generation; 780 /* 781 * max number of bytes to hold this extent in ram 782 * when we split a compressed extent we can't know how big 783 * each of the resulting pieces will be. So, this is 784 * an upper limit on the size of the extent in ram instead of 785 * an exact limit. 786 */ 787 __le64 ram_bytes; 788 789 /* 790 * 32 bits for the various ways we might encode the data, 791 * including compression and encryption. If any of these 792 * are set to something a given disk format doesn't understand 793 * it is treated like an incompat flag for reading and writing, 794 * but not for stat. 795 */ 796 u8 compression; 797 u8 encryption; 798 __le16 other_encoding; /* spare for later use */ 799 800 /* are we inline data or a real extent? */ 801 u8 type; 802 803 /* 804 * disk space consumed by the extent, checksum blocks are included 805 * in these numbers 806 */ 807 __le64 disk_bytenr; 808 __le64 disk_num_bytes; 809 /* 810 * the logical offset in file blocks (no csums) 811 * this extent record is for. This allows a file extent to point 812 * into the middle of an existing extent on disk, sharing it 813 * between two snapshots (useful if some bytes in the middle of the 814 * extent have changed 815 */ 816 __le64 offset; 817 /* 818 * the logical number of file blocks (no csums included). This 819 * always reflects the size uncompressed and without encoding. 820 */ 821 __le64 num_bytes; 822 823 } __attribute__ ((__packed__)); 824 825 struct btrfs_csum_item { 826 u8 csum; 827 } __attribute__ ((__packed__)); 828 829 struct btrfs_dev_stats_item { 830 /* 831 * grow this item struct at the end for future enhancements and keep 832 * the existing values unchanged 833 */ 834 __le64 values[BTRFS_DEV_STAT_VALUES_MAX]; 835 } __attribute__ ((__packed__)); 836 837 /* different types of block groups (and chunks) */ 838 #define BTRFS_BLOCK_GROUP_DATA (1ULL << 0) 839 #define BTRFS_BLOCK_GROUP_SYSTEM (1ULL << 1) 840 #define BTRFS_BLOCK_GROUP_METADATA (1ULL << 2) 841 #define BTRFS_BLOCK_GROUP_RAID0 (1ULL << 3) 842 #define BTRFS_BLOCK_GROUP_RAID1 (1ULL << 4) 843 #define BTRFS_BLOCK_GROUP_DUP (1ULL << 5) 844 #define BTRFS_BLOCK_GROUP_RAID10 (1ULL << 6) 845 #define BTRFS_BLOCK_GROUP_RESERVED BTRFS_AVAIL_ALLOC_BIT_SINGLE 846 #define BTRFS_NR_RAID_TYPES 5 847 848 #define BTRFS_BLOCK_GROUP_TYPE_MASK (BTRFS_BLOCK_GROUP_DATA | \ 849 BTRFS_BLOCK_GROUP_SYSTEM | \ 850 BTRFS_BLOCK_GROUP_METADATA) 851 852 #define BTRFS_BLOCK_GROUP_PROFILE_MASK (BTRFS_BLOCK_GROUP_RAID0 | \ 853 BTRFS_BLOCK_GROUP_RAID1 | \ 854 BTRFS_BLOCK_GROUP_DUP | \ 855 BTRFS_BLOCK_GROUP_RAID10) 856 /* 857 * We need a bit for restriper to be able to tell when chunks of type 858 * SINGLE are available. This "extended" profile format is used in 859 * fs_info->avail_*_alloc_bits (in-memory) and balance item fields 860 * (on-disk). The corresponding on-disk bit in chunk.type is reserved 861 * to avoid remappings between two formats in future. 862 */ 863 #define BTRFS_AVAIL_ALLOC_BIT_SINGLE (1ULL << 48) 864 865 #define BTRFS_EXTENDED_PROFILE_MASK (BTRFS_BLOCK_GROUP_PROFILE_MASK | \ 866 BTRFS_AVAIL_ALLOC_BIT_SINGLE) 867 868 static inline u64 chunk_to_extended(u64 flags) 869 { 870 if ((flags & BTRFS_BLOCK_GROUP_PROFILE_MASK) == 0) 871 flags |= BTRFS_AVAIL_ALLOC_BIT_SINGLE; 872 873 return flags; 874 } 875 static inline u64 extended_to_chunk(u64 flags) 876 { 877 return flags & ~BTRFS_AVAIL_ALLOC_BIT_SINGLE; 878 } 879 880 struct btrfs_block_group_item { 881 __le64 used; 882 __le64 chunk_objectid; 883 __le64 flags; 884 } __attribute__ ((__packed__)); 885 886 struct btrfs_space_info { 887 u64 flags; 888 889 u64 total_bytes; /* total bytes in the space, 890 this doesn't take mirrors into account */ 891 u64 bytes_used; /* total bytes used, 892 this doesn't take mirrors into account */ 893 u64 bytes_pinned; /* total bytes pinned, will be freed when the 894 transaction finishes */ 895 u64 bytes_reserved; /* total bytes the allocator has reserved for 896 current allocations */ 897 u64 bytes_readonly; /* total bytes that are read only */ 898 899 u64 bytes_may_use; /* number of bytes that may be used for 900 delalloc/allocations */ 901 u64 disk_used; /* total bytes used on disk */ 902 u64 disk_total; /* total bytes on disk, takes mirrors into 903 account */ 904 905 /* 906 * we bump reservation progress every time we decrement 907 * bytes_reserved. This way people waiting for reservations 908 * know something good has happened and they can check 909 * for progress. The number here isn't to be trusted, it 910 * just shows reclaim activity 911 */ 912 unsigned long reservation_progress; 913 914 unsigned int full:1; /* indicates that we cannot allocate any more 915 chunks for this space */ 916 unsigned int chunk_alloc:1; /* set if we are allocating a chunk */ 917 918 unsigned int flush:1; /* set if we are trying to make space */ 919 920 unsigned int force_alloc; /* set if we need to force a chunk 921 alloc for this space */ 922 923 struct list_head list; 924 925 /* for block groups in our same type */ 926 struct list_head block_groups[BTRFS_NR_RAID_TYPES]; 927 spinlock_t lock; 928 struct rw_semaphore groups_sem; 929 wait_queue_head_t wait; 930 }; 931 932 struct btrfs_block_rsv { 933 u64 size; 934 u64 reserved; 935 struct btrfs_space_info *space_info; 936 spinlock_t lock; 937 unsigned int full; 938 }; 939 940 /* 941 * free clusters are used to claim free space in relatively large chunks, 942 * allowing us to do less seeky writes. They are used for all metadata 943 * allocations and data allocations in ssd mode. 944 */ 945 struct btrfs_free_cluster { 946 spinlock_t lock; 947 spinlock_t refill_lock; 948 struct rb_root root; 949 950 /* largest extent in this cluster */ 951 u64 max_size; 952 953 /* first extent starting offset */ 954 u64 window_start; 955 956 struct btrfs_block_group_cache *block_group; 957 /* 958 * when a cluster is allocated from a block group, we put the 959 * cluster onto a list in the block group so that it can 960 * be freed before the block group is freed. 961 */ 962 struct list_head block_group_list; 963 }; 964 965 enum btrfs_caching_type { 966 BTRFS_CACHE_NO = 0, 967 BTRFS_CACHE_STARTED = 1, 968 BTRFS_CACHE_FAST = 2, 969 BTRFS_CACHE_FINISHED = 3, 970 }; 971 972 enum btrfs_disk_cache_state { 973 BTRFS_DC_WRITTEN = 0, 974 BTRFS_DC_ERROR = 1, 975 BTRFS_DC_CLEAR = 2, 976 BTRFS_DC_SETUP = 3, 977 BTRFS_DC_NEED_WRITE = 4, 978 }; 979 980 struct btrfs_caching_control { 981 struct list_head list; 982 struct mutex mutex; 983 wait_queue_head_t wait; 984 struct btrfs_work work; 985 struct btrfs_block_group_cache *block_group; 986 u64 progress; 987 atomic_t count; 988 }; 989 990 struct btrfs_block_group_cache { 991 struct btrfs_key key; 992 struct btrfs_block_group_item item; 993 struct btrfs_fs_info *fs_info; 994 struct inode *inode; 995 spinlock_t lock; 996 u64 pinned; 997 u64 reserved; 998 u64 bytes_super; 999 u64 flags; 1000 u64 sectorsize; 1001 u64 cache_generation; 1002 unsigned int ro:1; 1003 unsigned int dirty:1; 1004 unsigned int iref:1; 1005 1006 int disk_cache_state; 1007 1008 /* cache tracking stuff */ 1009 int cached; 1010 struct btrfs_caching_control *caching_ctl; 1011 u64 last_byte_to_unpin; 1012 1013 struct btrfs_space_info *space_info; 1014 1015 /* free space cache stuff */ 1016 struct btrfs_free_space_ctl *free_space_ctl; 1017 1018 /* block group cache stuff */ 1019 struct rb_node cache_node; 1020 1021 /* for block groups in the same raid type */ 1022 struct list_head list; 1023 1024 /* usage count */ 1025 atomic_t count; 1026 1027 /* List of struct btrfs_free_clusters for this block group. 1028 * Today it will only have one thing on it, but that may change 1029 */ 1030 struct list_head cluster_list; 1031 }; 1032 1033 struct reloc_control; 1034 struct btrfs_device; 1035 struct btrfs_fs_devices; 1036 struct btrfs_balance_control; 1037 struct btrfs_delayed_root; 1038 struct btrfs_fs_info { 1039 u8 fsid[BTRFS_FSID_SIZE]; 1040 u8 chunk_tree_uuid[BTRFS_UUID_SIZE]; 1041 struct btrfs_root *extent_root; 1042 struct btrfs_root *tree_root; 1043 struct btrfs_root *chunk_root; 1044 struct btrfs_root *dev_root; 1045 struct btrfs_root *fs_root; 1046 struct btrfs_root *csum_root; 1047 1048 /* the log root tree is a directory of all the other log roots */ 1049 struct btrfs_root *log_root_tree; 1050 1051 spinlock_t fs_roots_radix_lock; 1052 struct radix_tree_root fs_roots_radix; 1053 1054 /* block group cache stuff */ 1055 spinlock_t block_group_cache_lock; 1056 struct rb_root block_group_cache_tree; 1057 1058 /* keep track of unallocated space */ 1059 spinlock_t free_chunk_lock; 1060 u64 free_chunk_space; 1061 1062 struct extent_io_tree freed_extents[2]; 1063 struct extent_io_tree *pinned_extents; 1064 1065 /* logical->physical extent mapping */ 1066 struct btrfs_mapping_tree mapping_tree; 1067 1068 /* 1069 * block reservation for extent, checksum, root tree and 1070 * delayed dir index item 1071 */ 1072 struct btrfs_block_rsv global_block_rsv; 1073 /* block reservation for delay allocation */ 1074 struct btrfs_block_rsv delalloc_block_rsv; 1075 /* block reservation for metadata operations */ 1076 struct btrfs_block_rsv trans_block_rsv; 1077 /* block reservation for chunk tree */ 1078 struct btrfs_block_rsv chunk_block_rsv; 1079 /* block reservation for delayed operations */ 1080 struct btrfs_block_rsv delayed_block_rsv; 1081 1082 struct btrfs_block_rsv empty_block_rsv; 1083 1084 u64 generation; 1085 u64 last_trans_committed; 1086 1087 /* 1088 * this is updated to the current trans every time a full commit 1089 * is required instead of the faster short fsync log commits 1090 */ 1091 u64 last_trans_log_full_commit; 1092 unsigned long mount_opt; 1093 unsigned long compress_type:4; 1094 u64 max_inline; 1095 u64 alloc_start; 1096 struct btrfs_transaction *running_transaction; 1097 wait_queue_head_t transaction_throttle; 1098 wait_queue_head_t transaction_wait; 1099 wait_queue_head_t transaction_blocked_wait; 1100 wait_queue_head_t async_submit_wait; 1101 1102 struct btrfs_super_block *super_copy; 1103 struct btrfs_super_block *super_for_commit; 1104 struct block_device *__bdev; 1105 struct super_block *sb; 1106 struct inode *btree_inode; 1107 struct backing_dev_info bdi; 1108 struct mutex tree_log_mutex; 1109 struct mutex transaction_kthread_mutex; 1110 struct mutex cleaner_mutex; 1111 struct mutex chunk_mutex; 1112 struct mutex volume_mutex; 1113 /* 1114 * this protects the ordered operations list only while we are 1115 * processing all of the entries on it. This way we make 1116 * sure the commit code doesn't find the list temporarily empty 1117 * because another function happens to be doing non-waiting preflush 1118 * before jumping into the main commit. 1119 */ 1120 struct mutex ordered_operations_mutex; 1121 struct rw_semaphore extent_commit_sem; 1122 1123 struct rw_semaphore cleanup_work_sem; 1124 1125 struct rw_semaphore subvol_sem; 1126 struct srcu_struct subvol_srcu; 1127 1128 spinlock_t trans_lock; 1129 /* 1130 * the reloc mutex goes with the trans lock, it is taken 1131 * during commit to protect us from the relocation code 1132 */ 1133 struct mutex reloc_mutex; 1134 1135 struct list_head trans_list; 1136 struct list_head hashers; 1137 struct list_head dead_roots; 1138 struct list_head caching_block_groups; 1139 1140 spinlock_t delayed_iput_lock; 1141 struct list_head delayed_iputs; 1142 1143 /* this protects tree_mod_seq_list */ 1144 spinlock_t tree_mod_seq_lock; 1145 atomic_t tree_mod_seq; 1146 struct list_head tree_mod_seq_list; 1147 1148 /* this protects tree_mod_log */ 1149 rwlock_t tree_mod_log_lock; 1150 struct rb_root tree_mod_log; 1151 1152 atomic_t nr_async_submits; 1153 atomic_t async_submit_draining; 1154 atomic_t nr_async_bios; 1155 atomic_t async_delalloc_pages; 1156 atomic_t open_ioctl_trans; 1157 1158 /* 1159 * this is used by the balancing code to wait for all the pending 1160 * ordered extents 1161 */ 1162 spinlock_t ordered_extent_lock; 1163 1164 /* 1165 * all of the data=ordered extents pending writeback 1166 * these can span multiple transactions and basically include 1167 * every dirty data page that isn't from nodatacow 1168 */ 1169 struct list_head ordered_extents; 1170 1171 /* 1172 * all of the inodes that have delalloc bytes. It is possible for 1173 * this list to be empty even when there is still dirty data=ordered 1174 * extents waiting to finish IO. 1175 */ 1176 struct list_head delalloc_inodes; 1177 1178 /* 1179 * special rename and truncate targets that must be on disk before 1180 * we're allowed to commit. This is basically the ext3 style 1181 * data=ordered list. 1182 */ 1183 struct list_head ordered_operations; 1184 1185 /* 1186 * there is a pool of worker threads for checksumming during writes 1187 * and a pool for checksumming after reads. This is because readers 1188 * can run with FS locks held, and the writers may be waiting for 1189 * those locks. We don't want ordering in the pending list to cause 1190 * deadlocks, and so the two are serviced separately. 1191 * 1192 * A third pool does submit_bio to avoid deadlocking with the other 1193 * two 1194 */ 1195 struct btrfs_workers generic_worker; 1196 struct btrfs_workers workers; 1197 struct btrfs_workers delalloc_workers; 1198 struct btrfs_workers endio_workers; 1199 struct btrfs_workers endio_meta_workers; 1200 struct btrfs_workers endio_meta_write_workers; 1201 struct btrfs_workers endio_write_workers; 1202 struct btrfs_workers endio_freespace_worker; 1203 struct btrfs_workers submit_workers; 1204 struct btrfs_workers caching_workers; 1205 struct btrfs_workers readahead_workers; 1206 1207 /* 1208 * fixup workers take dirty pages that didn't properly go through 1209 * the cow mechanism and make them safe to write. It happens 1210 * for the sys_munmap function call path 1211 */ 1212 struct btrfs_workers fixup_workers; 1213 struct btrfs_workers delayed_workers; 1214 struct task_struct *transaction_kthread; 1215 struct task_struct *cleaner_kthread; 1216 int thread_pool_size; 1217 1218 struct kobject super_kobj; 1219 struct completion kobj_unregister; 1220 int do_barriers; 1221 int closing; 1222 int log_root_recovering; 1223 int enospc_unlink; 1224 int trans_no_join; 1225 1226 u64 total_pinned; 1227 1228 /* protected by the delalloc lock, used to keep from writing 1229 * metadata until there is a nice batch 1230 */ 1231 u64 dirty_metadata_bytes; 1232 struct list_head dirty_cowonly_roots; 1233 1234 struct btrfs_fs_devices *fs_devices; 1235 1236 /* 1237 * the space_info list is almost entirely read only. It only changes 1238 * when we add a new raid type to the FS, and that happens 1239 * very rarely. RCU is used to protect it. 1240 */ 1241 struct list_head space_info; 1242 1243 struct reloc_control *reloc_ctl; 1244 1245 spinlock_t delalloc_lock; 1246 u64 delalloc_bytes; 1247 1248 /* data_alloc_cluster is only used in ssd mode */ 1249 struct btrfs_free_cluster data_alloc_cluster; 1250 1251 /* all metadata allocations go through this cluster */ 1252 struct btrfs_free_cluster meta_alloc_cluster; 1253 1254 /* auto defrag inodes go here */ 1255 spinlock_t defrag_inodes_lock; 1256 struct rb_root defrag_inodes; 1257 atomic_t defrag_running; 1258 1259 spinlock_t ref_cache_lock; 1260 u64 total_ref_cache_size; 1261 1262 /* 1263 * these three are in extended format (availability of single 1264 * chunks is denoted by BTRFS_AVAIL_ALLOC_BIT_SINGLE bit, other 1265 * types are denoted by corresponding BTRFS_BLOCK_GROUP_* bits) 1266 */ 1267 u64 avail_data_alloc_bits; 1268 u64 avail_metadata_alloc_bits; 1269 u64 avail_system_alloc_bits; 1270 1271 /* restriper state */ 1272 spinlock_t balance_lock; 1273 struct mutex balance_mutex; 1274 atomic_t balance_running; 1275 atomic_t balance_pause_req; 1276 atomic_t balance_cancel_req; 1277 struct btrfs_balance_control *balance_ctl; 1278 wait_queue_head_t balance_wait_q; 1279 1280 unsigned data_chunk_allocations; 1281 unsigned metadata_ratio; 1282 1283 void *bdev_holder; 1284 1285 /* private scrub information */ 1286 struct mutex scrub_lock; 1287 atomic_t scrubs_running; 1288 atomic_t scrub_pause_req; 1289 atomic_t scrubs_paused; 1290 atomic_t scrub_cancel_req; 1291 wait_queue_head_t scrub_pause_wait; 1292 struct rw_semaphore scrub_super_lock; 1293 int scrub_workers_refcnt; 1294 struct btrfs_workers scrub_workers; 1295 1296 #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY 1297 u32 check_integrity_print_mask; 1298 #endif 1299 1300 /* filesystem state */ 1301 u64 fs_state; 1302 1303 struct btrfs_delayed_root *delayed_root; 1304 1305 /* readahead tree */ 1306 spinlock_t reada_lock; 1307 struct radix_tree_root reada_tree; 1308 1309 /* next backup root to be overwritten */ 1310 int backup_root_index; 1311 }; 1312 1313 /* 1314 * in ram representation of the tree. extent_root is used for all allocations 1315 * and for the extent tree extent_root root. 1316 */ 1317 struct btrfs_root { 1318 struct extent_buffer *node; 1319 1320 struct extent_buffer *commit_root; 1321 struct btrfs_root *log_root; 1322 struct btrfs_root *reloc_root; 1323 1324 struct btrfs_root_item root_item; 1325 struct btrfs_key root_key; 1326 struct btrfs_fs_info *fs_info; 1327 struct extent_io_tree dirty_log_pages; 1328 1329 struct kobject root_kobj; 1330 struct completion kobj_unregister; 1331 struct mutex objectid_mutex; 1332 1333 spinlock_t accounting_lock; 1334 struct btrfs_block_rsv *block_rsv; 1335 1336 /* free ino cache stuff */ 1337 struct mutex fs_commit_mutex; 1338 struct btrfs_free_space_ctl *free_ino_ctl; 1339 enum btrfs_caching_type cached; 1340 spinlock_t cache_lock; 1341 wait_queue_head_t cache_wait; 1342 struct btrfs_free_space_ctl *free_ino_pinned; 1343 u64 cache_progress; 1344 struct inode *cache_inode; 1345 1346 struct mutex log_mutex; 1347 wait_queue_head_t log_writer_wait; 1348 wait_queue_head_t log_commit_wait[2]; 1349 atomic_t log_writers; 1350 atomic_t log_commit[2]; 1351 unsigned long log_transid; 1352 unsigned long last_log_commit; 1353 unsigned long log_batch; 1354 pid_t log_start_pid; 1355 bool log_multiple_pids; 1356 1357 u64 objectid; 1358 u64 last_trans; 1359 1360 /* data allocations are done in sectorsize units */ 1361 u32 sectorsize; 1362 1363 /* node allocations are done in nodesize units */ 1364 u32 nodesize; 1365 1366 /* leaf allocations are done in leafsize units */ 1367 u32 leafsize; 1368 1369 u32 stripesize; 1370 1371 u32 type; 1372 1373 u64 highest_objectid; 1374 1375 /* btrfs_record_root_in_trans is a multi-step process, 1376 * and it can race with the balancing code. But the 1377 * race is very small, and only the first time the root 1378 * is added to each transaction. So in_trans_setup 1379 * is used to tell us when more checks are required 1380 */ 1381 unsigned long in_trans_setup; 1382 int ref_cows; 1383 int track_dirty; 1384 int in_radix; 1385 1386 u64 defrag_trans_start; 1387 struct btrfs_key defrag_progress; 1388 struct btrfs_key defrag_max; 1389 int defrag_running; 1390 char *name; 1391 1392 /* the dirty list is only used by non-reference counted roots */ 1393 struct list_head dirty_list; 1394 1395 struct list_head root_list; 1396 1397 spinlock_t orphan_lock; 1398 atomic_t orphan_inodes; 1399 struct btrfs_block_rsv *orphan_block_rsv; 1400 int orphan_item_inserted; 1401 int orphan_cleanup_state; 1402 1403 spinlock_t inode_lock; 1404 /* red-black tree that keeps track of in-memory inodes */ 1405 struct rb_root inode_tree; 1406 1407 /* 1408 * radix tree that keeps track of delayed nodes of every inode, 1409 * protected by inode_lock 1410 */ 1411 struct radix_tree_root delayed_nodes_tree; 1412 /* 1413 * right now this just gets used so that a root has its own devid 1414 * for stat. It may be used for more later 1415 */ 1416 dev_t anon_dev; 1417 1418 int force_cow; 1419 }; 1420 1421 struct btrfs_ioctl_defrag_range_args { 1422 /* start of the defrag operation */ 1423 __u64 start; 1424 1425 /* number of bytes to defrag, use (u64)-1 to say all */ 1426 __u64 len; 1427 1428 /* 1429 * flags for the operation, which can include turning 1430 * on compression for this one defrag 1431 */ 1432 __u64 flags; 1433 1434 /* 1435 * any extent bigger than this will be considered 1436 * already defragged. Use 0 to take the kernel default 1437 * Use 1 to say every single extent must be rewritten 1438 */ 1439 __u32 extent_thresh; 1440 1441 /* 1442 * which compression method to use if turning on compression 1443 * for this defrag operation. If unspecified, zlib will 1444 * be used 1445 */ 1446 __u32 compress_type; 1447 1448 /* spare for later */ 1449 __u32 unused[4]; 1450 }; 1451 1452 1453 /* 1454 * inode items have the data typically returned from stat and store other 1455 * info about object characteristics. There is one for every file and dir in 1456 * the FS 1457 */ 1458 #define BTRFS_INODE_ITEM_KEY 1 1459 #define BTRFS_INODE_REF_KEY 12 1460 #define BTRFS_XATTR_ITEM_KEY 24 1461 #define BTRFS_ORPHAN_ITEM_KEY 48 1462 /* reserve 2-15 close to the inode for later flexibility */ 1463 1464 /* 1465 * dir items are the name -> inode pointers in a directory. There is one 1466 * for every name in a directory. 1467 */ 1468 #define BTRFS_DIR_LOG_ITEM_KEY 60 1469 #define BTRFS_DIR_LOG_INDEX_KEY 72 1470 #define BTRFS_DIR_ITEM_KEY 84 1471 #define BTRFS_DIR_INDEX_KEY 96 1472 /* 1473 * extent data is for file data 1474 */ 1475 #define BTRFS_EXTENT_DATA_KEY 108 1476 1477 /* 1478 * extent csums are stored in a separate tree and hold csums for 1479 * an entire extent on disk. 1480 */ 1481 #define BTRFS_EXTENT_CSUM_KEY 128 1482 1483 /* 1484 * root items point to tree roots. They are typically in the root 1485 * tree used by the super block to find all the other trees 1486 */ 1487 #define BTRFS_ROOT_ITEM_KEY 132 1488 1489 /* 1490 * root backrefs tie subvols and snapshots to the directory entries that 1491 * reference them 1492 */ 1493 #define BTRFS_ROOT_BACKREF_KEY 144 1494 1495 /* 1496 * root refs make a fast index for listing all of the snapshots and 1497 * subvolumes referenced by a given root. They point directly to the 1498 * directory item in the root that references the subvol 1499 */ 1500 #define BTRFS_ROOT_REF_KEY 156 1501 1502 /* 1503 * extent items are in the extent map tree. These record which blocks 1504 * are used, and how many references there are to each block 1505 */ 1506 #define BTRFS_EXTENT_ITEM_KEY 168 1507 1508 #define BTRFS_TREE_BLOCK_REF_KEY 176 1509 1510 #define BTRFS_EXTENT_DATA_REF_KEY 178 1511 1512 #define BTRFS_EXTENT_REF_V0_KEY 180 1513 1514 #define BTRFS_SHARED_BLOCK_REF_KEY 182 1515 1516 #define BTRFS_SHARED_DATA_REF_KEY 184 1517 1518 /* 1519 * block groups give us hints into the extent allocation trees. Which 1520 * blocks are free etc etc 1521 */ 1522 #define BTRFS_BLOCK_GROUP_ITEM_KEY 192 1523 1524 #define BTRFS_DEV_EXTENT_KEY 204 1525 #define BTRFS_DEV_ITEM_KEY 216 1526 #define BTRFS_CHUNK_ITEM_KEY 228 1527 1528 #define BTRFS_BALANCE_ITEM_KEY 248 1529 1530 /* 1531 * Persistantly stores the io stats in the device tree. 1532 * One key for all stats, (0, BTRFS_DEV_STATS_KEY, devid). 1533 */ 1534 #define BTRFS_DEV_STATS_KEY 249 1535 1536 /* 1537 * string items are for debugging. They just store a short string of 1538 * data in the FS 1539 */ 1540 #define BTRFS_STRING_ITEM_KEY 253 1541 1542 /* 1543 * Flags for mount options. 1544 * 1545 * Note: don't forget to add new options to btrfs_show_options() 1546 */ 1547 #define BTRFS_MOUNT_NODATASUM (1 << 0) 1548 #define BTRFS_MOUNT_NODATACOW (1 << 1) 1549 #define BTRFS_MOUNT_NOBARRIER (1 << 2) 1550 #define BTRFS_MOUNT_SSD (1 << 3) 1551 #define BTRFS_MOUNT_DEGRADED (1 << 4) 1552 #define BTRFS_MOUNT_COMPRESS (1 << 5) 1553 #define BTRFS_MOUNT_NOTREELOG (1 << 6) 1554 #define BTRFS_MOUNT_FLUSHONCOMMIT (1 << 7) 1555 #define BTRFS_MOUNT_SSD_SPREAD (1 << 8) 1556 #define BTRFS_MOUNT_NOSSD (1 << 9) 1557 #define BTRFS_MOUNT_DISCARD (1 << 10) 1558 #define BTRFS_MOUNT_FORCE_COMPRESS (1 << 11) 1559 #define BTRFS_MOUNT_SPACE_CACHE (1 << 12) 1560 #define BTRFS_MOUNT_CLEAR_CACHE (1 << 13) 1561 #define BTRFS_MOUNT_USER_SUBVOL_RM_ALLOWED (1 << 14) 1562 #define BTRFS_MOUNT_ENOSPC_DEBUG (1 << 15) 1563 #define BTRFS_MOUNT_AUTO_DEFRAG (1 << 16) 1564 #define BTRFS_MOUNT_INODE_MAP_CACHE (1 << 17) 1565 #define BTRFS_MOUNT_RECOVERY (1 << 18) 1566 #define BTRFS_MOUNT_SKIP_BALANCE (1 << 19) 1567 #define BTRFS_MOUNT_CHECK_INTEGRITY (1 << 20) 1568 #define BTRFS_MOUNT_CHECK_INTEGRITY_INCLUDING_EXTENT_DATA (1 << 21) 1569 #define BTRFS_MOUNT_PANIC_ON_FATAL_ERROR (1 << 22) 1570 1571 #define btrfs_clear_opt(o, opt) ((o) &= ~BTRFS_MOUNT_##opt) 1572 #define btrfs_set_opt(o, opt) ((o) |= BTRFS_MOUNT_##opt) 1573 #define btrfs_test_opt(root, opt) ((root)->fs_info->mount_opt & \ 1574 BTRFS_MOUNT_##opt) 1575 /* 1576 * Inode flags 1577 */ 1578 #define BTRFS_INODE_NODATASUM (1 << 0) 1579 #define BTRFS_INODE_NODATACOW (1 << 1) 1580 #define BTRFS_INODE_READONLY (1 << 2) 1581 #define BTRFS_INODE_NOCOMPRESS (1 << 3) 1582 #define BTRFS_INODE_PREALLOC (1 << 4) 1583 #define BTRFS_INODE_SYNC (1 << 5) 1584 #define BTRFS_INODE_IMMUTABLE (1 << 6) 1585 #define BTRFS_INODE_APPEND (1 << 7) 1586 #define BTRFS_INODE_NODUMP (1 << 8) 1587 #define BTRFS_INODE_NOATIME (1 << 9) 1588 #define BTRFS_INODE_DIRSYNC (1 << 10) 1589 #define BTRFS_INODE_COMPRESS (1 << 11) 1590 1591 #define BTRFS_INODE_ROOT_ITEM_INIT (1 << 31) 1592 1593 struct btrfs_map_token { 1594 struct extent_buffer *eb; 1595 char *kaddr; 1596 unsigned long offset; 1597 }; 1598 1599 static inline void btrfs_init_map_token (struct btrfs_map_token *token) 1600 { 1601 memset(token, 0, sizeof(*token)); 1602 } 1603 1604 /* some macros to generate set/get funcs for the struct fields. This 1605 * assumes there is a lefoo_to_cpu for every type, so lets make a simple 1606 * one for u8: 1607 */ 1608 #define le8_to_cpu(v) (v) 1609 #define cpu_to_le8(v) (v) 1610 #define __le8 u8 1611 1612 #define read_eb_member(eb, ptr, type, member, result) ( \ 1613 read_extent_buffer(eb, (char *)(result), \ 1614 ((unsigned long)(ptr)) + \ 1615 offsetof(type, member), \ 1616 sizeof(((type *)0)->member))) 1617 1618 #define write_eb_member(eb, ptr, type, member, result) ( \ 1619 write_extent_buffer(eb, (char *)(result), \ 1620 ((unsigned long)(ptr)) + \ 1621 offsetof(type, member), \ 1622 sizeof(((type *)0)->member))) 1623 1624 #ifndef BTRFS_SETGET_FUNCS 1625 #define BTRFS_SETGET_FUNCS(name, type, member, bits) \ 1626 u##bits btrfs_##name(struct extent_buffer *eb, type *s); \ 1627 u##bits btrfs_token_##name(struct extent_buffer *eb, type *s, struct btrfs_map_token *token); \ 1628 void btrfs_set_token_##name(struct extent_buffer *eb, type *s, u##bits val, struct btrfs_map_token *token);\ 1629 void btrfs_set_##name(struct extent_buffer *eb, type *s, u##bits val); 1630 #endif 1631 1632 #define BTRFS_SETGET_HEADER_FUNCS(name, type, member, bits) \ 1633 static inline u##bits btrfs_##name(struct extent_buffer *eb) \ 1634 { \ 1635 type *p = page_address(eb->pages[0]); \ 1636 u##bits res = le##bits##_to_cpu(p->member); \ 1637 return res; \ 1638 } \ 1639 static inline void btrfs_set_##name(struct extent_buffer *eb, \ 1640 u##bits val) \ 1641 { \ 1642 type *p = page_address(eb->pages[0]); \ 1643 p->member = cpu_to_le##bits(val); \ 1644 } 1645 1646 #define BTRFS_SETGET_STACK_FUNCS(name, type, member, bits) \ 1647 static inline u##bits btrfs_##name(type *s) \ 1648 { \ 1649 return le##bits##_to_cpu(s->member); \ 1650 } \ 1651 static inline void btrfs_set_##name(type *s, u##bits val) \ 1652 { \ 1653 s->member = cpu_to_le##bits(val); \ 1654 } 1655 1656 BTRFS_SETGET_FUNCS(device_type, struct btrfs_dev_item, type, 64); 1657 BTRFS_SETGET_FUNCS(device_total_bytes, struct btrfs_dev_item, total_bytes, 64); 1658 BTRFS_SETGET_FUNCS(device_bytes_used, struct btrfs_dev_item, bytes_used, 64); 1659 BTRFS_SETGET_FUNCS(device_io_align, struct btrfs_dev_item, io_align, 32); 1660 BTRFS_SETGET_FUNCS(device_io_width, struct btrfs_dev_item, io_width, 32); 1661 BTRFS_SETGET_FUNCS(device_start_offset, struct btrfs_dev_item, 1662 start_offset, 64); 1663 BTRFS_SETGET_FUNCS(device_sector_size, struct btrfs_dev_item, sector_size, 32); 1664 BTRFS_SETGET_FUNCS(device_id, struct btrfs_dev_item, devid, 64); 1665 BTRFS_SETGET_FUNCS(device_group, struct btrfs_dev_item, dev_group, 32); 1666 BTRFS_SETGET_FUNCS(device_seek_speed, struct btrfs_dev_item, seek_speed, 8); 1667 BTRFS_SETGET_FUNCS(device_bandwidth, struct btrfs_dev_item, bandwidth, 8); 1668 BTRFS_SETGET_FUNCS(device_generation, struct btrfs_dev_item, generation, 64); 1669 1670 BTRFS_SETGET_STACK_FUNCS(stack_device_type, struct btrfs_dev_item, type, 64); 1671 BTRFS_SETGET_STACK_FUNCS(stack_device_total_bytes, struct btrfs_dev_item, 1672 total_bytes, 64); 1673 BTRFS_SETGET_STACK_FUNCS(stack_device_bytes_used, struct btrfs_dev_item, 1674 bytes_used, 64); 1675 BTRFS_SETGET_STACK_FUNCS(stack_device_io_align, struct btrfs_dev_item, 1676 io_align, 32); 1677 BTRFS_SETGET_STACK_FUNCS(stack_device_io_width, struct btrfs_dev_item, 1678 io_width, 32); 1679 BTRFS_SETGET_STACK_FUNCS(stack_device_sector_size, struct btrfs_dev_item, 1680 sector_size, 32); 1681 BTRFS_SETGET_STACK_FUNCS(stack_device_id, struct btrfs_dev_item, devid, 64); 1682 BTRFS_SETGET_STACK_FUNCS(stack_device_group, struct btrfs_dev_item, 1683 dev_group, 32); 1684 BTRFS_SETGET_STACK_FUNCS(stack_device_seek_speed, struct btrfs_dev_item, 1685 seek_speed, 8); 1686 BTRFS_SETGET_STACK_FUNCS(stack_device_bandwidth, struct btrfs_dev_item, 1687 bandwidth, 8); 1688 BTRFS_SETGET_STACK_FUNCS(stack_device_generation, struct btrfs_dev_item, 1689 generation, 64); 1690 1691 static inline char *btrfs_device_uuid(struct btrfs_dev_item *d) 1692 { 1693 return (char *)d + offsetof(struct btrfs_dev_item, uuid); 1694 } 1695 1696 static inline char *btrfs_device_fsid(struct btrfs_dev_item *d) 1697 { 1698 return (char *)d + offsetof(struct btrfs_dev_item, fsid); 1699 } 1700 1701 BTRFS_SETGET_FUNCS(chunk_length, struct btrfs_chunk, length, 64); 1702 BTRFS_SETGET_FUNCS(chunk_owner, struct btrfs_chunk, owner, 64); 1703 BTRFS_SETGET_FUNCS(chunk_stripe_len, struct btrfs_chunk, stripe_len, 64); 1704 BTRFS_SETGET_FUNCS(chunk_io_align, struct btrfs_chunk, io_align, 32); 1705 BTRFS_SETGET_FUNCS(chunk_io_width, struct btrfs_chunk, io_width, 32); 1706 BTRFS_SETGET_FUNCS(chunk_sector_size, struct btrfs_chunk, sector_size, 32); 1707 BTRFS_SETGET_FUNCS(chunk_type, struct btrfs_chunk, type, 64); 1708 BTRFS_SETGET_FUNCS(chunk_num_stripes, struct btrfs_chunk, num_stripes, 16); 1709 BTRFS_SETGET_FUNCS(chunk_sub_stripes, struct btrfs_chunk, sub_stripes, 16); 1710 BTRFS_SETGET_FUNCS(stripe_devid, struct btrfs_stripe, devid, 64); 1711 BTRFS_SETGET_FUNCS(stripe_offset, struct btrfs_stripe, offset, 64); 1712 1713 static inline char *btrfs_stripe_dev_uuid(struct btrfs_stripe *s) 1714 { 1715 return (char *)s + offsetof(struct btrfs_stripe, dev_uuid); 1716 } 1717 1718 BTRFS_SETGET_STACK_FUNCS(stack_chunk_length, struct btrfs_chunk, length, 64); 1719 BTRFS_SETGET_STACK_FUNCS(stack_chunk_owner, struct btrfs_chunk, owner, 64); 1720 BTRFS_SETGET_STACK_FUNCS(stack_chunk_stripe_len, struct btrfs_chunk, 1721 stripe_len, 64); 1722 BTRFS_SETGET_STACK_FUNCS(stack_chunk_io_align, struct btrfs_chunk, 1723 io_align, 32); 1724 BTRFS_SETGET_STACK_FUNCS(stack_chunk_io_width, struct btrfs_chunk, 1725 io_width, 32); 1726 BTRFS_SETGET_STACK_FUNCS(stack_chunk_sector_size, struct btrfs_chunk, 1727 sector_size, 32); 1728 BTRFS_SETGET_STACK_FUNCS(stack_chunk_type, struct btrfs_chunk, type, 64); 1729 BTRFS_SETGET_STACK_FUNCS(stack_chunk_num_stripes, struct btrfs_chunk, 1730 num_stripes, 16); 1731 BTRFS_SETGET_STACK_FUNCS(stack_chunk_sub_stripes, struct btrfs_chunk, 1732 sub_stripes, 16); 1733 BTRFS_SETGET_STACK_FUNCS(stack_stripe_devid, struct btrfs_stripe, devid, 64); 1734 BTRFS_SETGET_STACK_FUNCS(stack_stripe_offset, struct btrfs_stripe, offset, 64); 1735 1736 static inline struct btrfs_stripe *btrfs_stripe_nr(struct btrfs_chunk *c, 1737 int nr) 1738 { 1739 unsigned long offset = (unsigned long)c; 1740 offset += offsetof(struct btrfs_chunk, stripe); 1741 offset += nr * sizeof(struct btrfs_stripe); 1742 return (struct btrfs_stripe *)offset; 1743 } 1744 1745 static inline char *btrfs_stripe_dev_uuid_nr(struct btrfs_chunk *c, int nr) 1746 { 1747 return btrfs_stripe_dev_uuid(btrfs_stripe_nr(c, nr)); 1748 } 1749 1750 static inline u64 btrfs_stripe_offset_nr(struct extent_buffer *eb, 1751 struct btrfs_chunk *c, int nr) 1752 { 1753 return btrfs_stripe_offset(eb, btrfs_stripe_nr(c, nr)); 1754 } 1755 1756 static inline u64 btrfs_stripe_devid_nr(struct extent_buffer *eb, 1757 struct btrfs_chunk *c, int nr) 1758 { 1759 return btrfs_stripe_devid(eb, btrfs_stripe_nr(c, nr)); 1760 } 1761 1762 /* struct btrfs_block_group_item */ 1763 BTRFS_SETGET_STACK_FUNCS(block_group_used, struct btrfs_block_group_item, 1764 used, 64); 1765 BTRFS_SETGET_FUNCS(disk_block_group_used, struct btrfs_block_group_item, 1766 used, 64); 1767 BTRFS_SETGET_STACK_FUNCS(block_group_chunk_objectid, 1768 struct btrfs_block_group_item, chunk_objectid, 64); 1769 1770 BTRFS_SETGET_FUNCS(disk_block_group_chunk_objectid, 1771 struct btrfs_block_group_item, chunk_objectid, 64); 1772 BTRFS_SETGET_FUNCS(disk_block_group_flags, 1773 struct btrfs_block_group_item, flags, 64); 1774 BTRFS_SETGET_STACK_FUNCS(block_group_flags, 1775 struct btrfs_block_group_item, flags, 64); 1776 1777 /* struct btrfs_inode_ref */ 1778 BTRFS_SETGET_FUNCS(inode_ref_name_len, struct btrfs_inode_ref, name_len, 16); 1779 BTRFS_SETGET_FUNCS(inode_ref_index, struct btrfs_inode_ref, index, 64); 1780 1781 /* struct btrfs_inode_item */ 1782 BTRFS_SETGET_FUNCS(inode_generation, struct btrfs_inode_item, generation, 64); 1783 BTRFS_SETGET_FUNCS(inode_sequence, struct btrfs_inode_item, sequence, 64); 1784 BTRFS_SETGET_FUNCS(inode_transid, struct btrfs_inode_item, transid, 64); 1785 BTRFS_SETGET_FUNCS(inode_size, struct btrfs_inode_item, size, 64); 1786 BTRFS_SETGET_FUNCS(inode_nbytes, struct btrfs_inode_item, nbytes, 64); 1787 BTRFS_SETGET_FUNCS(inode_block_group, struct btrfs_inode_item, block_group, 64); 1788 BTRFS_SETGET_FUNCS(inode_nlink, struct btrfs_inode_item, nlink, 32); 1789 BTRFS_SETGET_FUNCS(inode_uid, struct btrfs_inode_item, uid, 32); 1790 BTRFS_SETGET_FUNCS(inode_gid, struct btrfs_inode_item, gid, 32); 1791 BTRFS_SETGET_FUNCS(inode_mode, struct btrfs_inode_item, mode, 32); 1792 BTRFS_SETGET_FUNCS(inode_rdev, struct btrfs_inode_item, rdev, 64); 1793 BTRFS_SETGET_FUNCS(inode_flags, struct btrfs_inode_item, flags, 64); 1794 1795 static inline struct btrfs_timespec * 1796 btrfs_inode_atime(struct btrfs_inode_item *inode_item) 1797 { 1798 unsigned long ptr = (unsigned long)inode_item; 1799 ptr += offsetof(struct btrfs_inode_item, atime); 1800 return (struct btrfs_timespec *)ptr; 1801 } 1802 1803 static inline struct btrfs_timespec * 1804 btrfs_inode_mtime(struct btrfs_inode_item *inode_item) 1805 { 1806 unsigned long ptr = (unsigned long)inode_item; 1807 ptr += offsetof(struct btrfs_inode_item, mtime); 1808 return (struct btrfs_timespec *)ptr; 1809 } 1810 1811 static inline struct btrfs_timespec * 1812 btrfs_inode_ctime(struct btrfs_inode_item *inode_item) 1813 { 1814 unsigned long ptr = (unsigned long)inode_item; 1815 ptr += offsetof(struct btrfs_inode_item, ctime); 1816 return (struct btrfs_timespec *)ptr; 1817 } 1818 1819 BTRFS_SETGET_FUNCS(timespec_sec, struct btrfs_timespec, sec, 64); 1820 BTRFS_SETGET_FUNCS(timespec_nsec, struct btrfs_timespec, nsec, 32); 1821 1822 /* struct btrfs_dev_extent */ 1823 BTRFS_SETGET_FUNCS(dev_extent_chunk_tree, struct btrfs_dev_extent, 1824 chunk_tree, 64); 1825 BTRFS_SETGET_FUNCS(dev_extent_chunk_objectid, struct btrfs_dev_extent, 1826 chunk_objectid, 64); 1827 BTRFS_SETGET_FUNCS(dev_extent_chunk_offset, struct btrfs_dev_extent, 1828 chunk_offset, 64); 1829 BTRFS_SETGET_FUNCS(dev_extent_length, struct btrfs_dev_extent, length, 64); 1830 1831 static inline u8 *btrfs_dev_extent_chunk_tree_uuid(struct btrfs_dev_extent *dev) 1832 { 1833 unsigned long ptr = offsetof(struct btrfs_dev_extent, chunk_tree_uuid); 1834 return (u8 *)((unsigned long)dev + ptr); 1835 } 1836 1837 BTRFS_SETGET_FUNCS(extent_refs, struct btrfs_extent_item, refs, 64); 1838 BTRFS_SETGET_FUNCS(extent_generation, struct btrfs_extent_item, 1839 generation, 64); 1840 BTRFS_SETGET_FUNCS(extent_flags, struct btrfs_extent_item, flags, 64); 1841 1842 BTRFS_SETGET_FUNCS(extent_refs_v0, struct btrfs_extent_item_v0, refs, 32); 1843 1844 1845 BTRFS_SETGET_FUNCS(tree_block_level, struct btrfs_tree_block_info, level, 8); 1846 1847 static inline void btrfs_tree_block_key(struct extent_buffer *eb, 1848 struct btrfs_tree_block_info *item, 1849 struct btrfs_disk_key *key) 1850 { 1851 read_eb_member(eb, item, struct btrfs_tree_block_info, key, key); 1852 } 1853 1854 static inline void btrfs_set_tree_block_key(struct extent_buffer *eb, 1855 struct btrfs_tree_block_info *item, 1856 struct btrfs_disk_key *key) 1857 { 1858 write_eb_member(eb, item, struct btrfs_tree_block_info, key, key); 1859 } 1860 1861 BTRFS_SETGET_FUNCS(extent_data_ref_root, struct btrfs_extent_data_ref, 1862 root, 64); 1863 BTRFS_SETGET_FUNCS(extent_data_ref_objectid, struct btrfs_extent_data_ref, 1864 objectid, 64); 1865 BTRFS_SETGET_FUNCS(extent_data_ref_offset, struct btrfs_extent_data_ref, 1866 offset, 64); 1867 BTRFS_SETGET_FUNCS(extent_data_ref_count, struct btrfs_extent_data_ref, 1868 count, 32); 1869 1870 BTRFS_SETGET_FUNCS(shared_data_ref_count, struct btrfs_shared_data_ref, 1871 count, 32); 1872 1873 BTRFS_SETGET_FUNCS(extent_inline_ref_type, struct btrfs_extent_inline_ref, 1874 type, 8); 1875 BTRFS_SETGET_FUNCS(extent_inline_ref_offset, struct btrfs_extent_inline_ref, 1876 offset, 64); 1877 1878 static inline u32 btrfs_extent_inline_ref_size(int type) 1879 { 1880 if (type == BTRFS_TREE_BLOCK_REF_KEY || 1881 type == BTRFS_SHARED_BLOCK_REF_KEY) 1882 return sizeof(struct btrfs_extent_inline_ref); 1883 if (type == BTRFS_SHARED_DATA_REF_KEY) 1884 return sizeof(struct btrfs_shared_data_ref) + 1885 sizeof(struct btrfs_extent_inline_ref); 1886 if (type == BTRFS_EXTENT_DATA_REF_KEY) 1887 return sizeof(struct btrfs_extent_data_ref) + 1888 offsetof(struct btrfs_extent_inline_ref, offset); 1889 BUG(); 1890 return 0; 1891 } 1892 1893 BTRFS_SETGET_FUNCS(ref_root_v0, struct btrfs_extent_ref_v0, root, 64); 1894 BTRFS_SETGET_FUNCS(ref_generation_v0, struct btrfs_extent_ref_v0, 1895 generation, 64); 1896 BTRFS_SETGET_FUNCS(ref_objectid_v0, struct btrfs_extent_ref_v0, objectid, 64); 1897 BTRFS_SETGET_FUNCS(ref_count_v0, struct btrfs_extent_ref_v0, count, 32); 1898 1899 /* struct btrfs_node */ 1900 BTRFS_SETGET_FUNCS(key_blockptr, struct btrfs_key_ptr, blockptr, 64); 1901 BTRFS_SETGET_FUNCS(key_generation, struct btrfs_key_ptr, generation, 64); 1902 1903 static inline u64 btrfs_node_blockptr(struct extent_buffer *eb, int nr) 1904 { 1905 unsigned long ptr; 1906 ptr = offsetof(struct btrfs_node, ptrs) + 1907 sizeof(struct btrfs_key_ptr) * nr; 1908 return btrfs_key_blockptr(eb, (struct btrfs_key_ptr *)ptr); 1909 } 1910 1911 static inline void btrfs_set_node_blockptr(struct extent_buffer *eb, 1912 int nr, u64 val) 1913 { 1914 unsigned long ptr; 1915 ptr = offsetof(struct btrfs_node, ptrs) + 1916 sizeof(struct btrfs_key_ptr) * nr; 1917 btrfs_set_key_blockptr(eb, (struct btrfs_key_ptr *)ptr, val); 1918 } 1919 1920 static inline u64 btrfs_node_ptr_generation(struct extent_buffer *eb, int nr) 1921 { 1922 unsigned long ptr; 1923 ptr = offsetof(struct btrfs_node, ptrs) + 1924 sizeof(struct btrfs_key_ptr) * nr; 1925 return btrfs_key_generation(eb, (struct btrfs_key_ptr *)ptr); 1926 } 1927 1928 static inline void btrfs_set_node_ptr_generation(struct extent_buffer *eb, 1929 int nr, u64 val) 1930 { 1931 unsigned long ptr; 1932 ptr = offsetof(struct btrfs_node, ptrs) + 1933 sizeof(struct btrfs_key_ptr) * nr; 1934 btrfs_set_key_generation(eb, (struct btrfs_key_ptr *)ptr, val); 1935 } 1936 1937 static inline unsigned long btrfs_node_key_ptr_offset(int nr) 1938 { 1939 return offsetof(struct btrfs_node, ptrs) + 1940 sizeof(struct btrfs_key_ptr) * nr; 1941 } 1942 1943 void btrfs_node_key(struct extent_buffer *eb, 1944 struct btrfs_disk_key *disk_key, int nr); 1945 1946 static inline void btrfs_set_node_key(struct extent_buffer *eb, 1947 struct btrfs_disk_key *disk_key, int nr) 1948 { 1949 unsigned long ptr; 1950 ptr = btrfs_node_key_ptr_offset(nr); 1951 write_eb_member(eb, (struct btrfs_key_ptr *)ptr, 1952 struct btrfs_key_ptr, key, disk_key); 1953 } 1954 1955 /* struct btrfs_item */ 1956 BTRFS_SETGET_FUNCS(item_offset, struct btrfs_item, offset, 32); 1957 BTRFS_SETGET_FUNCS(item_size, struct btrfs_item, size, 32); 1958 1959 static inline unsigned long btrfs_item_nr_offset(int nr) 1960 { 1961 return offsetof(struct btrfs_leaf, items) + 1962 sizeof(struct btrfs_item) * nr; 1963 } 1964 1965 static inline struct btrfs_item *btrfs_item_nr(struct extent_buffer *eb, 1966 int nr) 1967 { 1968 return (struct btrfs_item *)btrfs_item_nr_offset(nr); 1969 } 1970 1971 static inline u32 btrfs_item_end(struct extent_buffer *eb, 1972 struct btrfs_item *item) 1973 { 1974 return btrfs_item_offset(eb, item) + btrfs_item_size(eb, item); 1975 } 1976 1977 static inline u32 btrfs_item_end_nr(struct extent_buffer *eb, int nr) 1978 { 1979 return btrfs_item_end(eb, btrfs_item_nr(eb, nr)); 1980 } 1981 1982 static inline u32 btrfs_item_offset_nr(struct extent_buffer *eb, int nr) 1983 { 1984 return btrfs_item_offset(eb, btrfs_item_nr(eb, nr)); 1985 } 1986 1987 static inline u32 btrfs_item_size_nr(struct extent_buffer *eb, int nr) 1988 { 1989 return btrfs_item_size(eb, btrfs_item_nr(eb, nr)); 1990 } 1991 1992 static inline void btrfs_item_key(struct extent_buffer *eb, 1993 struct btrfs_disk_key *disk_key, int nr) 1994 { 1995 struct btrfs_item *item = btrfs_item_nr(eb, nr); 1996 read_eb_member(eb, item, struct btrfs_item, key, disk_key); 1997 } 1998 1999 static inline void btrfs_set_item_key(struct extent_buffer *eb, 2000 struct btrfs_disk_key *disk_key, int nr) 2001 { 2002 struct btrfs_item *item = btrfs_item_nr(eb, nr); 2003 write_eb_member(eb, item, struct btrfs_item, key, disk_key); 2004 } 2005 2006 BTRFS_SETGET_FUNCS(dir_log_end, struct btrfs_dir_log_item, end, 64); 2007 2008 /* 2009 * struct btrfs_root_ref 2010 */ 2011 BTRFS_SETGET_FUNCS(root_ref_dirid, struct btrfs_root_ref, dirid, 64); 2012 BTRFS_SETGET_FUNCS(root_ref_sequence, struct btrfs_root_ref, sequence, 64); 2013 BTRFS_SETGET_FUNCS(root_ref_name_len, struct btrfs_root_ref, name_len, 16); 2014 2015 /* struct btrfs_dir_item */ 2016 BTRFS_SETGET_FUNCS(dir_data_len, struct btrfs_dir_item, data_len, 16); 2017 BTRFS_SETGET_FUNCS(dir_type, struct btrfs_dir_item, type, 8); 2018 BTRFS_SETGET_FUNCS(dir_name_len, struct btrfs_dir_item, name_len, 16); 2019 BTRFS_SETGET_FUNCS(dir_transid, struct btrfs_dir_item, transid, 64); 2020 2021 static inline void btrfs_dir_item_key(struct extent_buffer *eb, 2022 struct btrfs_dir_item *item, 2023 struct btrfs_disk_key *key) 2024 { 2025 read_eb_member(eb, item, struct btrfs_dir_item, location, key); 2026 } 2027 2028 static inline void btrfs_set_dir_item_key(struct extent_buffer *eb, 2029 struct btrfs_dir_item *item, 2030 struct btrfs_disk_key *key) 2031 { 2032 write_eb_member(eb, item, struct btrfs_dir_item, location, key); 2033 } 2034 2035 BTRFS_SETGET_FUNCS(free_space_entries, struct btrfs_free_space_header, 2036 num_entries, 64); 2037 BTRFS_SETGET_FUNCS(free_space_bitmaps, struct btrfs_free_space_header, 2038 num_bitmaps, 64); 2039 BTRFS_SETGET_FUNCS(free_space_generation, struct btrfs_free_space_header, 2040 generation, 64); 2041 2042 static inline void btrfs_free_space_key(struct extent_buffer *eb, 2043 struct btrfs_free_space_header *h, 2044 struct btrfs_disk_key *key) 2045 { 2046 read_eb_member(eb, h, struct btrfs_free_space_header, location, key); 2047 } 2048 2049 static inline void btrfs_set_free_space_key(struct extent_buffer *eb, 2050 struct btrfs_free_space_header *h, 2051 struct btrfs_disk_key *key) 2052 { 2053 write_eb_member(eb, h, struct btrfs_free_space_header, location, key); 2054 } 2055 2056 /* struct btrfs_disk_key */ 2057 BTRFS_SETGET_STACK_FUNCS(disk_key_objectid, struct btrfs_disk_key, 2058 objectid, 64); 2059 BTRFS_SETGET_STACK_FUNCS(disk_key_offset, struct btrfs_disk_key, offset, 64); 2060 BTRFS_SETGET_STACK_FUNCS(disk_key_type, struct btrfs_disk_key, type, 8); 2061 2062 static inline void btrfs_disk_key_to_cpu(struct btrfs_key *cpu, 2063 struct btrfs_disk_key *disk) 2064 { 2065 cpu->offset = le64_to_cpu(disk->offset); 2066 cpu->type = disk->type; 2067 cpu->objectid = le64_to_cpu(disk->objectid); 2068 } 2069 2070 static inline void btrfs_cpu_key_to_disk(struct btrfs_disk_key *disk, 2071 struct btrfs_key *cpu) 2072 { 2073 disk->offset = cpu_to_le64(cpu->offset); 2074 disk->type = cpu->type; 2075 disk->objectid = cpu_to_le64(cpu->objectid); 2076 } 2077 2078 static inline void btrfs_node_key_to_cpu(struct extent_buffer *eb, 2079 struct btrfs_key *key, int nr) 2080 { 2081 struct btrfs_disk_key disk_key; 2082 btrfs_node_key(eb, &disk_key, nr); 2083 btrfs_disk_key_to_cpu(key, &disk_key); 2084 } 2085 2086 static inline void btrfs_item_key_to_cpu(struct extent_buffer *eb, 2087 struct btrfs_key *key, int nr) 2088 { 2089 struct btrfs_disk_key disk_key; 2090 btrfs_item_key(eb, &disk_key, nr); 2091 btrfs_disk_key_to_cpu(key, &disk_key); 2092 } 2093 2094 static inline void btrfs_dir_item_key_to_cpu(struct extent_buffer *eb, 2095 struct btrfs_dir_item *item, 2096 struct btrfs_key *key) 2097 { 2098 struct btrfs_disk_key disk_key; 2099 btrfs_dir_item_key(eb, item, &disk_key); 2100 btrfs_disk_key_to_cpu(key, &disk_key); 2101 } 2102 2103 2104 static inline u8 btrfs_key_type(struct btrfs_key *key) 2105 { 2106 return key->type; 2107 } 2108 2109 static inline void btrfs_set_key_type(struct btrfs_key *key, u8 val) 2110 { 2111 key->type = val; 2112 } 2113 2114 /* struct btrfs_header */ 2115 BTRFS_SETGET_HEADER_FUNCS(header_bytenr, struct btrfs_header, bytenr, 64); 2116 BTRFS_SETGET_HEADER_FUNCS(header_generation, struct btrfs_header, 2117 generation, 64); 2118 BTRFS_SETGET_HEADER_FUNCS(header_owner, struct btrfs_header, owner, 64); 2119 BTRFS_SETGET_HEADER_FUNCS(header_nritems, struct btrfs_header, nritems, 32); 2120 BTRFS_SETGET_HEADER_FUNCS(header_flags, struct btrfs_header, flags, 64); 2121 BTRFS_SETGET_HEADER_FUNCS(header_level, struct btrfs_header, level, 8); 2122 2123 static inline int btrfs_header_flag(struct extent_buffer *eb, u64 flag) 2124 { 2125 return (btrfs_header_flags(eb) & flag) == flag; 2126 } 2127 2128 static inline int btrfs_set_header_flag(struct extent_buffer *eb, u64 flag) 2129 { 2130 u64 flags = btrfs_header_flags(eb); 2131 btrfs_set_header_flags(eb, flags | flag); 2132 return (flags & flag) == flag; 2133 } 2134 2135 static inline int btrfs_clear_header_flag(struct extent_buffer *eb, u64 flag) 2136 { 2137 u64 flags = btrfs_header_flags(eb); 2138 btrfs_set_header_flags(eb, flags & ~flag); 2139 return (flags & flag) == flag; 2140 } 2141 2142 static inline int btrfs_header_backref_rev(struct extent_buffer *eb) 2143 { 2144 u64 flags = btrfs_header_flags(eb); 2145 return flags >> BTRFS_BACKREF_REV_SHIFT; 2146 } 2147 2148 static inline void btrfs_set_header_backref_rev(struct extent_buffer *eb, 2149 int rev) 2150 { 2151 u64 flags = btrfs_header_flags(eb); 2152 flags &= ~BTRFS_BACKREF_REV_MASK; 2153 flags |= (u64)rev << BTRFS_BACKREF_REV_SHIFT; 2154 btrfs_set_header_flags(eb, flags); 2155 } 2156 2157 static inline u8 *btrfs_header_fsid(struct extent_buffer *eb) 2158 { 2159 unsigned long ptr = offsetof(struct btrfs_header, fsid); 2160 return (u8 *)ptr; 2161 } 2162 2163 static inline u8 *btrfs_header_chunk_tree_uuid(struct extent_buffer *eb) 2164 { 2165 unsigned long ptr = offsetof(struct btrfs_header, chunk_tree_uuid); 2166 return (u8 *)ptr; 2167 } 2168 2169 static inline int btrfs_is_leaf(struct extent_buffer *eb) 2170 { 2171 return btrfs_header_level(eb) == 0; 2172 } 2173 2174 /* struct btrfs_root_item */ 2175 BTRFS_SETGET_FUNCS(disk_root_generation, struct btrfs_root_item, 2176 generation, 64); 2177 BTRFS_SETGET_FUNCS(disk_root_refs, struct btrfs_root_item, refs, 32); 2178 BTRFS_SETGET_FUNCS(disk_root_bytenr, struct btrfs_root_item, bytenr, 64); 2179 BTRFS_SETGET_FUNCS(disk_root_level, struct btrfs_root_item, level, 8); 2180 2181 BTRFS_SETGET_STACK_FUNCS(root_generation, struct btrfs_root_item, 2182 generation, 64); 2183 BTRFS_SETGET_STACK_FUNCS(root_bytenr, struct btrfs_root_item, bytenr, 64); 2184 BTRFS_SETGET_STACK_FUNCS(root_level, struct btrfs_root_item, level, 8); 2185 BTRFS_SETGET_STACK_FUNCS(root_dirid, struct btrfs_root_item, root_dirid, 64); 2186 BTRFS_SETGET_STACK_FUNCS(root_refs, struct btrfs_root_item, refs, 32); 2187 BTRFS_SETGET_STACK_FUNCS(root_flags, struct btrfs_root_item, flags, 64); 2188 BTRFS_SETGET_STACK_FUNCS(root_used, struct btrfs_root_item, bytes_used, 64); 2189 BTRFS_SETGET_STACK_FUNCS(root_limit, struct btrfs_root_item, byte_limit, 64); 2190 BTRFS_SETGET_STACK_FUNCS(root_last_snapshot, struct btrfs_root_item, 2191 last_snapshot, 64); 2192 2193 static inline bool btrfs_root_readonly(struct btrfs_root *root) 2194 { 2195 return (root->root_item.flags & cpu_to_le64(BTRFS_ROOT_SUBVOL_RDONLY)) != 0; 2196 } 2197 2198 /* struct btrfs_root_backup */ 2199 BTRFS_SETGET_STACK_FUNCS(backup_tree_root, struct btrfs_root_backup, 2200 tree_root, 64); 2201 BTRFS_SETGET_STACK_FUNCS(backup_tree_root_gen, struct btrfs_root_backup, 2202 tree_root_gen, 64); 2203 BTRFS_SETGET_STACK_FUNCS(backup_tree_root_level, struct btrfs_root_backup, 2204 tree_root_level, 8); 2205 2206 BTRFS_SETGET_STACK_FUNCS(backup_chunk_root, struct btrfs_root_backup, 2207 chunk_root, 64); 2208 BTRFS_SETGET_STACK_FUNCS(backup_chunk_root_gen, struct btrfs_root_backup, 2209 chunk_root_gen, 64); 2210 BTRFS_SETGET_STACK_FUNCS(backup_chunk_root_level, struct btrfs_root_backup, 2211 chunk_root_level, 8); 2212 2213 BTRFS_SETGET_STACK_FUNCS(backup_extent_root, struct btrfs_root_backup, 2214 extent_root, 64); 2215 BTRFS_SETGET_STACK_FUNCS(backup_extent_root_gen, struct btrfs_root_backup, 2216 extent_root_gen, 64); 2217 BTRFS_SETGET_STACK_FUNCS(backup_extent_root_level, struct btrfs_root_backup, 2218 extent_root_level, 8); 2219 2220 BTRFS_SETGET_STACK_FUNCS(backup_fs_root, struct btrfs_root_backup, 2221 fs_root, 64); 2222 BTRFS_SETGET_STACK_FUNCS(backup_fs_root_gen, struct btrfs_root_backup, 2223 fs_root_gen, 64); 2224 BTRFS_SETGET_STACK_FUNCS(backup_fs_root_level, struct btrfs_root_backup, 2225 fs_root_level, 8); 2226 2227 BTRFS_SETGET_STACK_FUNCS(backup_dev_root, struct btrfs_root_backup, 2228 dev_root, 64); 2229 BTRFS_SETGET_STACK_FUNCS(backup_dev_root_gen, struct btrfs_root_backup, 2230 dev_root_gen, 64); 2231 BTRFS_SETGET_STACK_FUNCS(backup_dev_root_level, struct btrfs_root_backup, 2232 dev_root_level, 8); 2233 2234 BTRFS_SETGET_STACK_FUNCS(backup_csum_root, struct btrfs_root_backup, 2235 csum_root, 64); 2236 BTRFS_SETGET_STACK_FUNCS(backup_csum_root_gen, struct btrfs_root_backup, 2237 csum_root_gen, 64); 2238 BTRFS_SETGET_STACK_FUNCS(backup_csum_root_level, struct btrfs_root_backup, 2239 csum_root_level, 8); 2240 BTRFS_SETGET_STACK_FUNCS(backup_total_bytes, struct btrfs_root_backup, 2241 total_bytes, 64); 2242 BTRFS_SETGET_STACK_FUNCS(backup_bytes_used, struct btrfs_root_backup, 2243 bytes_used, 64); 2244 BTRFS_SETGET_STACK_FUNCS(backup_num_devices, struct btrfs_root_backup, 2245 num_devices, 64); 2246 2247 /* struct btrfs_balance_item */ 2248 BTRFS_SETGET_FUNCS(balance_flags, struct btrfs_balance_item, flags, 64); 2249 2250 static inline void btrfs_balance_data(struct extent_buffer *eb, 2251 struct btrfs_balance_item *bi, 2252 struct btrfs_disk_balance_args *ba) 2253 { 2254 read_eb_member(eb, bi, struct btrfs_balance_item, data, ba); 2255 } 2256 2257 static inline void btrfs_set_balance_data(struct extent_buffer *eb, 2258 struct btrfs_balance_item *bi, 2259 struct btrfs_disk_balance_args *ba) 2260 { 2261 write_eb_member(eb, bi, struct btrfs_balance_item, data, ba); 2262 } 2263 2264 static inline void btrfs_balance_meta(struct extent_buffer *eb, 2265 struct btrfs_balance_item *bi, 2266 struct btrfs_disk_balance_args *ba) 2267 { 2268 read_eb_member(eb, bi, struct btrfs_balance_item, meta, ba); 2269 } 2270 2271 static inline void btrfs_set_balance_meta(struct extent_buffer *eb, 2272 struct btrfs_balance_item *bi, 2273 struct btrfs_disk_balance_args *ba) 2274 { 2275 write_eb_member(eb, bi, struct btrfs_balance_item, meta, ba); 2276 } 2277 2278 static inline void btrfs_balance_sys(struct extent_buffer *eb, 2279 struct btrfs_balance_item *bi, 2280 struct btrfs_disk_balance_args *ba) 2281 { 2282 read_eb_member(eb, bi, struct btrfs_balance_item, sys, ba); 2283 } 2284 2285 static inline void btrfs_set_balance_sys(struct extent_buffer *eb, 2286 struct btrfs_balance_item *bi, 2287 struct btrfs_disk_balance_args *ba) 2288 { 2289 write_eb_member(eb, bi, struct btrfs_balance_item, sys, ba); 2290 } 2291 2292 static inline void 2293 btrfs_disk_balance_args_to_cpu(struct btrfs_balance_args *cpu, 2294 struct btrfs_disk_balance_args *disk) 2295 { 2296 memset(cpu, 0, sizeof(*cpu)); 2297 2298 cpu->profiles = le64_to_cpu(disk->profiles); 2299 cpu->usage = le64_to_cpu(disk->usage); 2300 cpu->devid = le64_to_cpu(disk->devid); 2301 cpu->pstart = le64_to_cpu(disk->pstart); 2302 cpu->pend = le64_to_cpu(disk->pend); 2303 cpu->vstart = le64_to_cpu(disk->vstart); 2304 cpu->vend = le64_to_cpu(disk->vend); 2305 cpu->target = le64_to_cpu(disk->target); 2306 cpu->flags = le64_to_cpu(disk->flags); 2307 } 2308 2309 static inline void 2310 btrfs_cpu_balance_args_to_disk(struct btrfs_disk_balance_args *disk, 2311 struct btrfs_balance_args *cpu) 2312 { 2313 memset(disk, 0, sizeof(*disk)); 2314 2315 disk->profiles = cpu_to_le64(cpu->profiles); 2316 disk->usage = cpu_to_le64(cpu->usage); 2317 disk->devid = cpu_to_le64(cpu->devid); 2318 disk->pstart = cpu_to_le64(cpu->pstart); 2319 disk->pend = cpu_to_le64(cpu->pend); 2320 disk->vstart = cpu_to_le64(cpu->vstart); 2321 disk->vend = cpu_to_le64(cpu->vend); 2322 disk->target = cpu_to_le64(cpu->target); 2323 disk->flags = cpu_to_le64(cpu->flags); 2324 } 2325 2326 /* struct btrfs_super_block */ 2327 BTRFS_SETGET_STACK_FUNCS(super_bytenr, struct btrfs_super_block, bytenr, 64); 2328 BTRFS_SETGET_STACK_FUNCS(super_flags, struct btrfs_super_block, flags, 64); 2329 BTRFS_SETGET_STACK_FUNCS(super_generation, struct btrfs_super_block, 2330 generation, 64); 2331 BTRFS_SETGET_STACK_FUNCS(super_root, struct btrfs_super_block, root, 64); 2332 BTRFS_SETGET_STACK_FUNCS(super_sys_array_size, 2333 struct btrfs_super_block, sys_chunk_array_size, 32); 2334 BTRFS_SETGET_STACK_FUNCS(super_chunk_root_generation, 2335 struct btrfs_super_block, chunk_root_generation, 64); 2336 BTRFS_SETGET_STACK_FUNCS(super_root_level, struct btrfs_super_block, 2337 root_level, 8); 2338 BTRFS_SETGET_STACK_FUNCS(super_chunk_root, struct btrfs_super_block, 2339 chunk_root, 64); 2340 BTRFS_SETGET_STACK_FUNCS(super_chunk_root_level, struct btrfs_super_block, 2341 chunk_root_level, 8); 2342 BTRFS_SETGET_STACK_FUNCS(super_log_root, struct btrfs_super_block, 2343 log_root, 64); 2344 BTRFS_SETGET_STACK_FUNCS(super_log_root_transid, struct btrfs_super_block, 2345 log_root_transid, 64); 2346 BTRFS_SETGET_STACK_FUNCS(super_log_root_level, struct btrfs_super_block, 2347 log_root_level, 8); 2348 BTRFS_SETGET_STACK_FUNCS(super_total_bytes, struct btrfs_super_block, 2349 total_bytes, 64); 2350 BTRFS_SETGET_STACK_FUNCS(super_bytes_used, struct btrfs_super_block, 2351 bytes_used, 64); 2352 BTRFS_SETGET_STACK_FUNCS(super_sectorsize, struct btrfs_super_block, 2353 sectorsize, 32); 2354 BTRFS_SETGET_STACK_FUNCS(super_nodesize, struct btrfs_super_block, 2355 nodesize, 32); 2356 BTRFS_SETGET_STACK_FUNCS(super_leafsize, struct btrfs_super_block, 2357 leafsize, 32); 2358 BTRFS_SETGET_STACK_FUNCS(super_stripesize, struct btrfs_super_block, 2359 stripesize, 32); 2360 BTRFS_SETGET_STACK_FUNCS(super_root_dir, struct btrfs_super_block, 2361 root_dir_objectid, 64); 2362 BTRFS_SETGET_STACK_FUNCS(super_num_devices, struct btrfs_super_block, 2363 num_devices, 64); 2364 BTRFS_SETGET_STACK_FUNCS(super_compat_flags, struct btrfs_super_block, 2365 compat_flags, 64); 2366 BTRFS_SETGET_STACK_FUNCS(super_compat_ro_flags, struct btrfs_super_block, 2367 compat_ro_flags, 64); 2368 BTRFS_SETGET_STACK_FUNCS(super_incompat_flags, struct btrfs_super_block, 2369 incompat_flags, 64); 2370 BTRFS_SETGET_STACK_FUNCS(super_csum_type, struct btrfs_super_block, 2371 csum_type, 16); 2372 BTRFS_SETGET_STACK_FUNCS(super_cache_generation, struct btrfs_super_block, 2373 cache_generation, 64); 2374 2375 static inline int btrfs_super_csum_size(struct btrfs_super_block *s) 2376 { 2377 int t = btrfs_super_csum_type(s); 2378 BUG_ON(t >= ARRAY_SIZE(btrfs_csum_sizes)); 2379 return btrfs_csum_sizes[t]; 2380 } 2381 2382 static inline unsigned long btrfs_leaf_data(struct extent_buffer *l) 2383 { 2384 return offsetof(struct btrfs_leaf, items); 2385 } 2386 2387 /* struct btrfs_file_extent_item */ 2388 BTRFS_SETGET_FUNCS(file_extent_type, struct btrfs_file_extent_item, type, 8); 2389 2390 static inline unsigned long 2391 btrfs_file_extent_inline_start(struct btrfs_file_extent_item *e) 2392 { 2393 unsigned long offset = (unsigned long)e; 2394 offset += offsetof(struct btrfs_file_extent_item, disk_bytenr); 2395 return offset; 2396 } 2397 2398 static inline u32 btrfs_file_extent_calc_inline_size(u32 datasize) 2399 { 2400 return offsetof(struct btrfs_file_extent_item, disk_bytenr) + datasize; 2401 } 2402 2403 BTRFS_SETGET_FUNCS(file_extent_disk_bytenr, struct btrfs_file_extent_item, 2404 disk_bytenr, 64); 2405 BTRFS_SETGET_FUNCS(file_extent_generation, struct btrfs_file_extent_item, 2406 generation, 64); 2407 BTRFS_SETGET_FUNCS(file_extent_disk_num_bytes, struct btrfs_file_extent_item, 2408 disk_num_bytes, 64); 2409 BTRFS_SETGET_FUNCS(file_extent_offset, struct btrfs_file_extent_item, 2410 offset, 64); 2411 BTRFS_SETGET_FUNCS(file_extent_num_bytes, struct btrfs_file_extent_item, 2412 num_bytes, 64); 2413 BTRFS_SETGET_FUNCS(file_extent_ram_bytes, struct btrfs_file_extent_item, 2414 ram_bytes, 64); 2415 BTRFS_SETGET_FUNCS(file_extent_compression, struct btrfs_file_extent_item, 2416 compression, 8); 2417 BTRFS_SETGET_FUNCS(file_extent_encryption, struct btrfs_file_extent_item, 2418 encryption, 8); 2419 BTRFS_SETGET_FUNCS(file_extent_other_encoding, struct btrfs_file_extent_item, 2420 other_encoding, 16); 2421 2422 /* this returns the number of file bytes represented by the inline item. 2423 * If an item is compressed, this is the uncompressed size 2424 */ 2425 static inline u32 btrfs_file_extent_inline_len(struct extent_buffer *eb, 2426 struct btrfs_file_extent_item *e) 2427 { 2428 return btrfs_file_extent_ram_bytes(eb, e); 2429 } 2430 2431 /* 2432 * this returns the number of bytes used by the item on disk, minus the 2433 * size of any extent headers. If a file is compressed on disk, this is 2434 * the compressed size 2435 */ 2436 static inline u32 btrfs_file_extent_inline_item_len(struct extent_buffer *eb, 2437 struct btrfs_item *e) 2438 { 2439 unsigned long offset; 2440 offset = offsetof(struct btrfs_file_extent_item, disk_bytenr); 2441 return btrfs_item_size(eb, e) - offset; 2442 } 2443 2444 /* btrfs_dev_stats_item */ 2445 static inline u64 btrfs_dev_stats_value(struct extent_buffer *eb, 2446 struct btrfs_dev_stats_item *ptr, 2447 int index) 2448 { 2449 u64 val; 2450 2451 read_extent_buffer(eb, &val, 2452 offsetof(struct btrfs_dev_stats_item, values) + 2453 ((unsigned long)ptr) + (index * sizeof(u64)), 2454 sizeof(val)); 2455 return val; 2456 } 2457 2458 static inline void btrfs_set_dev_stats_value(struct extent_buffer *eb, 2459 struct btrfs_dev_stats_item *ptr, 2460 int index, u64 val) 2461 { 2462 write_extent_buffer(eb, &val, 2463 offsetof(struct btrfs_dev_stats_item, values) + 2464 ((unsigned long)ptr) + (index * sizeof(u64)), 2465 sizeof(val)); 2466 } 2467 2468 static inline struct btrfs_fs_info *btrfs_sb(struct super_block *sb) 2469 { 2470 return sb->s_fs_info; 2471 } 2472 2473 static inline u32 btrfs_level_size(struct btrfs_root *root, int level) 2474 { 2475 if (level == 0) 2476 return root->leafsize; 2477 return root->nodesize; 2478 } 2479 2480 /* helper function to cast into the data area of the leaf. */ 2481 #define btrfs_item_ptr(leaf, slot, type) \ 2482 ((type *)(btrfs_leaf_data(leaf) + \ 2483 btrfs_item_offset_nr(leaf, slot))) 2484 2485 #define btrfs_item_ptr_offset(leaf, slot) \ 2486 ((unsigned long)(btrfs_leaf_data(leaf) + \ 2487 btrfs_item_offset_nr(leaf, slot))) 2488 2489 static inline struct dentry *fdentry(struct file *file) 2490 { 2491 return file->f_path.dentry; 2492 } 2493 2494 static inline bool btrfs_mixed_space_info(struct btrfs_space_info *space_info) 2495 { 2496 return ((space_info->flags & BTRFS_BLOCK_GROUP_METADATA) && 2497 (space_info->flags & BTRFS_BLOCK_GROUP_DATA)); 2498 } 2499 2500 static inline gfp_t btrfs_alloc_write_mask(struct address_space *mapping) 2501 { 2502 return mapping_gfp_mask(mapping) & ~__GFP_FS; 2503 } 2504 2505 /* extent-tree.c */ 2506 static inline u64 btrfs_calc_trans_metadata_size(struct btrfs_root *root, 2507 unsigned num_items) 2508 { 2509 return (root->leafsize + root->nodesize * (BTRFS_MAX_LEVEL - 1)) * 2510 3 * num_items; 2511 } 2512 2513 /* 2514 * Doing a truncate won't result in new nodes or leaves, just what we need for 2515 * COW. 2516 */ 2517 static inline u64 btrfs_calc_trunc_metadata_size(struct btrfs_root *root, 2518 unsigned num_items) 2519 { 2520 return (root->leafsize + root->nodesize * (BTRFS_MAX_LEVEL - 1)) * 2521 num_items; 2522 } 2523 2524 void btrfs_put_block_group(struct btrfs_block_group_cache *cache); 2525 int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans, 2526 struct btrfs_root *root, unsigned long count); 2527 int btrfs_lookup_extent(struct btrfs_root *root, u64 start, u64 len); 2528 int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans, 2529 struct btrfs_root *root, u64 bytenr, 2530 u64 num_bytes, u64 *refs, u64 *flags); 2531 int btrfs_pin_extent(struct btrfs_root *root, 2532 u64 bytenr, u64 num, int reserved); 2533 int btrfs_pin_extent_for_log_replay(struct btrfs_trans_handle *trans, 2534 struct btrfs_root *root, 2535 u64 bytenr, u64 num_bytes); 2536 int btrfs_cross_ref_exist(struct btrfs_trans_handle *trans, 2537 struct btrfs_root *root, 2538 u64 objectid, u64 offset, u64 bytenr); 2539 struct btrfs_block_group_cache *btrfs_lookup_block_group( 2540 struct btrfs_fs_info *info, 2541 u64 bytenr); 2542 void btrfs_put_block_group(struct btrfs_block_group_cache *cache); 2543 u64 btrfs_find_block_group(struct btrfs_root *root, 2544 u64 search_start, u64 search_hint, int owner); 2545 struct extent_buffer *btrfs_alloc_free_block(struct btrfs_trans_handle *trans, 2546 struct btrfs_root *root, u32 blocksize, 2547 u64 parent, u64 root_objectid, 2548 struct btrfs_disk_key *key, int level, 2549 u64 hint, u64 empty_size); 2550 void btrfs_free_tree_block(struct btrfs_trans_handle *trans, 2551 struct btrfs_root *root, 2552 struct extent_buffer *buf, 2553 u64 parent, int last_ref); 2554 struct extent_buffer *btrfs_init_new_buffer(struct btrfs_trans_handle *trans, 2555 struct btrfs_root *root, 2556 u64 bytenr, u32 blocksize, 2557 int level); 2558 int btrfs_alloc_reserved_file_extent(struct btrfs_trans_handle *trans, 2559 struct btrfs_root *root, 2560 u64 root_objectid, u64 owner, 2561 u64 offset, struct btrfs_key *ins); 2562 int btrfs_alloc_logged_file_extent(struct btrfs_trans_handle *trans, 2563 struct btrfs_root *root, 2564 u64 root_objectid, u64 owner, u64 offset, 2565 struct btrfs_key *ins); 2566 int btrfs_reserve_extent(struct btrfs_trans_handle *trans, 2567 struct btrfs_root *root, 2568 u64 num_bytes, u64 min_alloc_size, 2569 u64 empty_size, u64 hint_byte, 2570 struct btrfs_key *ins, u64 data); 2571 int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, 2572 struct extent_buffer *buf, int full_backref, int for_cow); 2573 int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, 2574 struct extent_buffer *buf, int full_backref, int for_cow); 2575 int btrfs_set_disk_extent_flags(struct btrfs_trans_handle *trans, 2576 struct btrfs_root *root, 2577 u64 bytenr, u64 num_bytes, u64 flags, 2578 int is_data); 2579 int btrfs_free_extent(struct btrfs_trans_handle *trans, 2580 struct btrfs_root *root, 2581 u64 bytenr, u64 num_bytes, u64 parent, u64 root_objectid, 2582 u64 owner, u64 offset, int for_cow); 2583 2584 int btrfs_free_reserved_extent(struct btrfs_root *root, u64 start, u64 len); 2585 int btrfs_free_and_pin_reserved_extent(struct btrfs_root *root, 2586 u64 start, u64 len); 2587 void btrfs_prepare_extent_commit(struct btrfs_trans_handle *trans, 2588 struct btrfs_root *root); 2589 int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans, 2590 struct btrfs_root *root); 2591 int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, 2592 struct btrfs_root *root, 2593 u64 bytenr, u64 num_bytes, u64 parent, 2594 u64 root_objectid, u64 owner, u64 offset, int for_cow); 2595 2596 int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans, 2597 struct btrfs_root *root); 2598 int btrfs_extent_readonly(struct btrfs_root *root, u64 bytenr); 2599 int btrfs_free_block_groups(struct btrfs_fs_info *info); 2600 int btrfs_read_block_groups(struct btrfs_root *root); 2601 int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr); 2602 int btrfs_make_block_group(struct btrfs_trans_handle *trans, 2603 struct btrfs_root *root, u64 bytes_used, 2604 u64 type, u64 chunk_objectid, u64 chunk_offset, 2605 u64 size); 2606 int btrfs_remove_block_group(struct btrfs_trans_handle *trans, 2607 struct btrfs_root *root, u64 group_start); 2608 u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags); 2609 u64 btrfs_get_alloc_profile(struct btrfs_root *root, int data); 2610 void btrfs_set_inode_space_info(struct btrfs_root *root, struct inode *ionde); 2611 void btrfs_clear_space_info_full(struct btrfs_fs_info *info); 2612 int btrfs_check_data_free_space(struct inode *inode, u64 bytes); 2613 void btrfs_free_reserved_data_space(struct inode *inode, u64 bytes); 2614 void btrfs_trans_release_metadata(struct btrfs_trans_handle *trans, 2615 struct btrfs_root *root); 2616 int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans, 2617 struct inode *inode); 2618 void btrfs_orphan_release_metadata(struct inode *inode); 2619 int btrfs_snap_reserve_metadata(struct btrfs_trans_handle *trans, 2620 struct btrfs_pending_snapshot *pending); 2621 int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes); 2622 void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes); 2623 int btrfs_delalloc_reserve_space(struct inode *inode, u64 num_bytes); 2624 void btrfs_delalloc_release_space(struct inode *inode, u64 num_bytes); 2625 void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv); 2626 struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root); 2627 void btrfs_free_block_rsv(struct btrfs_root *root, 2628 struct btrfs_block_rsv *rsv); 2629 int btrfs_block_rsv_add(struct btrfs_root *root, 2630 struct btrfs_block_rsv *block_rsv, 2631 u64 num_bytes); 2632 int btrfs_block_rsv_add_noflush(struct btrfs_root *root, 2633 struct btrfs_block_rsv *block_rsv, 2634 u64 num_bytes); 2635 int btrfs_block_rsv_check(struct btrfs_root *root, 2636 struct btrfs_block_rsv *block_rsv, int min_factor); 2637 int btrfs_block_rsv_refill(struct btrfs_root *root, 2638 struct btrfs_block_rsv *block_rsv, 2639 u64 min_reserved); 2640 int btrfs_block_rsv_refill_noflush(struct btrfs_root *root, 2641 struct btrfs_block_rsv *block_rsv, 2642 u64 min_reserved); 2643 int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv, 2644 struct btrfs_block_rsv *dst_rsv, 2645 u64 num_bytes); 2646 void btrfs_block_rsv_release(struct btrfs_root *root, 2647 struct btrfs_block_rsv *block_rsv, 2648 u64 num_bytes); 2649 int btrfs_set_block_group_ro(struct btrfs_root *root, 2650 struct btrfs_block_group_cache *cache); 2651 void btrfs_set_block_group_rw(struct btrfs_root *root, 2652 struct btrfs_block_group_cache *cache); 2653 void btrfs_put_block_group_cache(struct btrfs_fs_info *info); 2654 u64 btrfs_account_ro_block_groups_free_space(struct btrfs_space_info *sinfo); 2655 int btrfs_error_unpin_extent_range(struct btrfs_root *root, 2656 u64 start, u64 end); 2657 int btrfs_error_discard_extent(struct btrfs_root *root, u64 bytenr, 2658 u64 num_bytes, u64 *actual_bytes); 2659 int btrfs_force_chunk_alloc(struct btrfs_trans_handle *trans, 2660 struct btrfs_root *root, u64 type); 2661 int btrfs_trim_fs(struct btrfs_root *root, struct fstrim_range *range); 2662 2663 int btrfs_init_space_info(struct btrfs_fs_info *fs_info); 2664 /* ctree.c */ 2665 int btrfs_bin_search(struct extent_buffer *eb, struct btrfs_key *key, 2666 int level, int *slot); 2667 int btrfs_comp_cpu_keys(struct btrfs_key *k1, struct btrfs_key *k2); 2668 int btrfs_previous_item(struct btrfs_root *root, 2669 struct btrfs_path *path, u64 min_objectid, 2670 int type); 2671 void btrfs_set_item_key_safe(struct btrfs_trans_handle *trans, 2672 struct btrfs_root *root, struct btrfs_path *path, 2673 struct btrfs_key *new_key); 2674 struct extent_buffer *btrfs_root_node(struct btrfs_root *root); 2675 struct extent_buffer *btrfs_lock_root_node(struct btrfs_root *root); 2676 int btrfs_find_next_key(struct btrfs_root *root, struct btrfs_path *path, 2677 struct btrfs_key *key, int lowest_level, 2678 int cache_only, u64 min_trans); 2679 int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key, 2680 struct btrfs_key *max_key, 2681 struct btrfs_path *path, int cache_only, 2682 u64 min_trans); 2683 int btrfs_cow_block(struct btrfs_trans_handle *trans, 2684 struct btrfs_root *root, struct extent_buffer *buf, 2685 struct extent_buffer *parent, int parent_slot, 2686 struct extent_buffer **cow_ret); 2687 int btrfs_copy_root(struct btrfs_trans_handle *trans, 2688 struct btrfs_root *root, 2689 struct extent_buffer *buf, 2690 struct extent_buffer **cow_ret, u64 new_root_objectid); 2691 int btrfs_block_can_be_shared(struct btrfs_root *root, 2692 struct extent_buffer *buf); 2693 void btrfs_extend_item(struct btrfs_trans_handle *trans, 2694 struct btrfs_root *root, struct btrfs_path *path, 2695 u32 data_size); 2696 void btrfs_truncate_item(struct btrfs_trans_handle *trans, 2697 struct btrfs_root *root, 2698 struct btrfs_path *path, 2699 u32 new_size, int from_end); 2700 int btrfs_split_item(struct btrfs_trans_handle *trans, 2701 struct btrfs_root *root, 2702 struct btrfs_path *path, 2703 struct btrfs_key *new_key, 2704 unsigned long split_offset); 2705 int btrfs_duplicate_item(struct btrfs_trans_handle *trans, 2706 struct btrfs_root *root, 2707 struct btrfs_path *path, 2708 struct btrfs_key *new_key); 2709 int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root 2710 *root, struct btrfs_key *key, struct btrfs_path *p, int 2711 ins_len, int cow); 2712 int btrfs_search_old_slot(struct btrfs_root *root, struct btrfs_key *key, 2713 struct btrfs_path *p, u64 time_seq); 2714 int btrfs_realloc_node(struct btrfs_trans_handle *trans, 2715 struct btrfs_root *root, struct extent_buffer *parent, 2716 int start_slot, int cache_only, u64 *last_ret, 2717 struct btrfs_key *progress); 2718 void btrfs_release_path(struct btrfs_path *p); 2719 struct btrfs_path *btrfs_alloc_path(void); 2720 void btrfs_free_path(struct btrfs_path *p); 2721 void btrfs_set_path_blocking(struct btrfs_path *p); 2722 void btrfs_clear_path_blocking(struct btrfs_path *p, 2723 struct extent_buffer *held, int held_rw); 2724 void btrfs_unlock_up_safe(struct btrfs_path *p, int level); 2725 2726 int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root, 2727 struct btrfs_path *path, int slot, int nr); 2728 static inline int btrfs_del_item(struct btrfs_trans_handle *trans, 2729 struct btrfs_root *root, 2730 struct btrfs_path *path) 2731 { 2732 return btrfs_del_items(trans, root, path, path->slots[0], 1); 2733 } 2734 2735 void setup_items_for_insert(struct btrfs_trans_handle *trans, 2736 struct btrfs_root *root, struct btrfs_path *path, 2737 struct btrfs_key *cpu_key, u32 *data_size, 2738 u32 total_data, u32 total_size, int nr); 2739 int btrfs_insert_item(struct btrfs_trans_handle *trans, struct btrfs_root 2740 *root, struct btrfs_key *key, void *data, u32 data_size); 2741 int btrfs_insert_empty_items(struct btrfs_trans_handle *trans, 2742 struct btrfs_root *root, 2743 struct btrfs_path *path, 2744 struct btrfs_key *cpu_key, u32 *data_size, int nr); 2745 2746 static inline int btrfs_insert_empty_item(struct btrfs_trans_handle *trans, 2747 struct btrfs_root *root, 2748 struct btrfs_path *path, 2749 struct btrfs_key *key, 2750 u32 data_size) 2751 { 2752 return btrfs_insert_empty_items(trans, root, path, key, &data_size, 1); 2753 } 2754 2755 int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path); 2756 int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, 2757 u64 time_seq); 2758 static inline int btrfs_next_old_item(struct btrfs_root *root, 2759 struct btrfs_path *p, u64 time_seq) 2760 { 2761 ++p->slots[0]; 2762 if (p->slots[0] >= btrfs_header_nritems(p->nodes[0])) 2763 return btrfs_next_old_leaf(root, p, time_seq); 2764 return 0; 2765 } 2766 static inline int btrfs_next_item(struct btrfs_root *root, struct btrfs_path *p) 2767 { 2768 return btrfs_next_old_item(root, p, 0); 2769 } 2770 int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path); 2771 int btrfs_leaf_free_space(struct btrfs_root *root, struct extent_buffer *leaf); 2772 int __must_check btrfs_drop_snapshot(struct btrfs_root *root, 2773 struct btrfs_block_rsv *block_rsv, 2774 int update_ref, int for_reloc); 2775 int btrfs_drop_subtree(struct btrfs_trans_handle *trans, 2776 struct btrfs_root *root, 2777 struct extent_buffer *node, 2778 struct extent_buffer *parent); 2779 static inline int btrfs_fs_closing(struct btrfs_fs_info *fs_info) 2780 { 2781 /* 2782 * Get synced with close_ctree() 2783 */ 2784 smp_mb(); 2785 return fs_info->closing; 2786 } 2787 static inline void free_fs_info(struct btrfs_fs_info *fs_info) 2788 { 2789 kfree(fs_info->balance_ctl); 2790 kfree(fs_info->delayed_root); 2791 kfree(fs_info->extent_root); 2792 kfree(fs_info->tree_root); 2793 kfree(fs_info->chunk_root); 2794 kfree(fs_info->dev_root); 2795 kfree(fs_info->csum_root); 2796 kfree(fs_info->super_copy); 2797 kfree(fs_info->super_for_commit); 2798 kfree(fs_info); 2799 } 2800 2801 /* root-item.c */ 2802 int btrfs_find_root_ref(struct btrfs_root *tree_root, 2803 struct btrfs_path *path, 2804 u64 root_id, u64 ref_id); 2805 int btrfs_add_root_ref(struct btrfs_trans_handle *trans, 2806 struct btrfs_root *tree_root, 2807 u64 root_id, u64 ref_id, u64 dirid, u64 sequence, 2808 const char *name, int name_len); 2809 int btrfs_del_root_ref(struct btrfs_trans_handle *trans, 2810 struct btrfs_root *tree_root, 2811 u64 root_id, u64 ref_id, u64 dirid, u64 *sequence, 2812 const char *name, int name_len); 2813 int btrfs_del_root(struct btrfs_trans_handle *trans, struct btrfs_root *root, 2814 struct btrfs_key *key); 2815 int btrfs_insert_root(struct btrfs_trans_handle *trans, struct btrfs_root 2816 *root, struct btrfs_key *key, struct btrfs_root_item 2817 *item); 2818 int __must_check btrfs_update_root(struct btrfs_trans_handle *trans, 2819 struct btrfs_root *root, 2820 struct btrfs_key *key, 2821 struct btrfs_root_item *item); 2822 int btrfs_find_last_root(struct btrfs_root *root, u64 objectid, struct 2823 btrfs_root_item *item, struct btrfs_key *key); 2824 int btrfs_find_dead_roots(struct btrfs_root *root, u64 objectid); 2825 int btrfs_find_orphan_roots(struct btrfs_root *tree_root); 2826 void btrfs_set_root_node(struct btrfs_root_item *item, 2827 struct extent_buffer *node); 2828 void btrfs_check_and_init_root_item(struct btrfs_root_item *item); 2829 2830 /* dir-item.c */ 2831 int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, 2832 struct btrfs_root *root, const char *name, 2833 int name_len, struct inode *dir, 2834 struct btrfs_key *location, u8 type, u64 index); 2835 struct btrfs_dir_item *btrfs_lookup_dir_item(struct btrfs_trans_handle *trans, 2836 struct btrfs_root *root, 2837 struct btrfs_path *path, u64 dir, 2838 const char *name, int name_len, 2839 int mod); 2840 struct btrfs_dir_item * 2841 btrfs_lookup_dir_index_item(struct btrfs_trans_handle *trans, 2842 struct btrfs_root *root, 2843 struct btrfs_path *path, u64 dir, 2844 u64 objectid, const char *name, int name_len, 2845 int mod); 2846 struct btrfs_dir_item * 2847 btrfs_search_dir_index_item(struct btrfs_root *root, 2848 struct btrfs_path *path, u64 dirid, 2849 const char *name, int name_len); 2850 struct btrfs_dir_item *btrfs_match_dir_item_name(struct btrfs_root *root, 2851 struct btrfs_path *path, 2852 const char *name, int name_len); 2853 int btrfs_delete_one_dir_name(struct btrfs_trans_handle *trans, 2854 struct btrfs_root *root, 2855 struct btrfs_path *path, 2856 struct btrfs_dir_item *di); 2857 int btrfs_insert_xattr_item(struct btrfs_trans_handle *trans, 2858 struct btrfs_root *root, 2859 struct btrfs_path *path, u64 objectid, 2860 const char *name, u16 name_len, 2861 const void *data, u16 data_len); 2862 struct btrfs_dir_item *btrfs_lookup_xattr(struct btrfs_trans_handle *trans, 2863 struct btrfs_root *root, 2864 struct btrfs_path *path, u64 dir, 2865 const char *name, u16 name_len, 2866 int mod); 2867 int verify_dir_item(struct btrfs_root *root, 2868 struct extent_buffer *leaf, 2869 struct btrfs_dir_item *dir_item); 2870 2871 /* orphan.c */ 2872 int btrfs_insert_orphan_item(struct btrfs_trans_handle *trans, 2873 struct btrfs_root *root, u64 offset); 2874 int btrfs_del_orphan_item(struct btrfs_trans_handle *trans, 2875 struct btrfs_root *root, u64 offset); 2876 int btrfs_find_orphan_item(struct btrfs_root *root, u64 offset); 2877 2878 /* inode-item.c */ 2879 int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans, 2880 struct btrfs_root *root, 2881 const char *name, int name_len, 2882 u64 inode_objectid, u64 ref_objectid, u64 index); 2883 int btrfs_del_inode_ref(struct btrfs_trans_handle *trans, 2884 struct btrfs_root *root, 2885 const char *name, int name_len, 2886 u64 inode_objectid, u64 ref_objectid, u64 *index); 2887 struct btrfs_inode_ref * 2888 btrfs_lookup_inode_ref(struct btrfs_trans_handle *trans, 2889 struct btrfs_root *root, 2890 struct btrfs_path *path, 2891 const char *name, int name_len, 2892 u64 inode_objectid, u64 ref_objectid, int mod); 2893 int btrfs_insert_empty_inode(struct btrfs_trans_handle *trans, 2894 struct btrfs_root *root, 2895 struct btrfs_path *path, u64 objectid); 2896 int btrfs_lookup_inode(struct btrfs_trans_handle *trans, struct btrfs_root 2897 *root, struct btrfs_path *path, 2898 struct btrfs_key *location, int mod); 2899 2900 /* file-item.c */ 2901 int btrfs_del_csums(struct btrfs_trans_handle *trans, 2902 struct btrfs_root *root, u64 bytenr, u64 len); 2903 int btrfs_lookup_bio_sums(struct btrfs_root *root, struct inode *inode, 2904 struct bio *bio, u32 *dst); 2905 int btrfs_lookup_bio_sums_dio(struct btrfs_root *root, struct inode *inode, 2906 struct bio *bio, u64 logical_offset, u32 *dst); 2907 int btrfs_insert_file_extent(struct btrfs_trans_handle *trans, 2908 struct btrfs_root *root, 2909 u64 objectid, u64 pos, 2910 u64 disk_offset, u64 disk_num_bytes, 2911 u64 num_bytes, u64 offset, u64 ram_bytes, 2912 u8 compression, u8 encryption, u16 other_encoding); 2913 int btrfs_lookup_file_extent(struct btrfs_trans_handle *trans, 2914 struct btrfs_root *root, 2915 struct btrfs_path *path, u64 objectid, 2916 u64 bytenr, int mod); 2917 int btrfs_csum_file_blocks(struct btrfs_trans_handle *trans, 2918 struct btrfs_root *root, 2919 struct btrfs_ordered_sum *sums); 2920 int btrfs_csum_one_bio(struct btrfs_root *root, struct inode *inode, 2921 struct bio *bio, u64 file_start, int contig); 2922 struct btrfs_csum_item *btrfs_lookup_csum(struct btrfs_trans_handle *trans, 2923 struct btrfs_root *root, 2924 struct btrfs_path *path, 2925 u64 bytenr, int cow); 2926 int btrfs_csum_truncate(struct btrfs_trans_handle *trans, 2927 struct btrfs_root *root, struct btrfs_path *path, 2928 u64 isize); 2929 int btrfs_lookup_csums_range(struct btrfs_root *root, u64 start, u64 end, 2930 struct list_head *list, int search_commit); 2931 /* inode.c */ 2932 struct extent_map *btrfs_get_extent_fiemap(struct inode *inode, struct page *page, 2933 size_t pg_offset, u64 start, u64 len, 2934 int create); 2935 2936 /* RHEL and EL kernels have a patch that renames PG_checked to FsMisc */ 2937 #if defined(ClearPageFsMisc) && !defined(ClearPageChecked) 2938 #define ClearPageChecked ClearPageFsMisc 2939 #define SetPageChecked SetPageFsMisc 2940 #define PageChecked PageFsMisc 2941 #endif 2942 2943 /* This forces readahead on a given range of bytes in an inode */ 2944 static inline void btrfs_force_ra(struct address_space *mapping, 2945 struct file_ra_state *ra, struct file *file, 2946 pgoff_t offset, unsigned long req_size) 2947 { 2948 page_cache_sync_readahead(mapping, ra, file, offset, req_size); 2949 } 2950 2951 struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry); 2952 int btrfs_set_inode_index(struct inode *dir, u64 *index); 2953 int btrfs_unlink_inode(struct btrfs_trans_handle *trans, 2954 struct btrfs_root *root, 2955 struct inode *dir, struct inode *inode, 2956 const char *name, int name_len); 2957 int btrfs_add_link(struct btrfs_trans_handle *trans, 2958 struct inode *parent_inode, struct inode *inode, 2959 const char *name, int name_len, int add_backref, u64 index); 2960 int btrfs_unlink_subvol(struct btrfs_trans_handle *trans, 2961 struct btrfs_root *root, 2962 struct inode *dir, u64 objectid, 2963 const char *name, int name_len); 2964 int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans, 2965 struct btrfs_root *root, 2966 struct inode *inode, u64 new_size, 2967 u32 min_type); 2968 2969 int btrfs_start_delalloc_inodes(struct btrfs_root *root, int delay_iput); 2970 int btrfs_set_extent_delalloc(struct inode *inode, u64 start, u64 end, 2971 struct extent_state **cached_state); 2972 int btrfs_writepages(struct address_space *mapping, 2973 struct writeback_control *wbc); 2974 int btrfs_create_subvol_root(struct btrfs_trans_handle *trans, 2975 struct btrfs_root *new_root, u64 new_dirid); 2976 int btrfs_merge_bio_hook(struct page *page, unsigned long offset, 2977 size_t size, struct bio *bio, unsigned long bio_flags); 2978 2979 int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf); 2980 int btrfs_readpage(struct file *file, struct page *page); 2981 void btrfs_evict_inode(struct inode *inode); 2982 int btrfs_write_inode(struct inode *inode, struct writeback_control *wbc); 2983 int btrfs_dirty_inode(struct inode *inode); 2984 struct inode *btrfs_alloc_inode(struct super_block *sb); 2985 void btrfs_destroy_inode(struct inode *inode); 2986 int btrfs_drop_inode(struct inode *inode); 2987 int btrfs_init_cachep(void); 2988 void btrfs_destroy_cachep(void); 2989 long btrfs_ioctl_trans_end(struct file *file); 2990 struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location, 2991 struct btrfs_root *root, int *was_new); 2992 struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page, 2993 size_t pg_offset, u64 start, u64 end, 2994 int create); 2995 int btrfs_update_inode(struct btrfs_trans_handle *trans, 2996 struct btrfs_root *root, 2997 struct inode *inode); 2998 int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode); 2999 int btrfs_orphan_del(struct btrfs_trans_handle *trans, struct inode *inode); 3000 int btrfs_orphan_cleanup(struct btrfs_root *root); 3001 void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans, 3002 struct btrfs_root *root); 3003 int btrfs_cont_expand(struct inode *inode, loff_t oldsize, loff_t size); 3004 void btrfs_invalidate_inodes(struct btrfs_root *root); 3005 void btrfs_add_delayed_iput(struct inode *inode); 3006 void btrfs_run_delayed_iputs(struct btrfs_root *root); 3007 int btrfs_prealloc_file_range(struct inode *inode, int mode, 3008 u64 start, u64 num_bytes, u64 min_size, 3009 loff_t actual_len, u64 *alloc_hint); 3010 int btrfs_prealloc_file_range_trans(struct inode *inode, 3011 struct btrfs_trans_handle *trans, int mode, 3012 u64 start, u64 num_bytes, u64 min_size, 3013 loff_t actual_len, u64 *alloc_hint); 3014 extern const struct dentry_operations btrfs_dentry_operations; 3015 3016 /* ioctl.c */ 3017 long btrfs_ioctl(struct file *file, unsigned int cmd, unsigned long arg); 3018 void btrfs_update_iflags(struct inode *inode); 3019 void btrfs_inherit_iflags(struct inode *inode, struct inode *dir); 3020 int btrfs_defrag_file(struct inode *inode, struct file *file, 3021 struct btrfs_ioctl_defrag_range_args *range, 3022 u64 newer_than, unsigned long max_pages); 3023 /* file.c */ 3024 int btrfs_add_inode_defrag(struct btrfs_trans_handle *trans, 3025 struct inode *inode); 3026 int btrfs_run_defrag_inodes(struct btrfs_fs_info *fs_info); 3027 int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync); 3028 int btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end, 3029 int skip_pinned); 3030 extern const struct file_operations btrfs_file_operations; 3031 int btrfs_drop_extents(struct btrfs_trans_handle *trans, struct inode *inode, 3032 u64 start, u64 end, u64 *hint_byte, int drop_cache); 3033 int btrfs_mark_extent_written(struct btrfs_trans_handle *trans, 3034 struct inode *inode, u64 start, u64 end); 3035 int btrfs_release_file(struct inode *inode, struct file *file); 3036 void btrfs_drop_pages(struct page **pages, size_t num_pages); 3037 int btrfs_dirty_pages(struct btrfs_root *root, struct inode *inode, 3038 struct page **pages, size_t num_pages, 3039 loff_t pos, size_t write_bytes, 3040 struct extent_state **cached); 3041 3042 /* tree-defrag.c */ 3043 int btrfs_defrag_leaves(struct btrfs_trans_handle *trans, 3044 struct btrfs_root *root, int cache_only); 3045 3046 /* sysfs.c */ 3047 int btrfs_init_sysfs(void); 3048 void btrfs_exit_sysfs(void); 3049 3050 /* xattr.c */ 3051 ssize_t btrfs_listxattr(struct dentry *dentry, char *buffer, size_t size); 3052 3053 /* super.c */ 3054 int btrfs_parse_options(struct btrfs_root *root, char *options); 3055 int btrfs_sync_fs(struct super_block *sb, int wait); 3056 void btrfs_printk(struct btrfs_fs_info *fs_info, const char *fmt, ...); 3057 void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function, 3058 unsigned int line, int errno, const char *fmt, ...); 3059 3060 void __btrfs_abort_transaction(struct btrfs_trans_handle *trans, 3061 struct btrfs_root *root, const char *function, 3062 unsigned int line, int errno); 3063 3064 #define btrfs_abort_transaction(trans, root, errno) \ 3065 do { \ 3066 __btrfs_abort_transaction(trans, root, __func__, \ 3067 __LINE__, errno); \ 3068 } while (0) 3069 3070 #define btrfs_std_error(fs_info, errno) \ 3071 do { \ 3072 if ((errno)) \ 3073 __btrfs_std_error((fs_info), __func__, \ 3074 __LINE__, (errno), NULL); \ 3075 } while (0) 3076 3077 #define btrfs_error(fs_info, errno, fmt, args...) \ 3078 do { \ 3079 __btrfs_std_error((fs_info), __func__, __LINE__, \ 3080 (errno), fmt, ##args); \ 3081 } while (0) 3082 3083 void __btrfs_panic(struct btrfs_fs_info *fs_info, const char *function, 3084 unsigned int line, int errno, const char *fmt, ...); 3085 3086 #define btrfs_panic(fs_info, errno, fmt, args...) \ 3087 do { \ 3088 struct btrfs_fs_info *_i = (fs_info); \ 3089 __btrfs_panic(_i, __func__, __LINE__, errno, fmt, ##args); \ 3090 BUG_ON(!(_i->mount_opt & BTRFS_MOUNT_PANIC_ON_FATAL_ERROR)); \ 3091 } while (0) 3092 3093 /* acl.c */ 3094 #ifdef CONFIG_BTRFS_FS_POSIX_ACL 3095 struct posix_acl *btrfs_get_acl(struct inode *inode, int type); 3096 int btrfs_init_acl(struct btrfs_trans_handle *trans, 3097 struct inode *inode, struct inode *dir); 3098 int btrfs_acl_chmod(struct inode *inode); 3099 #else 3100 #define btrfs_get_acl NULL 3101 static inline int btrfs_init_acl(struct btrfs_trans_handle *trans, 3102 struct inode *inode, struct inode *dir) 3103 { 3104 return 0; 3105 } 3106 static inline int btrfs_acl_chmod(struct inode *inode) 3107 { 3108 return 0; 3109 } 3110 #endif 3111 3112 /* relocation.c */ 3113 int btrfs_relocate_block_group(struct btrfs_root *root, u64 group_start); 3114 int btrfs_init_reloc_root(struct btrfs_trans_handle *trans, 3115 struct btrfs_root *root); 3116 int btrfs_update_reloc_root(struct btrfs_trans_handle *trans, 3117 struct btrfs_root *root); 3118 int btrfs_recover_relocation(struct btrfs_root *root); 3119 int btrfs_reloc_clone_csums(struct inode *inode, u64 file_pos, u64 len); 3120 void btrfs_reloc_cow_block(struct btrfs_trans_handle *trans, 3121 struct btrfs_root *root, struct extent_buffer *buf, 3122 struct extent_buffer *cow); 3123 void btrfs_reloc_pre_snapshot(struct btrfs_trans_handle *trans, 3124 struct btrfs_pending_snapshot *pending, 3125 u64 *bytes_to_reserve); 3126 int btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans, 3127 struct btrfs_pending_snapshot *pending); 3128 3129 /* scrub.c */ 3130 int btrfs_scrub_dev(struct btrfs_root *root, u64 devid, u64 start, u64 end, 3131 struct btrfs_scrub_progress *progress, int readonly); 3132 void btrfs_scrub_pause(struct btrfs_root *root); 3133 void btrfs_scrub_pause_super(struct btrfs_root *root); 3134 void btrfs_scrub_continue(struct btrfs_root *root); 3135 void btrfs_scrub_continue_super(struct btrfs_root *root); 3136 int __btrfs_scrub_cancel(struct btrfs_fs_info *info); 3137 int btrfs_scrub_cancel(struct btrfs_root *root); 3138 int btrfs_scrub_cancel_dev(struct btrfs_root *root, struct btrfs_device *dev); 3139 int btrfs_scrub_cancel_devid(struct btrfs_root *root, u64 devid); 3140 int btrfs_scrub_progress(struct btrfs_root *root, u64 devid, 3141 struct btrfs_scrub_progress *progress); 3142 3143 /* reada.c */ 3144 struct reada_control { 3145 struct btrfs_root *root; /* tree to prefetch */ 3146 struct btrfs_key key_start; 3147 struct btrfs_key key_end; /* exclusive */ 3148 atomic_t elems; 3149 struct kref refcnt; 3150 wait_queue_head_t wait; 3151 }; 3152 struct reada_control *btrfs_reada_add(struct btrfs_root *root, 3153 struct btrfs_key *start, struct btrfs_key *end); 3154 int btrfs_reada_wait(void *handle); 3155 void btrfs_reada_detach(void *handle); 3156 int btree_readahead_hook(struct btrfs_root *root, struct extent_buffer *eb, 3157 u64 start, int err); 3158 3159 /* delayed seq elem */ 3160 struct seq_list { 3161 struct list_head list; 3162 u64 seq; 3163 u32 flags; 3164 }; 3165 3166 void btrfs_get_tree_mod_seq(struct btrfs_fs_info *fs_info, 3167 struct seq_list *elem); 3168 void btrfs_put_tree_mod_seq(struct btrfs_fs_info *fs_info, 3169 struct seq_list *elem); 3170 3171 static inline int is_fstree(u64 rootid) 3172 { 3173 if (rootid == BTRFS_FS_TREE_OBJECTID || 3174 (s64)rootid >= (s64)BTRFS_FIRST_FREE_OBJECTID) 3175 return 1; 3176 return 0; 3177 } 3178 #endif 3179