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