2
* Copyright (C) 2007 Oracle. All rights reserved.
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.
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.
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.
19
#ifndef __BTRFS_CTREE__
20
#define __BTRFS_CTREE__
23
#include <linux/highmem.h>
25
#include <linux/rwsem.h>
26
#include <linux/completion.h>
27
#include <linux/backing-dev.h>
28
#include <linux/wait.h>
29
#include <linux/slab.h>
30
#include <linux/kobject.h>
31
#include <trace/events/btrfs.h>
32
#include <asm/kmap_types.h>
33
#include <linux/pagemap.h>
34
#include "extent_io.h"
35
#include "extent_map.h"
36
#include "async-thread.h"
39
struct btrfs_trans_handle;
40
struct btrfs_transaction;
41
struct btrfs_pending_snapshot;
42
extern struct kmem_cache *btrfs_trans_handle_cachep;
43
extern struct kmem_cache *btrfs_transaction_cachep;
44
extern struct kmem_cache *btrfs_bit_radix_cachep;
45
extern struct kmem_cache *btrfs_path_cachep;
46
extern struct kmem_cache *btrfs_free_space_cachep;
47
struct btrfs_ordered_sum;
49
#define BTRFS_MAGIC "_BHRfS_M"
51
#define BTRFS_MAX_LEVEL 8
53
#define BTRFS_COMPAT_EXTENT_TREE_V0
56
* files bigger than this get some pre-flushing when they are added
57
* to the ordered operations list. That way we limit the total
58
* work done by the commit
60
#define BTRFS_ORDERED_OPERATIONS_FLUSH_LIMIT (8 * 1024 * 1024)
62
/* holds pointers to all of the tree roots */
63
#define BTRFS_ROOT_TREE_OBJECTID 1ULL
65
/* stores information about which extents are in use, and reference counts */
66
#define BTRFS_EXTENT_TREE_OBJECTID 2ULL
69
* chunk tree stores translations from logical -> physical block numbering
70
* the super block points to the chunk tree
72
#define BTRFS_CHUNK_TREE_OBJECTID 3ULL
75
* stores information about which areas of a given device are in use.
76
* one per device. The tree of tree roots points to the device tree
78
#define BTRFS_DEV_TREE_OBJECTID 4ULL
80
/* one per subvolume, storing files and directories */
81
#define BTRFS_FS_TREE_OBJECTID 5ULL
83
/* directory objectid inside the root tree */
84
#define BTRFS_ROOT_TREE_DIR_OBJECTID 6ULL
86
/* holds checksums of all the data extents */
87
#define BTRFS_CSUM_TREE_OBJECTID 7ULL
89
/* orhpan objectid for tracking unlinked/truncated files */
90
#define BTRFS_ORPHAN_OBJECTID -5ULL
92
/* does write ahead logging to speed up fsyncs */
93
#define BTRFS_TREE_LOG_OBJECTID -6ULL
94
#define BTRFS_TREE_LOG_FIXUP_OBJECTID -7ULL
96
/* for space balancing */
97
#define BTRFS_TREE_RELOC_OBJECTID -8ULL
98
#define BTRFS_DATA_RELOC_TREE_OBJECTID -9ULL
101
* extent checksums all have this objectid
102
* this allows them to share the logging tree
105
#define BTRFS_EXTENT_CSUM_OBJECTID -10ULL
107
/* For storing free space cache */
108
#define BTRFS_FREE_SPACE_OBJECTID -11ULL
111
* The inode number assigned to the special inode for sotring
114
#define BTRFS_FREE_INO_OBJECTID -12ULL
116
/* dummy objectid represents multiple objectids */
117
#define BTRFS_MULTIPLE_OBJECTIDS -255ULL
120
* All files have objectids in this range.
122
#define BTRFS_FIRST_FREE_OBJECTID 256ULL
123
#define BTRFS_LAST_FREE_OBJECTID -256ULL
124
#define BTRFS_FIRST_CHUNK_TREE_OBJECTID 256ULL
128
* the device items go into the chunk tree. The key is in the form
129
* [ 1 BTRFS_DEV_ITEM_KEY device_id ]
131
#define BTRFS_DEV_ITEMS_OBJECTID 1ULL
133
#define BTRFS_BTREE_INODE_OBJECTID 1
135
#define BTRFS_EMPTY_SUBVOL_DIR_OBJECTID 2
138
* we can actually store much bigger names, but lets not confuse the rest
141
#define BTRFS_NAME_LEN 255
143
/* 32 bytes in various csum fields */
144
#define BTRFS_CSUM_SIZE 32
147
#define BTRFS_CSUM_TYPE_CRC32 0
149
static int btrfs_csum_sizes[] = { 4, 0 };
151
/* four bytes for CRC32 */
152
#define BTRFS_EMPTY_DIR_SIZE 0
154
#define BTRFS_FT_UNKNOWN 0
155
#define BTRFS_FT_REG_FILE 1
156
#define BTRFS_FT_DIR 2
157
#define BTRFS_FT_CHRDEV 3
158
#define BTRFS_FT_BLKDEV 4
159
#define BTRFS_FT_FIFO 5
160
#define BTRFS_FT_SOCK 6
161
#define BTRFS_FT_SYMLINK 7
162
#define BTRFS_FT_XATTR 8
163
#define BTRFS_FT_MAX 9
166
* The key defines the order in the tree, and so it also defines (optimal)
169
* objectid corresponds to the inode number.
171
* type tells us things about the object, and is a kind of stream selector.
172
* so for a given inode, keys with type of 1 might refer to the inode data,
173
* type of 2 may point to file data in the btree and type == 3 may point to
176
* offset is the starting byte offset for this key in the stream.
178
* btrfs_disk_key is in disk byte order. struct btrfs_key is always
179
* in cpu native order. Otherwise they are identical and their sizes
180
* should be the same (ie both packed)
182
struct btrfs_disk_key {
186
} __attribute__ ((__packed__));
192
} __attribute__ ((__packed__));
194
struct btrfs_mapping_tree {
195
struct extent_map_tree map_tree;
198
struct btrfs_dev_item {
199
/* the internal btrfs device id */
202
/* size of the device */
208
/* optimal io alignment for this device */
211
/* optimal io width for this device */
214
/* minimal io size for this device */
217
/* type and info about this device */
220
/* expected generation for this device */
224
* starting byte of this partition on the device,
225
* to allow for stripe alignment in the future
229
/* grouping information for allocation decisions */
232
/* seek speed 0-100 where 100 is fastest */
235
/* bandwidth 0-100 where 100 is fastest */
238
/* btrfs generated uuid for this device */
239
u8 uuid[BTRFS_UUID_SIZE];
241
/* uuid of FS who owns this device */
242
u8 fsid[BTRFS_UUID_SIZE];
243
} __attribute__ ((__packed__));
245
struct btrfs_stripe {
248
u8 dev_uuid[BTRFS_UUID_SIZE];
249
} __attribute__ ((__packed__));
252
/* size of this chunk in bytes */
255
/* objectid of the root referencing this chunk */
261
/* optimal io alignment for this chunk */
264
/* optimal io width for this chunk */
267
/* minimal io size for this chunk */
270
/* 2^16 stripes is quite a lot, a second limit is the size of a single
275
/* sub stripes only matter for raid10 */
277
struct btrfs_stripe stripe;
278
/* additional stripes go here */
279
} __attribute__ ((__packed__));
281
#define BTRFS_FREE_SPACE_EXTENT 1
282
#define BTRFS_FREE_SPACE_BITMAP 2
284
struct btrfs_free_space_entry {
288
} __attribute__ ((__packed__));
290
struct btrfs_free_space_header {
291
struct btrfs_disk_key location;
295
} __attribute__ ((__packed__));
297
static inline unsigned long btrfs_chunk_item_size(int num_stripes)
299
BUG_ON(num_stripes == 0);
300
return sizeof(struct btrfs_chunk) +
301
sizeof(struct btrfs_stripe) * (num_stripes - 1);
304
#define BTRFS_HEADER_FLAG_WRITTEN (1ULL << 0)
305
#define BTRFS_HEADER_FLAG_RELOC (1ULL << 1)
311
/* Errors detected */
312
#define BTRFS_SUPER_FLAG_ERROR (1ULL << 2)
314
#define BTRFS_SUPER_FLAG_SEEDING (1ULL << 32)
315
#define BTRFS_SUPER_FLAG_METADUMP (1ULL << 33)
317
#define BTRFS_BACKREF_REV_MAX 256
318
#define BTRFS_BACKREF_REV_SHIFT 56
319
#define BTRFS_BACKREF_REV_MASK (((u64)BTRFS_BACKREF_REV_MAX - 1) << \
320
BTRFS_BACKREF_REV_SHIFT)
322
#define BTRFS_OLD_BACKREF_REV 0
323
#define BTRFS_MIXED_BACKREF_REV 1
326
* every tree block (leaf or node) starts with this header.
328
struct btrfs_header {
329
/* these first four must match the super block */
330
u8 csum[BTRFS_CSUM_SIZE];
331
u8 fsid[BTRFS_FSID_SIZE]; /* FS specific uuid */
332
__le64 bytenr; /* which block this node is supposed to live in */
335
/* allowed to be different from the super from here on down */
336
u8 chunk_tree_uuid[BTRFS_UUID_SIZE];
341
} __attribute__ ((__packed__));
343
#define BTRFS_NODEPTRS_PER_BLOCK(r) (((r)->nodesize - \
344
sizeof(struct btrfs_header)) / \
345
sizeof(struct btrfs_key_ptr))
346
#define __BTRFS_LEAF_DATA_SIZE(bs) ((bs) - sizeof(struct btrfs_header))
347
#define BTRFS_LEAF_DATA_SIZE(r) (__BTRFS_LEAF_DATA_SIZE(r->leafsize))
348
#define BTRFS_MAX_INLINE_DATA_SIZE(r) (BTRFS_LEAF_DATA_SIZE(r) - \
349
sizeof(struct btrfs_item) - \
350
sizeof(struct btrfs_file_extent_item))
351
#define BTRFS_MAX_XATTR_SIZE(r) (BTRFS_LEAF_DATA_SIZE(r) - \
352
sizeof(struct btrfs_item) -\
353
sizeof(struct btrfs_dir_item))
357
* this is a very generous portion of the super block, giving us
358
* room to translate 14 chunks with 3 stripes each.
360
#define BTRFS_SYSTEM_CHUNK_ARRAY_SIZE 2048
361
#define BTRFS_LABEL_SIZE 256
364
* just in case we somehow lose the roots and are not able to mount,
365
* we store an array of the roots from previous transactions
368
#define BTRFS_NUM_BACKUP_ROOTS 4
369
struct btrfs_root_backup {
371
__le64 tree_root_gen;
374
__le64 chunk_root_gen;
377
__le64 extent_root_gen;
386
__le64 csum_root_gen;
396
u8 extent_root_level;
400
/* future and to align */
402
} __attribute__ ((__packed__));
405
* the super block basically lists the main trees of the FS
406
* it currently lacks any block count etc etc
408
struct btrfs_super_block {
409
u8 csum[BTRFS_CSUM_SIZE];
410
/* the first 4 fields must match struct btrfs_header */
411
u8 fsid[BTRFS_FSID_SIZE]; /* FS specific uuid */
412
__le64 bytenr; /* this block number */
415
/* allowed to be different from the btrfs_header from here own down */
422
/* this will help find the new super based on the log root */
423
__le64 log_root_transid;
426
__le64 root_dir_objectid;
432
__le32 sys_chunk_array_size;
433
__le64 chunk_root_generation;
435
__le64 compat_ro_flags;
436
__le64 incompat_flags;
441
struct btrfs_dev_item dev_item;
443
char label[BTRFS_LABEL_SIZE];
445
__le64 cache_generation;
447
/* future expansion */
449
u8 sys_chunk_array[BTRFS_SYSTEM_CHUNK_ARRAY_SIZE];
450
struct btrfs_root_backup super_roots[BTRFS_NUM_BACKUP_ROOTS];
451
} __attribute__ ((__packed__));
454
* Compat flags that we support. If any incompat flags are set other than the
455
* ones specified below then we will fail to mount
457
#define BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF (1ULL << 0)
458
#define BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL (1ULL << 1)
459
#define BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS (1ULL << 2)
460
#define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO (1ULL << 3)
462
#define BTRFS_FEATURE_COMPAT_SUPP 0ULL
463
#define BTRFS_FEATURE_COMPAT_RO_SUPP 0ULL
464
#define BTRFS_FEATURE_INCOMPAT_SUPP \
465
(BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF | \
466
BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL | \
467
BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS | \
468
BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO)
471
* A leaf is full of items. offset and size tell us where to find
472
* the item in the leaf (relative to the start of the data area)
475
struct btrfs_disk_key key;
478
} __attribute__ ((__packed__));
481
* leaves have an item area and a data area:
482
* [item0, item1....itemN] [free space] [dataN...data1, data0]
484
* The data is separate from the items to get the keys closer together
488
struct btrfs_header header;
489
struct btrfs_item items[];
490
} __attribute__ ((__packed__));
493
* all non-leaf blocks are nodes, they hold only keys and pointers to
496
struct btrfs_key_ptr {
497
struct btrfs_disk_key key;
500
} __attribute__ ((__packed__));
503
struct btrfs_header header;
504
struct btrfs_key_ptr ptrs[];
505
} __attribute__ ((__packed__));
508
* btrfs_paths remember the path taken from the root down to the leaf.
509
* level 0 is always the leaf, and nodes[1...BTRFS_MAX_LEVEL] will point
510
* to any other levels that are present.
512
* The slots array records the index of the item or block pointer
513
* used while walking the tree.
516
struct extent_buffer *nodes[BTRFS_MAX_LEVEL];
517
int slots[BTRFS_MAX_LEVEL];
518
/* if there is real range locking, this locks field will change */
519
int locks[BTRFS_MAX_LEVEL];
521
/* keep some upper locks as we walk down */
525
* set by btrfs_split_item, tells search_slot to keep all locks
526
* and to force calls to keep space in the nodes
528
unsigned int search_for_split:1;
529
unsigned int keep_locks:1;
530
unsigned int skip_locking:1;
531
unsigned int leave_spinning:1;
532
unsigned int search_commit_root:1;
536
* items in the extent btree are used to record the objectid of the
537
* owner of the block and the number of references
540
struct btrfs_extent_item {
544
} __attribute__ ((__packed__));
546
struct btrfs_extent_item_v0 {
548
} __attribute__ ((__packed__));
550
#define BTRFS_MAX_EXTENT_ITEM_SIZE(r) ((BTRFS_LEAF_DATA_SIZE(r) >> 4) - \
551
sizeof(struct btrfs_item))
553
#define BTRFS_EXTENT_FLAG_DATA (1ULL << 0)
554
#define BTRFS_EXTENT_FLAG_TREE_BLOCK (1ULL << 1)
556
/* following flags only apply to tree blocks */
558
/* use full backrefs for extent pointers in the block */
559
#define BTRFS_BLOCK_FLAG_FULL_BACKREF (1ULL << 8)
562
* this flag is only used internally by scrub and may be changed at any time
563
* it is only declared here to avoid collisions
565
#define BTRFS_EXTENT_FLAG_SUPER (1ULL << 48)
567
struct btrfs_tree_block_info {
568
struct btrfs_disk_key key;
570
} __attribute__ ((__packed__));
572
struct btrfs_extent_data_ref {
577
} __attribute__ ((__packed__));
579
struct btrfs_shared_data_ref {
581
} __attribute__ ((__packed__));
583
struct btrfs_extent_inline_ref {
586
} __attribute__ ((__packed__));
588
/* old style backrefs item */
589
struct btrfs_extent_ref_v0 {
594
} __attribute__ ((__packed__));
597
/* dev extents record free space on individual devices. The owner
598
* field points back to the chunk allocation mapping tree that allocated
599
* the extent. The chunk tree uuid field is a way to double check the owner
601
struct btrfs_dev_extent {
603
__le64 chunk_objectid;
606
u8 chunk_tree_uuid[BTRFS_UUID_SIZE];
607
} __attribute__ ((__packed__));
609
struct btrfs_inode_ref {
613
} __attribute__ ((__packed__));
615
struct btrfs_timespec {
618
} __attribute__ ((__packed__));
620
enum btrfs_compression_type {
621
BTRFS_COMPRESS_NONE = 0,
622
BTRFS_COMPRESS_ZLIB = 1,
623
BTRFS_COMPRESS_LZO = 2,
624
BTRFS_COMPRESS_TYPES = 2,
625
BTRFS_COMPRESS_LAST = 3,
628
struct btrfs_inode_item {
629
/* nfs style generation number */
631
/* transid that last touched this inode */
643
/* modification sequence number for NFS */
647
* a little future expansion, for more than this we can
648
* just grow the inode item and version it
651
struct btrfs_timespec atime;
652
struct btrfs_timespec ctime;
653
struct btrfs_timespec mtime;
654
struct btrfs_timespec otime;
655
} __attribute__ ((__packed__));
657
struct btrfs_dir_log_item {
659
} __attribute__ ((__packed__));
661
struct btrfs_dir_item {
662
struct btrfs_disk_key location;
667
} __attribute__ ((__packed__));
669
#define BTRFS_ROOT_SUBVOL_RDONLY (1ULL << 0)
671
struct btrfs_root_item {
672
struct btrfs_inode_item inode;
678
__le64 last_snapshot;
681
struct btrfs_disk_key drop_progress;
684
} __attribute__ ((__packed__));
687
* this is used for both forward and backward root refs
689
struct btrfs_root_ref {
693
} __attribute__ ((__packed__));
695
#define BTRFS_FILE_EXTENT_INLINE 0
696
#define BTRFS_FILE_EXTENT_REG 1
697
#define BTRFS_FILE_EXTENT_PREALLOC 2
699
struct btrfs_file_extent_item {
701
* transaction id that created this extent
705
* max number of bytes to hold this extent in ram
706
* when we split a compressed extent we can't know how big
707
* each of the resulting pieces will be. So, this is
708
* an upper limit on the size of the extent in ram instead of
714
* 32 bits for the various ways we might encode the data,
715
* including compression and encryption. If any of these
716
* are set to something a given disk format doesn't understand
717
* it is treated like an incompat flag for reading and writing,
722
__le16 other_encoding; /* spare for later use */
724
/* are we inline data or a real extent? */
728
* disk space consumed by the extent, checksum blocks are included
732
__le64 disk_num_bytes;
734
* the logical offset in file blocks (no csums)
735
* this extent record is for. This allows a file extent to point
736
* into the middle of an existing extent on disk, sharing it
737
* between two snapshots (useful if some bytes in the middle of the
738
* extent have changed
742
* the logical number of file blocks (no csums included). This
743
* always reflects the size uncompressed and without encoding.
747
} __attribute__ ((__packed__));
749
struct btrfs_csum_item {
751
} __attribute__ ((__packed__));
753
/* different types of block groups (and chunks) */
754
#define BTRFS_BLOCK_GROUP_DATA (1 << 0)
755
#define BTRFS_BLOCK_GROUP_SYSTEM (1 << 1)
756
#define BTRFS_BLOCK_GROUP_METADATA (1 << 2)
757
#define BTRFS_BLOCK_GROUP_RAID0 (1 << 3)
758
#define BTRFS_BLOCK_GROUP_RAID1 (1 << 4)
759
#define BTRFS_BLOCK_GROUP_DUP (1 << 5)
760
#define BTRFS_BLOCK_GROUP_RAID10 (1 << 6)
761
#define BTRFS_NR_RAID_TYPES 5
763
struct btrfs_block_group_item {
765
__le64 chunk_objectid;
767
} __attribute__ ((__packed__));
769
struct btrfs_space_info {
772
u64 total_bytes; /* total bytes in the space,
773
this doesn't take mirrors into account */
774
u64 bytes_used; /* total bytes used,
775
this doesn't take mirrors into account */
776
u64 bytes_pinned; /* total bytes pinned, will be freed when the
777
transaction finishes */
778
u64 bytes_reserved; /* total bytes the allocator has reserved for
779
current allocations */
780
u64 bytes_readonly; /* total bytes that are read only */
782
u64 bytes_may_use; /* number of bytes that may be used for
783
delalloc/allocations */
784
u64 disk_used; /* total bytes used on disk */
785
u64 disk_total; /* total bytes on disk, takes mirrors into
789
* we bump reservation progress every time we decrement
790
* bytes_reserved. This way people waiting for reservations
791
* know something good has happened and they can check
792
* for progress. The number here isn't to be trusted, it
793
* just shows reclaim activity
795
unsigned long reservation_progress;
797
unsigned int full:1; /* indicates that we cannot allocate any more
798
chunks for this space */
799
unsigned int chunk_alloc:1; /* set if we are allocating a chunk */
801
unsigned int flush:1; /* set if we are trying to make space */
803
unsigned int force_alloc; /* set if we need to force a chunk
804
alloc for this space */
806
struct list_head list;
808
/* for block groups in our same type */
809
struct list_head block_groups[BTRFS_NR_RAID_TYPES];
811
struct rw_semaphore groups_sem;
812
wait_queue_head_t wait;
815
struct btrfs_block_rsv {
818
struct btrfs_space_info *space_info;
824
* free clusters are used to claim free space in relatively large chunks,
825
* allowing us to do less seeky writes. They are used for all metadata
826
* allocations and data allocations in ssd mode.
828
struct btrfs_free_cluster {
830
spinlock_t refill_lock;
833
/* largest extent in this cluster */
836
/* first extent starting offset */
839
struct btrfs_block_group_cache *block_group;
841
* when a cluster is allocated from a block group, we put the
842
* cluster onto a list in the block group so that it can
843
* be freed before the block group is freed.
845
struct list_head block_group_list;
848
enum btrfs_caching_type {
850
BTRFS_CACHE_STARTED = 1,
851
BTRFS_CACHE_FAST = 2,
852
BTRFS_CACHE_FINISHED = 3,
855
enum btrfs_disk_cache_state {
856
BTRFS_DC_WRITTEN = 0,
860
BTRFS_DC_NEED_WRITE = 4,
863
struct btrfs_caching_control {
864
struct list_head list;
866
wait_queue_head_t wait;
867
struct btrfs_work work;
868
struct btrfs_block_group_cache *block_group;
873
struct btrfs_block_group_cache {
874
struct btrfs_key key;
875
struct btrfs_block_group_item item;
876
struct btrfs_fs_info *fs_info;
884
u64 cache_generation;
886
unsigned int dirty:1;
889
int disk_cache_state;
891
/* cache tracking stuff */
893
struct btrfs_caching_control *caching_ctl;
894
u64 last_byte_to_unpin;
896
struct btrfs_space_info *space_info;
898
/* free space cache stuff */
899
struct btrfs_free_space_ctl *free_space_ctl;
901
/* block group cache stuff */
902
struct rb_node cache_node;
904
/* for block groups in the same raid type */
905
struct list_head list;
910
/* List of struct btrfs_free_clusters for this block group.
911
* Today it will only have one thing on it, but that may change
913
struct list_head cluster_list;
916
struct reloc_control;
918
struct btrfs_fs_devices;
919
struct btrfs_delayed_root;
920
struct btrfs_fs_info {
921
u8 fsid[BTRFS_FSID_SIZE];
922
u8 chunk_tree_uuid[BTRFS_UUID_SIZE];
923
struct btrfs_root *extent_root;
924
struct btrfs_root *tree_root;
925
struct btrfs_root *chunk_root;
926
struct btrfs_root *dev_root;
927
struct btrfs_root *fs_root;
928
struct btrfs_root *csum_root;
930
/* the log root tree is a directory of all the other log roots */
931
struct btrfs_root *log_root_tree;
933
spinlock_t fs_roots_radix_lock;
934
struct radix_tree_root fs_roots_radix;
936
/* block group cache stuff */
937
spinlock_t block_group_cache_lock;
938
struct rb_root block_group_cache_tree;
940
/* keep track of unallocated space */
941
spinlock_t free_chunk_lock;
942
u64 free_chunk_space;
944
struct extent_io_tree freed_extents[2];
945
struct extent_io_tree *pinned_extents;
947
/* logical->physical extent mapping */
948
struct btrfs_mapping_tree mapping_tree;
951
* block reservation for extent, checksum, root tree and
952
* delayed dir index item
954
struct btrfs_block_rsv global_block_rsv;
955
/* block reservation for delay allocation */
956
struct btrfs_block_rsv delalloc_block_rsv;
957
/* block reservation for metadata operations */
958
struct btrfs_block_rsv trans_block_rsv;
959
/* block reservation for chunk tree */
960
struct btrfs_block_rsv chunk_block_rsv;
961
/* block reservation for delayed operations */
962
struct btrfs_block_rsv delayed_block_rsv;
964
struct btrfs_block_rsv empty_block_rsv;
967
u64 last_trans_committed;
970
* this is updated to the current trans every time a full commit
971
* is required instead of the faster short fsync log commits
973
u64 last_trans_log_full_commit;
974
unsigned long mount_opt:20;
975
unsigned long compress_type:4;
978
struct btrfs_transaction *running_transaction;
979
wait_queue_head_t transaction_throttle;
980
wait_queue_head_t transaction_wait;
981
wait_queue_head_t transaction_blocked_wait;
982
wait_queue_head_t async_submit_wait;
984
struct btrfs_super_block *super_copy;
985
struct btrfs_super_block *super_for_commit;
986
struct block_device *__bdev;
987
struct super_block *sb;
988
struct inode *btree_inode;
989
struct backing_dev_info bdi;
990
struct mutex tree_log_mutex;
991
struct mutex transaction_kthread_mutex;
992
struct mutex cleaner_mutex;
993
struct mutex chunk_mutex;
994
struct mutex volume_mutex;
996
* this protects the ordered operations list only while we are
997
* processing all of the entries on it. This way we make
998
* sure the commit code doesn't find the list temporarily empty
999
* because another function happens to be doing non-waiting preflush
1000
* before jumping into the main commit.
1002
struct mutex ordered_operations_mutex;
1003
struct rw_semaphore extent_commit_sem;
1005
struct rw_semaphore cleanup_work_sem;
1007
struct rw_semaphore subvol_sem;
1008
struct srcu_struct subvol_srcu;
1010
spinlock_t trans_lock;
1012
* the reloc mutex goes with the trans lock, it is taken
1013
* during commit to protect us from the relocation code
1015
struct mutex reloc_mutex;
1017
struct list_head trans_list;
1018
struct list_head hashers;
1019
struct list_head dead_roots;
1020
struct list_head caching_block_groups;
1022
spinlock_t delayed_iput_lock;
1023
struct list_head delayed_iputs;
1025
atomic_t nr_async_submits;
1026
atomic_t async_submit_draining;
1027
atomic_t nr_async_bios;
1028
atomic_t async_delalloc_pages;
1029
atomic_t open_ioctl_trans;
1032
* this is used by the balancing code to wait for all the pending
1035
spinlock_t ordered_extent_lock;
1038
* all of the data=ordered extents pending writeback
1039
* these can span multiple transactions and basically include
1040
* every dirty data page that isn't from nodatacow
1042
struct list_head ordered_extents;
1045
* all of the inodes that have delalloc bytes. It is possible for
1046
* this list to be empty even when there is still dirty data=ordered
1047
* extents waiting to finish IO.
1049
struct list_head delalloc_inodes;
1052
* special rename and truncate targets that must be on disk before
1053
* we're allowed to commit. This is basically the ext3 style
1054
* data=ordered list.
1056
struct list_head ordered_operations;
1059
* there is a pool of worker threads for checksumming during writes
1060
* and a pool for checksumming after reads. This is because readers
1061
* can run with FS locks held, and the writers may be waiting for
1062
* those locks. We don't want ordering in the pending list to cause
1063
* deadlocks, and so the two are serviced separately.
1065
* A third pool does submit_bio to avoid deadlocking with the other
1068
struct btrfs_workers generic_worker;
1069
struct btrfs_workers workers;
1070
struct btrfs_workers delalloc_workers;
1071
struct btrfs_workers endio_workers;
1072
struct btrfs_workers endio_meta_workers;
1073
struct btrfs_workers endio_meta_write_workers;
1074
struct btrfs_workers endio_write_workers;
1075
struct btrfs_workers endio_freespace_worker;
1076
struct btrfs_workers submit_workers;
1077
struct btrfs_workers caching_workers;
1078
struct btrfs_workers readahead_workers;
1081
* fixup workers take dirty pages that didn't properly go through
1082
* the cow mechanism and make them safe to write. It happens
1083
* for the sys_munmap function call path
1085
struct btrfs_workers fixup_workers;
1086
struct btrfs_workers delayed_workers;
1087
struct task_struct *transaction_kthread;
1088
struct task_struct *cleaner_kthread;
1089
int thread_pool_size;
1091
struct kobject super_kobj;
1092
struct completion kobj_unregister;
1095
int log_root_recovering;
1101
/* protected by the delalloc lock, used to keep from writing
1102
* metadata until there is a nice batch
1104
u64 dirty_metadata_bytes;
1105
struct list_head dirty_cowonly_roots;
1107
struct btrfs_fs_devices *fs_devices;
1110
* the space_info list is almost entirely read only. It only changes
1111
* when we add a new raid type to the FS, and that happens
1112
* very rarely. RCU is used to protect it.
1114
struct list_head space_info;
1116
struct reloc_control *reloc_ctl;
1118
spinlock_t delalloc_lock;
1121
/* data_alloc_cluster is only used in ssd mode */
1122
struct btrfs_free_cluster data_alloc_cluster;
1124
/* all metadata allocations go through this cluster */
1125
struct btrfs_free_cluster meta_alloc_cluster;
1127
/* auto defrag inodes go here */
1128
spinlock_t defrag_inodes_lock;
1129
struct rb_root defrag_inodes;
1130
atomic_t defrag_running;
1132
spinlock_t ref_cache_lock;
1133
u64 total_ref_cache_size;
1135
u64 avail_data_alloc_bits;
1136
u64 avail_metadata_alloc_bits;
1137
u64 avail_system_alloc_bits;
1138
u64 data_alloc_profile;
1139
u64 metadata_alloc_profile;
1140
u64 system_alloc_profile;
1142
unsigned data_chunk_allocations;
1143
unsigned metadata_ratio;
1147
/* private scrub information */
1148
struct mutex scrub_lock;
1149
atomic_t scrubs_running;
1150
atomic_t scrub_pause_req;
1151
atomic_t scrubs_paused;
1152
atomic_t scrub_cancel_req;
1153
wait_queue_head_t scrub_pause_wait;
1154
struct rw_semaphore scrub_super_lock;
1155
int scrub_workers_refcnt;
1156
struct btrfs_workers scrub_workers;
1158
/* filesystem state */
1161
struct btrfs_delayed_root *delayed_root;
1163
/* readahead tree */
1164
spinlock_t reada_lock;
1165
struct radix_tree_root reada_tree;
1167
/* next backup root to be overwritten */
1168
int backup_root_index;
1172
* in ram representation of the tree. extent_root is used for all allocations
1173
* and for the extent tree extent_root root.
1176
struct extent_buffer *node;
1178
struct extent_buffer *commit_root;
1179
struct btrfs_root *log_root;
1180
struct btrfs_root *reloc_root;
1182
struct btrfs_root_item root_item;
1183
struct btrfs_key root_key;
1184
struct btrfs_fs_info *fs_info;
1185
struct extent_io_tree dirty_log_pages;
1187
struct kobject root_kobj;
1188
struct completion kobj_unregister;
1189
struct mutex objectid_mutex;
1191
spinlock_t accounting_lock;
1192
struct btrfs_block_rsv *block_rsv;
1194
/* free ino cache stuff */
1195
struct mutex fs_commit_mutex;
1196
struct btrfs_free_space_ctl *free_ino_ctl;
1197
enum btrfs_caching_type cached;
1198
spinlock_t cache_lock;
1199
wait_queue_head_t cache_wait;
1200
struct btrfs_free_space_ctl *free_ino_pinned;
1202
struct inode *cache_inode;
1204
struct mutex log_mutex;
1205
wait_queue_head_t log_writer_wait;
1206
wait_queue_head_t log_commit_wait[2];
1207
atomic_t log_writers;
1208
atomic_t log_commit[2];
1209
unsigned long log_transid;
1210
unsigned long last_log_commit;
1211
unsigned long log_batch;
1212
pid_t log_start_pid;
1213
bool log_multiple_pids;
1218
/* data allocations are done in sectorsize units */
1221
/* node allocations are done in nodesize units */
1224
/* leaf allocations are done in leafsize units */
1231
u64 highest_objectid;
1233
/* btrfs_record_root_in_trans is a multi-step process,
1234
* and it can race with the balancing code. But the
1235
* race is very small, and only the first time the root
1236
* is added to each transaction. So in_trans_setup
1237
* is used to tell us when more checks are required
1239
unsigned long in_trans_setup;
1244
u64 defrag_trans_start;
1245
struct btrfs_key defrag_progress;
1246
struct btrfs_key defrag_max;
1250
/* the dirty list is only used by non-reference counted roots */
1251
struct list_head dirty_list;
1253
struct list_head root_list;
1255
spinlock_t orphan_lock;
1256
struct list_head orphan_list;
1257
struct btrfs_block_rsv *orphan_block_rsv;
1258
int orphan_item_inserted;
1259
int orphan_cleanup_state;
1261
spinlock_t inode_lock;
1262
/* red-black tree that keeps track of in-memory inodes */
1263
struct rb_root inode_tree;
1266
* radix tree that keeps track of delayed nodes of every inode,
1267
* protected by inode_lock
1269
struct radix_tree_root delayed_nodes_tree;
1271
* right now this just gets used so that a root has its own devid
1272
* for stat. It may be used for more later
1279
struct btrfs_ioctl_defrag_range_args {
1280
/* start of the defrag operation */
1283
/* number of bytes to defrag, use (u64)-1 to say all */
1287
* flags for the operation, which can include turning
1288
* on compression for this one defrag
1293
* any extent bigger than this will be considered
1294
* already defragged. Use 0 to take the kernel default
1295
* Use 1 to say every single extent must be rewritten
1297
__u32 extent_thresh;
1300
* which compression method to use if turning on compression
1301
* for this defrag operation. If unspecified, zlib will
1304
__u32 compress_type;
1306
/* spare for later */
1312
* inode items have the data typically returned from stat and store other
1313
* info about object characteristics. There is one for every file and dir in
1316
#define BTRFS_INODE_ITEM_KEY 1
1317
#define BTRFS_INODE_REF_KEY 12
1318
#define BTRFS_XATTR_ITEM_KEY 24
1319
#define BTRFS_ORPHAN_ITEM_KEY 48
1320
/* reserve 2-15 close to the inode for later flexibility */
1323
* dir items are the name -> inode pointers in a directory. There is one
1324
* for every name in a directory.
1326
#define BTRFS_DIR_LOG_ITEM_KEY 60
1327
#define BTRFS_DIR_LOG_INDEX_KEY 72
1328
#define BTRFS_DIR_ITEM_KEY 84
1329
#define BTRFS_DIR_INDEX_KEY 96
1331
* extent data is for file data
1333
#define BTRFS_EXTENT_DATA_KEY 108
1336
* extent csums are stored in a separate tree and hold csums for
1337
* an entire extent on disk.
1339
#define BTRFS_EXTENT_CSUM_KEY 128
1342
* root items point to tree roots. They are typically in the root
1343
* tree used by the super block to find all the other trees
1345
#define BTRFS_ROOT_ITEM_KEY 132
1348
* root backrefs tie subvols and snapshots to the directory entries that
1351
#define BTRFS_ROOT_BACKREF_KEY 144
1354
* root refs make a fast index for listing all of the snapshots and
1355
* subvolumes referenced by a given root. They point directly to the
1356
* directory item in the root that references the subvol
1358
#define BTRFS_ROOT_REF_KEY 156
1361
* extent items are in the extent map tree. These record which blocks
1362
* are used, and how many references there are to each block
1364
#define BTRFS_EXTENT_ITEM_KEY 168
1366
#define BTRFS_TREE_BLOCK_REF_KEY 176
1368
#define BTRFS_EXTENT_DATA_REF_KEY 178
1370
#define BTRFS_EXTENT_REF_V0_KEY 180
1372
#define BTRFS_SHARED_BLOCK_REF_KEY 182
1374
#define BTRFS_SHARED_DATA_REF_KEY 184
1377
* block groups give us hints into the extent allocation trees. Which
1378
* blocks are free etc etc
1380
#define BTRFS_BLOCK_GROUP_ITEM_KEY 192
1382
#define BTRFS_DEV_EXTENT_KEY 204
1383
#define BTRFS_DEV_ITEM_KEY 216
1384
#define BTRFS_CHUNK_ITEM_KEY 228
1387
* string items are for debugging. They just store a short string of
1390
#define BTRFS_STRING_ITEM_KEY 253
1393
* Flags for mount options.
1395
* Note: don't forget to add new options to btrfs_show_options()
1397
#define BTRFS_MOUNT_NODATASUM (1 << 0)
1398
#define BTRFS_MOUNT_NODATACOW (1 << 1)
1399
#define BTRFS_MOUNT_NOBARRIER (1 << 2)
1400
#define BTRFS_MOUNT_SSD (1 << 3)
1401
#define BTRFS_MOUNT_DEGRADED (1 << 4)
1402
#define BTRFS_MOUNT_COMPRESS (1 << 5)
1403
#define BTRFS_MOUNT_NOTREELOG (1 << 6)
1404
#define BTRFS_MOUNT_FLUSHONCOMMIT (1 << 7)
1405
#define BTRFS_MOUNT_SSD_SPREAD (1 << 8)
1406
#define BTRFS_MOUNT_NOSSD (1 << 9)
1407
#define BTRFS_MOUNT_DISCARD (1 << 10)
1408
#define BTRFS_MOUNT_FORCE_COMPRESS (1 << 11)
1409
#define BTRFS_MOUNT_SPACE_CACHE (1 << 12)
1410
#define BTRFS_MOUNT_CLEAR_CACHE (1 << 13)
1411
#define BTRFS_MOUNT_USER_SUBVOL_RM_ALLOWED (1 << 14)
1412
#define BTRFS_MOUNT_ENOSPC_DEBUG (1 << 15)
1413
#define BTRFS_MOUNT_AUTO_DEFRAG (1 << 16)
1414
#define BTRFS_MOUNT_INODE_MAP_CACHE (1 << 17)
1415
#define BTRFS_MOUNT_RECOVERY (1 << 18)
1417
#define btrfs_clear_opt(o, opt) ((o) &= ~BTRFS_MOUNT_##opt)
1418
#define btrfs_set_opt(o, opt) ((o) |= BTRFS_MOUNT_##opt)
1419
#define btrfs_test_opt(root, opt) ((root)->fs_info->mount_opt & \
1424
#define BTRFS_INODE_NODATASUM (1 << 0)
1425
#define BTRFS_INODE_NODATACOW (1 << 1)
1426
#define BTRFS_INODE_READONLY (1 << 2)
1427
#define BTRFS_INODE_NOCOMPRESS (1 << 3)
1428
#define BTRFS_INODE_PREALLOC (1 << 4)
1429
#define BTRFS_INODE_SYNC (1 << 5)
1430
#define BTRFS_INODE_IMMUTABLE (1 << 6)
1431
#define BTRFS_INODE_APPEND (1 << 7)
1432
#define BTRFS_INODE_NODUMP (1 << 8)
1433
#define BTRFS_INODE_NOATIME (1 << 9)
1434
#define BTRFS_INODE_DIRSYNC (1 << 10)
1435
#define BTRFS_INODE_COMPRESS (1 << 11)
1437
#define BTRFS_INODE_ROOT_ITEM_INIT (1 << 31)
1439
/* some macros to generate set/get funcs for the struct fields. This
1440
* assumes there is a lefoo_to_cpu for every type, so lets make a simple
1443
#define le8_to_cpu(v) (v)
1444
#define cpu_to_le8(v) (v)
1447
#define read_eb_member(eb, ptr, type, member, result) ( \
1448
read_extent_buffer(eb, (char *)(result), \
1449
((unsigned long)(ptr)) + \
1450
offsetof(type, member), \
1451
sizeof(((type *)0)->member)))
1453
#define write_eb_member(eb, ptr, type, member, result) ( \
1454
write_extent_buffer(eb, (char *)(result), \
1455
((unsigned long)(ptr)) + \
1456
offsetof(type, member), \
1457
sizeof(((type *)0)->member)))
1459
#ifndef BTRFS_SETGET_FUNCS
1460
#define BTRFS_SETGET_FUNCS(name, type, member, bits) \
1461
u##bits btrfs_##name(struct extent_buffer *eb, type *s); \
1462
void btrfs_set_##name(struct extent_buffer *eb, type *s, u##bits val);
1465
#define BTRFS_SETGET_HEADER_FUNCS(name, type, member, bits) \
1466
static inline u##bits btrfs_##name(struct extent_buffer *eb) \
1468
type *p = page_address(eb->first_page); \
1469
u##bits res = le##bits##_to_cpu(p->member); \
1472
static inline void btrfs_set_##name(struct extent_buffer *eb, \
1475
type *p = page_address(eb->first_page); \
1476
p->member = cpu_to_le##bits(val); \
1479
#define BTRFS_SETGET_STACK_FUNCS(name, type, member, bits) \
1480
static inline u##bits btrfs_##name(type *s) \
1482
return le##bits##_to_cpu(s->member); \
1484
static inline void btrfs_set_##name(type *s, u##bits val) \
1486
s->member = cpu_to_le##bits(val); \
1489
BTRFS_SETGET_FUNCS(device_type, struct btrfs_dev_item, type, 64);
1490
BTRFS_SETGET_FUNCS(device_total_bytes, struct btrfs_dev_item, total_bytes, 64);
1491
BTRFS_SETGET_FUNCS(device_bytes_used, struct btrfs_dev_item, bytes_used, 64);
1492
BTRFS_SETGET_FUNCS(device_io_align, struct btrfs_dev_item, io_align, 32);
1493
BTRFS_SETGET_FUNCS(device_io_width, struct btrfs_dev_item, io_width, 32);
1494
BTRFS_SETGET_FUNCS(device_start_offset, struct btrfs_dev_item,
1496
BTRFS_SETGET_FUNCS(device_sector_size, struct btrfs_dev_item, sector_size, 32);
1497
BTRFS_SETGET_FUNCS(device_id, struct btrfs_dev_item, devid, 64);
1498
BTRFS_SETGET_FUNCS(device_group, struct btrfs_dev_item, dev_group, 32);
1499
BTRFS_SETGET_FUNCS(device_seek_speed, struct btrfs_dev_item, seek_speed, 8);
1500
BTRFS_SETGET_FUNCS(device_bandwidth, struct btrfs_dev_item, bandwidth, 8);
1501
BTRFS_SETGET_FUNCS(device_generation, struct btrfs_dev_item, generation, 64);
1503
BTRFS_SETGET_STACK_FUNCS(stack_device_type, struct btrfs_dev_item, type, 64);
1504
BTRFS_SETGET_STACK_FUNCS(stack_device_total_bytes, struct btrfs_dev_item,
1506
BTRFS_SETGET_STACK_FUNCS(stack_device_bytes_used, struct btrfs_dev_item,
1508
BTRFS_SETGET_STACK_FUNCS(stack_device_io_align, struct btrfs_dev_item,
1510
BTRFS_SETGET_STACK_FUNCS(stack_device_io_width, struct btrfs_dev_item,
1512
BTRFS_SETGET_STACK_FUNCS(stack_device_sector_size, struct btrfs_dev_item,
1514
BTRFS_SETGET_STACK_FUNCS(stack_device_id, struct btrfs_dev_item, devid, 64);
1515
BTRFS_SETGET_STACK_FUNCS(stack_device_group, struct btrfs_dev_item,
1517
BTRFS_SETGET_STACK_FUNCS(stack_device_seek_speed, struct btrfs_dev_item,
1519
BTRFS_SETGET_STACK_FUNCS(stack_device_bandwidth, struct btrfs_dev_item,
1521
BTRFS_SETGET_STACK_FUNCS(stack_device_generation, struct btrfs_dev_item,
1524
static inline char *btrfs_device_uuid(struct btrfs_dev_item *d)
1526
return (char *)d + offsetof(struct btrfs_dev_item, uuid);
1529
static inline char *btrfs_device_fsid(struct btrfs_dev_item *d)
1531
return (char *)d + offsetof(struct btrfs_dev_item, fsid);
1534
BTRFS_SETGET_FUNCS(chunk_length, struct btrfs_chunk, length, 64);
1535
BTRFS_SETGET_FUNCS(chunk_owner, struct btrfs_chunk, owner, 64);
1536
BTRFS_SETGET_FUNCS(chunk_stripe_len, struct btrfs_chunk, stripe_len, 64);
1537
BTRFS_SETGET_FUNCS(chunk_io_align, struct btrfs_chunk, io_align, 32);
1538
BTRFS_SETGET_FUNCS(chunk_io_width, struct btrfs_chunk, io_width, 32);
1539
BTRFS_SETGET_FUNCS(chunk_sector_size, struct btrfs_chunk, sector_size, 32);
1540
BTRFS_SETGET_FUNCS(chunk_type, struct btrfs_chunk, type, 64);
1541
BTRFS_SETGET_FUNCS(chunk_num_stripes, struct btrfs_chunk, num_stripes, 16);
1542
BTRFS_SETGET_FUNCS(chunk_sub_stripes, struct btrfs_chunk, sub_stripes, 16);
1543
BTRFS_SETGET_FUNCS(stripe_devid, struct btrfs_stripe, devid, 64);
1544
BTRFS_SETGET_FUNCS(stripe_offset, struct btrfs_stripe, offset, 64);
1546
static inline char *btrfs_stripe_dev_uuid(struct btrfs_stripe *s)
1548
return (char *)s + offsetof(struct btrfs_stripe, dev_uuid);
1551
BTRFS_SETGET_STACK_FUNCS(stack_chunk_length, struct btrfs_chunk, length, 64);
1552
BTRFS_SETGET_STACK_FUNCS(stack_chunk_owner, struct btrfs_chunk, owner, 64);
1553
BTRFS_SETGET_STACK_FUNCS(stack_chunk_stripe_len, struct btrfs_chunk,
1555
BTRFS_SETGET_STACK_FUNCS(stack_chunk_io_align, struct btrfs_chunk,
1557
BTRFS_SETGET_STACK_FUNCS(stack_chunk_io_width, struct btrfs_chunk,
1559
BTRFS_SETGET_STACK_FUNCS(stack_chunk_sector_size, struct btrfs_chunk,
1561
BTRFS_SETGET_STACK_FUNCS(stack_chunk_type, struct btrfs_chunk, type, 64);
1562
BTRFS_SETGET_STACK_FUNCS(stack_chunk_num_stripes, struct btrfs_chunk,
1564
BTRFS_SETGET_STACK_FUNCS(stack_chunk_sub_stripes, struct btrfs_chunk,
1566
BTRFS_SETGET_STACK_FUNCS(stack_stripe_devid, struct btrfs_stripe, devid, 64);
1567
BTRFS_SETGET_STACK_FUNCS(stack_stripe_offset, struct btrfs_stripe, offset, 64);
1569
static inline struct btrfs_stripe *btrfs_stripe_nr(struct btrfs_chunk *c,
1572
unsigned long offset = (unsigned long)c;
1573
offset += offsetof(struct btrfs_chunk, stripe);
1574
offset += nr * sizeof(struct btrfs_stripe);
1575
return (struct btrfs_stripe *)offset;
1578
static inline char *btrfs_stripe_dev_uuid_nr(struct btrfs_chunk *c, int nr)
1580
return btrfs_stripe_dev_uuid(btrfs_stripe_nr(c, nr));
1583
static inline u64 btrfs_stripe_offset_nr(struct extent_buffer *eb,
1584
struct btrfs_chunk *c, int nr)
1586
return btrfs_stripe_offset(eb, btrfs_stripe_nr(c, nr));
1589
static inline u64 btrfs_stripe_devid_nr(struct extent_buffer *eb,
1590
struct btrfs_chunk *c, int nr)
1592
return btrfs_stripe_devid(eb, btrfs_stripe_nr(c, nr));
1595
/* struct btrfs_block_group_item */
1596
BTRFS_SETGET_STACK_FUNCS(block_group_used, struct btrfs_block_group_item,
1598
BTRFS_SETGET_FUNCS(disk_block_group_used, struct btrfs_block_group_item,
1600
BTRFS_SETGET_STACK_FUNCS(block_group_chunk_objectid,
1601
struct btrfs_block_group_item, chunk_objectid, 64);
1603
BTRFS_SETGET_FUNCS(disk_block_group_chunk_objectid,
1604
struct btrfs_block_group_item, chunk_objectid, 64);
1605
BTRFS_SETGET_FUNCS(disk_block_group_flags,
1606
struct btrfs_block_group_item, flags, 64);
1607
BTRFS_SETGET_STACK_FUNCS(block_group_flags,
1608
struct btrfs_block_group_item, flags, 64);
1610
/* struct btrfs_inode_ref */
1611
BTRFS_SETGET_FUNCS(inode_ref_name_len, struct btrfs_inode_ref, name_len, 16);
1612
BTRFS_SETGET_FUNCS(inode_ref_index, struct btrfs_inode_ref, index, 64);
1614
/* struct btrfs_inode_item */
1615
BTRFS_SETGET_FUNCS(inode_generation, struct btrfs_inode_item, generation, 64);
1616
BTRFS_SETGET_FUNCS(inode_sequence, struct btrfs_inode_item, sequence, 64);
1617
BTRFS_SETGET_FUNCS(inode_transid, struct btrfs_inode_item, transid, 64);
1618
BTRFS_SETGET_FUNCS(inode_size, struct btrfs_inode_item, size, 64);
1619
BTRFS_SETGET_FUNCS(inode_nbytes, struct btrfs_inode_item, nbytes, 64);
1620
BTRFS_SETGET_FUNCS(inode_block_group, struct btrfs_inode_item, block_group, 64);
1621
BTRFS_SETGET_FUNCS(inode_nlink, struct btrfs_inode_item, nlink, 32);
1622
BTRFS_SETGET_FUNCS(inode_uid, struct btrfs_inode_item, uid, 32);
1623
BTRFS_SETGET_FUNCS(inode_gid, struct btrfs_inode_item, gid, 32);
1624
BTRFS_SETGET_FUNCS(inode_mode, struct btrfs_inode_item, mode, 32);
1625
BTRFS_SETGET_FUNCS(inode_rdev, struct btrfs_inode_item, rdev, 64);
1626
BTRFS_SETGET_FUNCS(inode_flags, struct btrfs_inode_item, flags, 64);
1628
static inline struct btrfs_timespec *
1629
btrfs_inode_atime(struct btrfs_inode_item *inode_item)
1631
unsigned long ptr = (unsigned long)inode_item;
1632
ptr += offsetof(struct btrfs_inode_item, atime);
1633
return (struct btrfs_timespec *)ptr;
1636
static inline struct btrfs_timespec *
1637
btrfs_inode_mtime(struct btrfs_inode_item *inode_item)
1639
unsigned long ptr = (unsigned long)inode_item;
1640
ptr += offsetof(struct btrfs_inode_item, mtime);
1641
return (struct btrfs_timespec *)ptr;
1644
static inline struct btrfs_timespec *
1645
btrfs_inode_ctime(struct btrfs_inode_item *inode_item)
1647
unsigned long ptr = (unsigned long)inode_item;
1648
ptr += offsetof(struct btrfs_inode_item, ctime);
1649
return (struct btrfs_timespec *)ptr;
1652
BTRFS_SETGET_FUNCS(timespec_sec, struct btrfs_timespec, sec, 64);
1653
BTRFS_SETGET_FUNCS(timespec_nsec, struct btrfs_timespec, nsec, 32);
1655
/* struct btrfs_dev_extent */
1656
BTRFS_SETGET_FUNCS(dev_extent_chunk_tree, struct btrfs_dev_extent,
1658
BTRFS_SETGET_FUNCS(dev_extent_chunk_objectid, struct btrfs_dev_extent,
1659
chunk_objectid, 64);
1660
BTRFS_SETGET_FUNCS(dev_extent_chunk_offset, struct btrfs_dev_extent,
1662
BTRFS_SETGET_FUNCS(dev_extent_length, struct btrfs_dev_extent, length, 64);
1664
static inline u8 *btrfs_dev_extent_chunk_tree_uuid(struct btrfs_dev_extent *dev)
1666
unsigned long ptr = offsetof(struct btrfs_dev_extent, chunk_tree_uuid);
1667
return (u8 *)((unsigned long)dev + ptr);
1670
BTRFS_SETGET_FUNCS(extent_refs, struct btrfs_extent_item, refs, 64);
1671
BTRFS_SETGET_FUNCS(extent_generation, struct btrfs_extent_item,
1673
BTRFS_SETGET_FUNCS(extent_flags, struct btrfs_extent_item, flags, 64);
1675
BTRFS_SETGET_FUNCS(extent_refs_v0, struct btrfs_extent_item_v0, refs, 32);
1678
BTRFS_SETGET_FUNCS(tree_block_level, struct btrfs_tree_block_info, level, 8);
1680
static inline void btrfs_tree_block_key(struct extent_buffer *eb,
1681
struct btrfs_tree_block_info *item,
1682
struct btrfs_disk_key *key)
1684
read_eb_member(eb, item, struct btrfs_tree_block_info, key, key);
1687
static inline void btrfs_set_tree_block_key(struct extent_buffer *eb,
1688
struct btrfs_tree_block_info *item,
1689
struct btrfs_disk_key *key)
1691
write_eb_member(eb, item, struct btrfs_tree_block_info, key, key);
1694
BTRFS_SETGET_FUNCS(extent_data_ref_root, struct btrfs_extent_data_ref,
1696
BTRFS_SETGET_FUNCS(extent_data_ref_objectid, struct btrfs_extent_data_ref,
1698
BTRFS_SETGET_FUNCS(extent_data_ref_offset, struct btrfs_extent_data_ref,
1700
BTRFS_SETGET_FUNCS(extent_data_ref_count, struct btrfs_extent_data_ref,
1703
BTRFS_SETGET_FUNCS(shared_data_ref_count, struct btrfs_shared_data_ref,
1706
BTRFS_SETGET_FUNCS(extent_inline_ref_type, struct btrfs_extent_inline_ref,
1708
BTRFS_SETGET_FUNCS(extent_inline_ref_offset, struct btrfs_extent_inline_ref,
1711
static inline u32 btrfs_extent_inline_ref_size(int type)
1713
if (type == BTRFS_TREE_BLOCK_REF_KEY ||
1714
type == BTRFS_SHARED_BLOCK_REF_KEY)
1715
return sizeof(struct btrfs_extent_inline_ref);
1716
if (type == BTRFS_SHARED_DATA_REF_KEY)
1717
return sizeof(struct btrfs_shared_data_ref) +
1718
sizeof(struct btrfs_extent_inline_ref);
1719
if (type == BTRFS_EXTENT_DATA_REF_KEY)
1720
return sizeof(struct btrfs_extent_data_ref) +
1721
offsetof(struct btrfs_extent_inline_ref, offset);
1726
BTRFS_SETGET_FUNCS(ref_root_v0, struct btrfs_extent_ref_v0, root, 64);
1727
BTRFS_SETGET_FUNCS(ref_generation_v0, struct btrfs_extent_ref_v0,
1729
BTRFS_SETGET_FUNCS(ref_objectid_v0, struct btrfs_extent_ref_v0, objectid, 64);
1730
BTRFS_SETGET_FUNCS(ref_count_v0, struct btrfs_extent_ref_v0, count, 32);
1732
/* struct btrfs_node */
1733
BTRFS_SETGET_FUNCS(key_blockptr, struct btrfs_key_ptr, blockptr, 64);
1734
BTRFS_SETGET_FUNCS(key_generation, struct btrfs_key_ptr, generation, 64);
1736
static inline u64 btrfs_node_blockptr(struct extent_buffer *eb, int nr)
1739
ptr = offsetof(struct btrfs_node, ptrs) +
1740
sizeof(struct btrfs_key_ptr) * nr;
1741
return btrfs_key_blockptr(eb, (struct btrfs_key_ptr *)ptr);
1744
static inline void btrfs_set_node_blockptr(struct extent_buffer *eb,
1748
ptr = offsetof(struct btrfs_node, ptrs) +
1749
sizeof(struct btrfs_key_ptr) * nr;
1750
btrfs_set_key_blockptr(eb, (struct btrfs_key_ptr *)ptr, val);
1753
static inline u64 btrfs_node_ptr_generation(struct extent_buffer *eb, int nr)
1756
ptr = offsetof(struct btrfs_node, ptrs) +
1757
sizeof(struct btrfs_key_ptr) * nr;
1758
return btrfs_key_generation(eb, (struct btrfs_key_ptr *)ptr);
1761
static inline void btrfs_set_node_ptr_generation(struct extent_buffer *eb,
1765
ptr = offsetof(struct btrfs_node, ptrs) +
1766
sizeof(struct btrfs_key_ptr) * nr;
1767
btrfs_set_key_generation(eb, (struct btrfs_key_ptr *)ptr, val);
1770
static inline unsigned long btrfs_node_key_ptr_offset(int nr)
1772
return offsetof(struct btrfs_node, ptrs) +
1773
sizeof(struct btrfs_key_ptr) * nr;
1776
void btrfs_node_key(struct extent_buffer *eb,
1777
struct btrfs_disk_key *disk_key, int nr);
1779
static inline void btrfs_set_node_key(struct extent_buffer *eb,
1780
struct btrfs_disk_key *disk_key, int nr)
1783
ptr = btrfs_node_key_ptr_offset(nr);
1784
write_eb_member(eb, (struct btrfs_key_ptr *)ptr,
1785
struct btrfs_key_ptr, key, disk_key);
1788
/* struct btrfs_item */
1789
BTRFS_SETGET_FUNCS(item_offset, struct btrfs_item, offset, 32);
1790
BTRFS_SETGET_FUNCS(item_size, struct btrfs_item, size, 32);
1792
static inline unsigned long btrfs_item_nr_offset(int nr)
1794
return offsetof(struct btrfs_leaf, items) +
1795
sizeof(struct btrfs_item) * nr;
1798
static inline struct btrfs_item *btrfs_item_nr(struct extent_buffer *eb,
1801
return (struct btrfs_item *)btrfs_item_nr_offset(nr);
1804
static inline u32 btrfs_item_end(struct extent_buffer *eb,
1805
struct btrfs_item *item)
1807
return btrfs_item_offset(eb, item) + btrfs_item_size(eb, item);
1810
static inline u32 btrfs_item_end_nr(struct extent_buffer *eb, int nr)
1812
return btrfs_item_end(eb, btrfs_item_nr(eb, nr));
1815
static inline u32 btrfs_item_offset_nr(struct extent_buffer *eb, int nr)
1817
return btrfs_item_offset(eb, btrfs_item_nr(eb, nr));
1820
static inline u32 btrfs_item_size_nr(struct extent_buffer *eb, int nr)
1822
return btrfs_item_size(eb, btrfs_item_nr(eb, nr));
1825
static inline void btrfs_item_key(struct extent_buffer *eb,
1826
struct btrfs_disk_key *disk_key, int nr)
1828
struct btrfs_item *item = btrfs_item_nr(eb, nr);
1829
read_eb_member(eb, item, struct btrfs_item, key, disk_key);
1832
static inline void btrfs_set_item_key(struct extent_buffer *eb,
1833
struct btrfs_disk_key *disk_key, int nr)
1835
struct btrfs_item *item = btrfs_item_nr(eb, nr);
1836
write_eb_member(eb, item, struct btrfs_item, key, disk_key);
1839
BTRFS_SETGET_FUNCS(dir_log_end, struct btrfs_dir_log_item, end, 64);
1842
* struct btrfs_root_ref
1844
BTRFS_SETGET_FUNCS(root_ref_dirid, struct btrfs_root_ref, dirid, 64);
1845
BTRFS_SETGET_FUNCS(root_ref_sequence, struct btrfs_root_ref, sequence, 64);
1846
BTRFS_SETGET_FUNCS(root_ref_name_len, struct btrfs_root_ref, name_len, 16);
1848
/* struct btrfs_dir_item */
1849
BTRFS_SETGET_FUNCS(dir_data_len, struct btrfs_dir_item, data_len, 16);
1850
BTRFS_SETGET_FUNCS(dir_type, struct btrfs_dir_item, type, 8);
1851
BTRFS_SETGET_FUNCS(dir_name_len, struct btrfs_dir_item, name_len, 16);
1852
BTRFS_SETGET_FUNCS(dir_transid, struct btrfs_dir_item, transid, 64);
1854
static inline void btrfs_dir_item_key(struct extent_buffer *eb,
1855
struct btrfs_dir_item *item,
1856
struct btrfs_disk_key *key)
1858
read_eb_member(eb, item, struct btrfs_dir_item, location, key);
1861
static inline void btrfs_set_dir_item_key(struct extent_buffer *eb,
1862
struct btrfs_dir_item *item,
1863
struct btrfs_disk_key *key)
1865
write_eb_member(eb, item, struct btrfs_dir_item, location, key);
1868
BTRFS_SETGET_FUNCS(free_space_entries, struct btrfs_free_space_header,
1870
BTRFS_SETGET_FUNCS(free_space_bitmaps, struct btrfs_free_space_header,
1872
BTRFS_SETGET_FUNCS(free_space_generation, struct btrfs_free_space_header,
1875
static inline void btrfs_free_space_key(struct extent_buffer *eb,
1876
struct btrfs_free_space_header *h,
1877
struct btrfs_disk_key *key)
1879
read_eb_member(eb, h, struct btrfs_free_space_header, location, key);
1882
static inline void btrfs_set_free_space_key(struct extent_buffer *eb,
1883
struct btrfs_free_space_header *h,
1884
struct btrfs_disk_key *key)
1886
write_eb_member(eb, h, struct btrfs_free_space_header, location, key);
1889
/* struct btrfs_disk_key */
1890
BTRFS_SETGET_STACK_FUNCS(disk_key_objectid, struct btrfs_disk_key,
1892
BTRFS_SETGET_STACK_FUNCS(disk_key_offset, struct btrfs_disk_key, offset, 64);
1893
BTRFS_SETGET_STACK_FUNCS(disk_key_type, struct btrfs_disk_key, type, 8);
1895
static inline void btrfs_disk_key_to_cpu(struct btrfs_key *cpu,
1896
struct btrfs_disk_key *disk)
1898
cpu->offset = le64_to_cpu(disk->offset);
1899
cpu->type = disk->type;
1900
cpu->objectid = le64_to_cpu(disk->objectid);
1903
static inline void btrfs_cpu_key_to_disk(struct btrfs_disk_key *disk,
1904
struct btrfs_key *cpu)
1906
disk->offset = cpu_to_le64(cpu->offset);
1907
disk->type = cpu->type;
1908
disk->objectid = cpu_to_le64(cpu->objectid);
1911
static inline void btrfs_node_key_to_cpu(struct extent_buffer *eb,
1912
struct btrfs_key *key, int nr)
1914
struct btrfs_disk_key disk_key;
1915
btrfs_node_key(eb, &disk_key, nr);
1916
btrfs_disk_key_to_cpu(key, &disk_key);
1919
static inline void btrfs_item_key_to_cpu(struct extent_buffer *eb,
1920
struct btrfs_key *key, int nr)
1922
struct btrfs_disk_key disk_key;
1923
btrfs_item_key(eb, &disk_key, nr);
1924
btrfs_disk_key_to_cpu(key, &disk_key);
1927
static inline void btrfs_dir_item_key_to_cpu(struct extent_buffer *eb,
1928
struct btrfs_dir_item *item,
1929
struct btrfs_key *key)
1931
struct btrfs_disk_key disk_key;
1932
btrfs_dir_item_key(eb, item, &disk_key);
1933
btrfs_disk_key_to_cpu(key, &disk_key);
1937
static inline u8 btrfs_key_type(struct btrfs_key *key)
1942
static inline void btrfs_set_key_type(struct btrfs_key *key, u8 val)
1947
/* struct btrfs_header */
1948
BTRFS_SETGET_HEADER_FUNCS(header_bytenr, struct btrfs_header, bytenr, 64);
1949
BTRFS_SETGET_HEADER_FUNCS(header_generation, struct btrfs_header,
1951
BTRFS_SETGET_HEADER_FUNCS(header_owner, struct btrfs_header, owner, 64);
1952
BTRFS_SETGET_HEADER_FUNCS(header_nritems, struct btrfs_header, nritems, 32);
1953
BTRFS_SETGET_HEADER_FUNCS(header_flags, struct btrfs_header, flags, 64);
1954
BTRFS_SETGET_HEADER_FUNCS(header_level, struct btrfs_header, level, 8);
1956
static inline int btrfs_header_flag(struct extent_buffer *eb, u64 flag)
1958
return (btrfs_header_flags(eb) & flag) == flag;
1961
static inline int btrfs_set_header_flag(struct extent_buffer *eb, u64 flag)
1963
u64 flags = btrfs_header_flags(eb);
1964
btrfs_set_header_flags(eb, flags | flag);
1965
return (flags & flag) == flag;
1968
static inline int btrfs_clear_header_flag(struct extent_buffer *eb, u64 flag)
1970
u64 flags = btrfs_header_flags(eb);
1971
btrfs_set_header_flags(eb, flags & ~flag);
1972
return (flags & flag) == flag;
1975
static inline int btrfs_header_backref_rev(struct extent_buffer *eb)
1977
u64 flags = btrfs_header_flags(eb);
1978
return flags >> BTRFS_BACKREF_REV_SHIFT;
1981
static inline void btrfs_set_header_backref_rev(struct extent_buffer *eb,
1984
u64 flags = btrfs_header_flags(eb);
1985
flags &= ~BTRFS_BACKREF_REV_MASK;
1986
flags |= (u64)rev << BTRFS_BACKREF_REV_SHIFT;
1987
btrfs_set_header_flags(eb, flags);
1990
static inline u8 *btrfs_header_fsid(struct extent_buffer *eb)
1992
unsigned long ptr = offsetof(struct btrfs_header, fsid);
1996
static inline u8 *btrfs_header_chunk_tree_uuid(struct extent_buffer *eb)
1998
unsigned long ptr = offsetof(struct btrfs_header, chunk_tree_uuid);
2002
static inline int btrfs_is_leaf(struct extent_buffer *eb)
2004
return btrfs_header_level(eb) == 0;
2007
/* struct btrfs_root_item */
2008
BTRFS_SETGET_FUNCS(disk_root_generation, struct btrfs_root_item,
2010
BTRFS_SETGET_FUNCS(disk_root_refs, struct btrfs_root_item, refs, 32);
2011
BTRFS_SETGET_FUNCS(disk_root_bytenr, struct btrfs_root_item, bytenr, 64);
2012
BTRFS_SETGET_FUNCS(disk_root_level, struct btrfs_root_item, level, 8);
2014
BTRFS_SETGET_STACK_FUNCS(root_generation, struct btrfs_root_item,
2016
BTRFS_SETGET_STACK_FUNCS(root_bytenr, struct btrfs_root_item, bytenr, 64);
2017
BTRFS_SETGET_STACK_FUNCS(root_level, struct btrfs_root_item, level, 8);
2018
BTRFS_SETGET_STACK_FUNCS(root_dirid, struct btrfs_root_item, root_dirid, 64);
2019
BTRFS_SETGET_STACK_FUNCS(root_refs, struct btrfs_root_item, refs, 32);
2020
BTRFS_SETGET_STACK_FUNCS(root_flags, struct btrfs_root_item, flags, 64);
2021
BTRFS_SETGET_STACK_FUNCS(root_used, struct btrfs_root_item, bytes_used, 64);
2022
BTRFS_SETGET_STACK_FUNCS(root_limit, struct btrfs_root_item, byte_limit, 64);
2023
BTRFS_SETGET_STACK_FUNCS(root_last_snapshot, struct btrfs_root_item,
2026
static inline bool btrfs_root_readonly(struct btrfs_root *root)
2028
return root->root_item.flags & BTRFS_ROOT_SUBVOL_RDONLY;
2031
/* struct btrfs_root_backup */
2032
BTRFS_SETGET_STACK_FUNCS(backup_tree_root, struct btrfs_root_backup,
2034
BTRFS_SETGET_STACK_FUNCS(backup_tree_root_gen, struct btrfs_root_backup,
2036
BTRFS_SETGET_STACK_FUNCS(backup_tree_root_level, struct btrfs_root_backup,
2037
tree_root_level, 8);
2039
BTRFS_SETGET_STACK_FUNCS(backup_chunk_root, struct btrfs_root_backup,
2041
BTRFS_SETGET_STACK_FUNCS(backup_chunk_root_gen, struct btrfs_root_backup,
2042
chunk_root_gen, 64);
2043
BTRFS_SETGET_STACK_FUNCS(backup_chunk_root_level, struct btrfs_root_backup,
2044
chunk_root_level, 8);
2046
BTRFS_SETGET_STACK_FUNCS(backup_extent_root, struct btrfs_root_backup,
2048
BTRFS_SETGET_STACK_FUNCS(backup_extent_root_gen, struct btrfs_root_backup,
2049
extent_root_gen, 64);
2050
BTRFS_SETGET_STACK_FUNCS(backup_extent_root_level, struct btrfs_root_backup,
2051
extent_root_level, 8);
2053
BTRFS_SETGET_STACK_FUNCS(backup_fs_root, struct btrfs_root_backup,
2055
BTRFS_SETGET_STACK_FUNCS(backup_fs_root_gen, struct btrfs_root_backup,
2057
BTRFS_SETGET_STACK_FUNCS(backup_fs_root_level, struct btrfs_root_backup,
2060
BTRFS_SETGET_STACK_FUNCS(backup_dev_root, struct btrfs_root_backup,
2062
BTRFS_SETGET_STACK_FUNCS(backup_dev_root_gen, struct btrfs_root_backup,
2064
BTRFS_SETGET_STACK_FUNCS(backup_dev_root_level, struct btrfs_root_backup,
2067
BTRFS_SETGET_STACK_FUNCS(backup_csum_root, struct btrfs_root_backup,
2069
BTRFS_SETGET_STACK_FUNCS(backup_csum_root_gen, struct btrfs_root_backup,
2071
BTRFS_SETGET_STACK_FUNCS(backup_csum_root_level, struct btrfs_root_backup,
2072
csum_root_level, 8);
2073
BTRFS_SETGET_STACK_FUNCS(backup_total_bytes, struct btrfs_root_backup,
2075
BTRFS_SETGET_STACK_FUNCS(backup_bytes_used, struct btrfs_root_backup,
2077
BTRFS_SETGET_STACK_FUNCS(backup_num_devices, struct btrfs_root_backup,
2080
/* struct btrfs_super_block */
2082
BTRFS_SETGET_STACK_FUNCS(super_bytenr, struct btrfs_super_block, bytenr, 64);
2083
BTRFS_SETGET_STACK_FUNCS(super_flags, struct btrfs_super_block, flags, 64);
2084
BTRFS_SETGET_STACK_FUNCS(super_generation, struct btrfs_super_block,
2086
BTRFS_SETGET_STACK_FUNCS(super_root, struct btrfs_super_block, root, 64);
2087
BTRFS_SETGET_STACK_FUNCS(super_sys_array_size,
2088
struct btrfs_super_block, sys_chunk_array_size, 32);
2089
BTRFS_SETGET_STACK_FUNCS(super_chunk_root_generation,
2090
struct btrfs_super_block, chunk_root_generation, 64);
2091
BTRFS_SETGET_STACK_FUNCS(super_root_level, struct btrfs_super_block,
2093
BTRFS_SETGET_STACK_FUNCS(super_chunk_root, struct btrfs_super_block,
2095
BTRFS_SETGET_STACK_FUNCS(super_chunk_root_level, struct btrfs_super_block,
2096
chunk_root_level, 8);
2097
BTRFS_SETGET_STACK_FUNCS(super_log_root, struct btrfs_super_block,
2099
BTRFS_SETGET_STACK_FUNCS(super_log_root_transid, struct btrfs_super_block,
2100
log_root_transid, 64);
2101
BTRFS_SETGET_STACK_FUNCS(super_log_root_level, struct btrfs_super_block,
2103
BTRFS_SETGET_STACK_FUNCS(super_total_bytes, struct btrfs_super_block,
2105
BTRFS_SETGET_STACK_FUNCS(super_bytes_used, struct btrfs_super_block,
2107
BTRFS_SETGET_STACK_FUNCS(super_sectorsize, struct btrfs_super_block,
2109
BTRFS_SETGET_STACK_FUNCS(super_nodesize, struct btrfs_super_block,
2111
BTRFS_SETGET_STACK_FUNCS(super_leafsize, struct btrfs_super_block,
2113
BTRFS_SETGET_STACK_FUNCS(super_stripesize, struct btrfs_super_block,
2115
BTRFS_SETGET_STACK_FUNCS(super_root_dir, struct btrfs_super_block,
2116
root_dir_objectid, 64);
2117
BTRFS_SETGET_STACK_FUNCS(super_num_devices, struct btrfs_super_block,
2119
BTRFS_SETGET_STACK_FUNCS(super_compat_flags, struct btrfs_super_block,
2121
BTRFS_SETGET_STACK_FUNCS(super_compat_ro_flags, struct btrfs_super_block,
2122
compat_ro_flags, 64);
2123
BTRFS_SETGET_STACK_FUNCS(super_incompat_flags, struct btrfs_super_block,
2124
incompat_flags, 64);
2125
BTRFS_SETGET_STACK_FUNCS(super_csum_type, struct btrfs_super_block,
2127
BTRFS_SETGET_STACK_FUNCS(super_cache_generation, struct btrfs_super_block,
2128
cache_generation, 64);
2130
static inline int btrfs_super_csum_size(struct btrfs_super_block *s)
2132
int t = btrfs_super_csum_type(s);
2133
BUG_ON(t >= ARRAY_SIZE(btrfs_csum_sizes));
2134
return btrfs_csum_sizes[t];
2137
static inline unsigned long btrfs_leaf_data(struct extent_buffer *l)
2139
return offsetof(struct btrfs_leaf, items);
2142
/* struct btrfs_file_extent_item */
2143
BTRFS_SETGET_FUNCS(file_extent_type, struct btrfs_file_extent_item, type, 8);
2145
static inline unsigned long
2146
btrfs_file_extent_inline_start(struct btrfs_file_extent_item *e)
2148
unsigned long offset = (unsigned long)e;
2149
offset += offsetof(struct btrfs_file_extent_item, disk_bytenr);
2153
static inline u32 btrfs_file_extent_calc_inline_size(u32 datasize)
2155
return offsetof(struct btrfs_file_extent_item, disk_bytenr) + datasize;
2158
BTRFS_SETGET_FUNCS(file_extent_disk_bytenr, struct btrfs_file_extent_item,
2160
BTRFS_SETGET_FUNCS(file_extent_generation, struct btrfs_file_extent_item,
2162
BTRFS_SETGET_FUNCS(file_extent_disk_num_bytes, struct btrfs_file_extent_item,
2163
disk_num_bytes, 64);
2164
BTRFS_SETGET_FUNCS(file_extent_offset, struct btrfs_file_extent_item,
2166
BTRFS_SETGET_FUNCS(file_extent_num_bytes, struct btrfs_file_extent_item,
2168
BTRFS_SETGET_FUNCS(file_extent_ram_bytes, struct btrfs_file_extent_item,
2170
BTRFS_SETGET_FUNCS(file_extent_compression, struct btrfs_file_extent_item,
2172
BTRFS_SETGET_FUNCS(file_extent_encryption, struct btrfs_file_extent_item,
2174
BTRFS_SETGET_FUNCS(file_extent_other_encoding, struct btrfs_file_extent_item,
2175
other_encoding, 16);
2177
/* this returns the number of file bytes represented by the inline item.
2178
* If an item is compressed, this is the uncompressed size
2180
static inline u32 btrfs_file_extent_inline_len(struct extent_buffer *eb,
2181
struct btrfs_file_extent_item *e)
2183
return btrfs_file_extent_ram_bytes(eb, e);
2187
* this returns the number of bytes used by the item on disk, minus the
2188
* size of any extent headers. If a file is compressed on disk, this is
2189
* the compressed size
2191
static inline u32 btrfs_file_extent_inline_item_len(struct extent_buffer *eb,
2192
struct btrfs_item *e)
2194
unsigned long offset;
2195
offset = offsetof(struct btrfs_file_extent_item, disk_bytenr);
2196
return btrfs_item_size(eb, e) - offset;
2199
static inline struct btrfs_root *btrfs_sb(struct super_block *sb)
2201
return sb->s_fs_info;
2204
static inline u32 btrfs_level_size(struct btrfs_root *root, int level)
2207
return root->leafsize;
2208
return root->nodesize;
2211
/* helper function to cast into the data area of the leaf. */
2212
#define btrfs_item_ptr(leaf, slot, type) \
2213
((type *)(btrfs_leaf_data(leaf) + \
2214
btrfs_item_offset_nr(leaf, slot)))
2216
#define btrfs_item_ptr_offset(leaf, slot) \
2217
((unsigned long)(btrfs_leaf_data(leaf) + \
2218
btrfs_item_offset_nr(leaf, slot)))
2220
static inline struct dentry *fdentry(struct file *file)
2222
return file->f_path.dentry;
2225
static inline bool btrfs_mixed_space_info(struct btrfs_space_info *space_info)
2227
return ((space_info->flags & BTRFS_BLOCK_GROUP_METADATA) &&
2228
(space_info->flags & BTRFS_BLOCK_GROUP_DATA));
2231
static inline gfp_t btrfs_alloc_write_mask(struct address_space *mapping)
2233
return mapping_gfp_mask(mapping) & ~__GFP_FS;
2237
static inline u64 btrfs_calc_trans_metadata_size(struct btrfs_root *root,
2240
return (root->leafsize + root->nodesize * (BTRFS_MAX_LEVEL - 1)) *
2245
* Doing a truncate won't result in new nodes or leaves, just what we need for
2248
static inline u64 btrfs_calc_trunc_metadata_size(struct btrfs_root *root,
2251
return (root->leafsize + root->nodesize * (BTRFS_MAX_LEVEL - 1)) *
2255
void btrfs_put_block_group(struct btrfs_block_group_cache *cache);
2256
int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
2257
struct btrfs_root *root, unsigned long count);
2258
int btrfs_lookup_extent(struct btrfs_root *root, u64 start, u64 len);
2259
int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans,
2260
struct btrfs_root *root, u64 bytenr,
2261
u64 num_bytes, u64 *refs, u64 *flags);
2262
int btrfs_pin_extent(struct btrfs_root *root,
2263
u64 bytenr, u64 num, int reserved);
2264
int btrfs_pin_extent_for_log_replay(struct btrfs_trans_handle *trans,
2265
struct btrfs_root *root,
2266
u64 bytenr, u64 num_bytes);
2267
int btrfs_cross_ref_exist(struct btrfs_trans_handle *trans,
2268
struct btrfs_root *root,
2269
u64 objectid, u64 offset, u64 bytenr);
2270
struct btrfs_block_group_cache *btrfs_lookup_block_group(
2271
struct btrfs_fs_info *info,
2273
void btrfs_put_block_group(struct btrfs_block_group_cache *cache);
2274
u64 btrfs_find_block_group(struct btrfs_root *root,
2275
u64 search_start, u64 search_hint, int owner);
2276
struct extent_buffer *btrfs_alloc_free_block(struct btrfs_trans_handle *trans,
2277
struct btrfs_root *root, u32 blocksize,
2278
u64 parent, u64 root_objectid,
2279
struct btrfs_disk_key *key, int level,
2280
u64 hint, u64 empty_size);
2281
void btrfs_free_tree_block(struct btrfs_trans_handle *trans,
2282
struct btrfs_root *root,
2283
struct extent_buffer *buf,
2284
u64 parent, int last_ref);
2285
struct extent_buffer *btrfs_init_new_buffer(struct btrfs_trans_handle *trans,
2286
struct btrfs_root *root,
2287
u64 bytenr, u32 blocksize,
2289
int btrfs_alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
2290
struct btrfs_root *root,
2291
u64 root_objectid, u64 owner,
2292
u64 offset, struct btrfs_key *ins);
2293
int btrfs_alloc_logged_file_extent(struct btrfs_trans_handle *trans,
2294
struct btrfs_root *root,
2295
u64 root_objectid, u64 owner, u64 offset,
2296
struct btrfs_key *ins);
2297
int btrfs_reserve_extent(struct btrfs_trans_handle *trans,
2298
struct btrfs_root *root,
2299
u64 num_bytes, u64 min_alloc_size,
2300
u64 empty_size, u64 hint_byte,
2301
u64 search_end, struct btrfs_key *ins,
2303
int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
2304
struct extent_buffer *buf, int full_backref);
2305
int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
2306
struct extent_buffer *buf, int full_backref);
2307
int btrfs_set_disk_extent_flags(struct btrfs_trans_handle *trans,
2308
struct btrfs_root *root,
2309
u64 bytenr, u64 num_bytes, u64 flags,
2311
int btrfs_free_extent(struct btrfs_trans_handle *trans,
2312
struct btrfs_root *root,
2313
u64 bytenr, u64 num_bytes, u64 parent,
2314
u64 root_objectid, u64 owner, u64 offset);
2316
int btrfs_free_reserved_extent(struct btrfs_root *root, u64 start, u64 len);
2317
int btrfs_free_and_pin_reserved_extent(struct btrfs_root *root,
2318
u64 start, u64 len);
2319
int btrfs_prepare_extent_commit(struct btrfs_trans_handle *trans,
2320
struct btrfs_root *root);
2321
int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans,
2322
struct btrfs_root *root);
2323
int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
2324
struct btrfs_root *root,
2325
u64 bytenr, u64 num_bytes, u64 parent,
2326
u64 root_objectid, u64 owner, u64 offset);
2328
int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans,
2329
struct btrfs_root *root);
2330
int btrfs_extent_readonly(struct btrfs_root *root, u64 bytenr);
2331
int btrfs_free_block_groups(struct btrfs_fs_info *info);
2332
int btrfs_read_block_groups(struct btrfs_root *root);
2333
int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr);
2334
int btrfs_make_block_group(struct btrfs_trans_handle *trans,
2335
struct btrfs_root *root, u64 bytes_used,
2336
u64 type, u64 chunk_objectid, u64 chunk_offset,
2338
int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
2339
struct btrfs_root *root, u64 group_start);
2340
u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags);
2341
u64 btrfs_get_alloc_profile(struct btrfs_root *root, int data);
2342
void btrfs_set_inode_space_info(struct btrfs_root *root, struct inode *ionde);
2343
void btrfs_clear_space_info_full(struct btrfs_fs_info *info);
2344
int btrfs_check_data_free_space(struct inode *inode, u64 bytes);
2345
void btrfs_free_reserved_data_space(struct inode *inode, u64 bytes);
2346
void btrfs_trans_release_metadata(struct btrfs_trans_handle *trans,
2347
struct btrfs_root *root);
2348
int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans,
2349
struct inode *inode);
2350
void btrfs_orphan_release_metadata(struct inode *inode);
2351
int btrfs_snap_reserve_metadata(struct btrfs_trans_handle *trans,
2352
struct btrfs_pending_snapshot *pending);
2353
int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes);
2354
void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes);
2355
int btrfs_delalloc_reserve_space(struct inode *inode, u64 num_bytes);
2356
void btrfs_delalloc_release_space(struct inode *inode, u64 num_bytes);
2357
void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv);
2358
struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root);
2359
void btrfs_free_block_rsv(struct btrfs_root *root,
2360
struct btrfs_block_rsv *rsv);
2361
int btrfs_block_rsv_add(struct btrfs_root *root,
2362
struct btrfs_block_rsv *block_rsv,
2364
int btrfs_block_rsv_add_noflush(struct btrfs_root *root,
2365
struct btrfs_block_rsv *block_rsv,
2367
int btrfs_block_rsv_check(struct btrfs_root *root,
2368
struct btrfs_block_rsv *block_rsv, int min_factor);
2369
int btrfs_block_rsv_refill(struct btrfs_root *root,
2370
struct btrfs_block_rsv *block_rsv,
2372
int btrfs_block_rsv_refill_noflush(struct btrfs_root *root,
2373
struct btrfs_block_rsv *block_rsv,
2375
int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv,
2376
struct btrfs_block_rsv *dst_rsv,
2378
void btrfs_block_rsv_release(struct btrfs_root *root,
2379
struct btrfs_block_rsv *block_rsv,
2381
int btrfs_set_block_group_ro(struct btrfs_root *root,
2382
struct btrfs_block_group_cache *cache);
2383
int btrfs_set_block_group_rw(struct btrfs_root *root,
2384
struct btrfs_block_group_cache *cache);
2385
void btrfs_put_block_group_cache(struct btrfs_fs_info *info);
2386
u64 btrfs_account_ro_block_groups_free_space(struct btrfs_space_info *sinfo);
2387
int btrfs_error_unpin_extent_range(struct btrfs_root *root,
2388
u64 start, u64 end);
2389
int btrfs_error_discard_extent(struct btrfs_root *root, u64 bytenr,
2390
u64 num_bytes, u64 *actual_bytes);
2391
int btrfs_force_chunk_alloc(struct btrfs_trans_handle *trans,
2392
struct btrfs_root *root, u64 type);
2393
int btrfs_trim_fs(struct btrfs_root *root, struct fstrim_range *range);
2395
int btrfs_init_space_info(struct btrfs_fs_info *fs_info);
2397
int btrfs_bin_search(struct extent_buffer *eb, struct btrfs_key *key,
2398
int level, int *slot);
2399
int btrfs_comp_cpu_keys(struct btrfs_key *k1, struct btrfs_key *k2);
2400
int btrfs_previous_item(struct btrfs_root *root,
2401
struct btrfs_path *path, u64 min_objectid,
2403
int btrfs_set_item_key_safe(struct btrfs_trans_handle *trans,
2404
struct btrfs_root *root, struct btrfs_path *path,
2405
struct btrfs_key *new_key);
2406
struct extent_buffer *btrfs_root_node(struct btrfs_root *root);
2407
struct extent_buffer *btrfs_lock_root_node(struct btrfs_root *root);
2408
int btrfs_find_next_key(struct btrfs_root *root, struct btrfs_path *path,
2409
struct btrfs_key *key, int lowest_level,
2410
int cache_only, u64 min_trans);
2411
int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key,
2412
struct btrfs_key *max_key,
2413
struct btrfs_path *path, int cache_only,
2415
int btrfs_cow_block(struct btrfs_trans_handle *trans,
2416
struct btrfs_root *root, struct extent_buffer *buf,
2417
struct extent_buffer *parent, int parent_slot,
2418
struct extent_buffer **cow_ret);
2419
int btrfs_copy_root(struct btrfs_trans_handle *trans,
2420
struct btrfs_root *root,
2421
struct extent_buffer *buf,
2422
struct extent_buffer **cow_ret, u64 new_root_objectid);
2423
int btrfs_block_can_be_shared(struct btrfs_root *root,
2424
struct extent_buffer *buf);
2425
int btrfs_extend_item(struct btrfs_trans_handle *trans, struct btrfs_root
2426
*root, struct btrfs_path *path, u32 data_size);
2427
int btrfs_truncate_item(struct btrfs_trans_handle *trans,
2428
struct btrfs_root *root,
2429
struct btrfs_path *path,
2430
u32 new_size, int from_end);
2431
int btrfs_split_item(struct btrfs_trans_handle *trans,
2432
struct btrfs_root *root,
2433
struct btrfs_path *path,
2434
struct btrfs_key *new_key,
2435
unsigned long split_offset);
2436
int btrfs_duplicate_item(struct btrfs_trans_handle *trans,
2437
struct btrfs_root *root,
2438
struct btrfs_path *path,
2439
struct btrfs_key *new_key);
2440
int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root
2441
*root, struct btrfs_key *key, struct btrfs_path *p, int
2443
int btrfs_realloc_node(struct btrfs_trans_handle *trans,
2444
struct btrfs_root *root, struct extent_buffer *parent,
2445
int start_slot, int cache_only, u64 *last_ret,
2446
struct btrfs_key *progress);
2447
void btrfs_release_path(struct btrfs_path *p);
2448
struct btrfs_path *btrfs_alloc_path(void);
2449
void btrfs_free_path(struct btrfs_path *p);
2450
void btrfs_set_path_blocking(struct btrfs_path *p);
2451
void btrfs_clear_path_blocking(struct btrfs_path *p,
2452
struct extent_buffer *held, int held_rw);
2453
void btrfs_unlock_up_safe(struct btrfs_path *p, int level);
2455
int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root,
2456
struct btrfs_path *path, int slot, int nr);
2457
static inline int btrfs_del_item(struct btrfs_trans_handle *trans,
2458
struct btrfs_root *root,
2459
struct btrfs_path *path)
2461
return btrfs_del_items(trans, root, path, path->slots[0], 1);
2464
int setup_items_for_insert(struct btrfs_trans_handle *trans,
2465
struct btrfs_root *root, struct btrfs_path *path,
2466
struct btrfs_key *cpu_key, u32 *data_size,
2467
u32 total_data, u32 total_size, int nr);
2468
int btrfs_insert_item(struct btrfs_trans_handle *trans, struct btrfs_root
2469
*root, struct btrfs_key *key, void *data, u32 data_size);
2470
int btrfs_insert_empty_items(struct btrfs_trans_handle *trans,
2471
struct btrfs_root *root,
2472
struct btrfs_path *path,
2473
struct btrfs_key *cpu_key, u32 *data_size, int nr);
2475
static inline int btrfs_insert_empty_item(struct btrfs_trans_handle *trans,
2476
struct btrfs_root *root,
2477
struct btrfs_path *path,
2478
struct btrfs_key *key,
2481
return btrfs_insert_empty_items(trans, root, path, key, &data_size, 1);
2484
int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path);
2485
int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path);
2486
int btrfs_leaf_free_space(struct btrfs_root *root, struct extent_buffer *leaf);
2487
void btrfs_drop_snapshot(struct btrfs_root *root,
2488
struct btrfs_block_rsv *block_rsv, int update_ref);
2489
int btrfs_drop_subtree(struct btrfs_trans_handle *trans,
2490
struct btrfs_root *root,
2491
struct extent_buffer *node,
2492
struct extent_buffer *parent);
2493
static inline int btrfs_fs_closing(struct btrfs_fs_info *fs_info)
2496
* Get synced with close_ctree()
2499
return fs_info->closing;
2501
static inline void free_fs_info(struct btrfs_fs_info *fs_info)
2503
kfree(fs_info->delayed_root);
2504
kfree(fs_info->extent_root);
2505
kfree(fs_info->tree_root);
2506
kfree(fs_info->chunk_root);
2507
kfree(fs_info->dev_root);
2508
kfree(fs_info->csum_root);
2509
kfree(fs_info->super_copy);
2510
kfree(fs_info->super_for_commit);
2515
int btrfs_find_root_ref(struct btrfs_root *tree_root,
2516
struct btrfs_path *path,
2517
u64 root_id, u64 ref_id);
2518
int btrfs_add_root_ref(struct btrfs_trans_handle *trans,
2519
struct btrfs_root *tree_root,
2520
u64 root_id, u64 ref_id, u64 dirid, u64 sequence,
2521
const char *name, int name_len);
2522
int btrfs_del_root_ref(struct btrfs_trans_handle *trans,
2523
struct btrfs_root *tree_root,
2524
u64 root_id, u64 ref_id, u64 dirid, u64 *sequence,
2525
const char *name, int name_len);
2526
int btrfs_del_root(struct btrfs_trans_handle *trans, struct btrfs_root *root,
2527
struct btrfs_key *key);
2528
int btrfs_insert_root(struct btrfs_trans_handle *trans, struct btrfs_root
2529
*root, struct btrfs_key *key, struct btrfs_root_item
2531
int btrfs_update_root(struct btrfs_trans_handle *trans, struct btrfs_root
2532
*root, struct btrfs_key *key, struct btrfs_root_item
2534
int btrfs_find_last_root(struct btrfs_root *root, u64 objectid, struct
2535
btrfs_root_item *item, struct btrfs_key *key);
2536
int btrfs_find_dead_roots(struct btrfs_root *root, u64 objectid);
2537
int btrfs_find_orphan_roots(struct btrfs_root *tree_root);
2538
void btrfs_set_root_node(struct btrfs_root_item *item,
2539
struct extent_buffer *node);
2540
void btrfs_check_and_init_root_item(struct btrfs_root_item *item);
2543
int btrfs_insert_dir_item(struct btrfs_trans_handle *trans,
2544
struct btrfs_root *root, const char *name,
2545
int name_len, struct inode *dir,
2546
struct btrfs_key *location, u8 type, u64 index);
2547
struct btrfs_dir_item *btrfs_lookup_dir_item(struct btrfs_trans_handle *trans,
2548
struct btrfs_root *root,
2549
struct btrfs_path *path, u64 dir,
2550
const char *name, int name_len,
2552
struct btrfs_dir_item *
2553
btrfs_lookup_dir_index_item(struct btrfs_trans_handle *trans,
2554
struct btrfs_root *root,
2555
struct btrfs_path *path, u64 dir,
2556
u64 objectid, const char *name, int name_len,
2558
struct btrfs_dir_item *
2559
btrfs_search_dir_index_item(struct btrfs_root *root,
2560
struct btrfs_path *path, u64 dirid,
2561
const char *name, int name_len);
2562
struct btrfs_dir_item *btrfs_match_dir_item_name(struct btrfs_root *root,
2563
struct btrfs_path *path,
2564
const char *name, int name_len);
2565
int btrfs_delete_one_dir_name(struct btrfs_trans_handle *trans,
2566
struct btrfs_root *root,
2567
struct btrfs_path *path,
2568
struct btrfs_dir_item *di);
2569
int btrfs_insert_xattr_item(struct btrfs_trans_handle *trans,
2570
struct btrfs_root *root,
2571
struct btrfs_path *path, u64 objectid,
2572
const char *name, u16 name_len,
2573
const void *data, u16 data_len);
2574
struct btrfs_dir_item *btrfs_lookup_xattr(struct btrfs_trans_handle *trans,
2575
struct btrfs_root *root,
2576
struct btrfs_path *path, u64 dir,
2577
const char *name, u16 name_len,
2579
int verify_dir_item(struct btrfs_root *root,
2580
struct extent_buffer *leaf,
2581
struct btrfs_dir_item *dir_item);
2584
int btrfs_insert_orphan_item(struct btrfs_trans_handle *trans,
2585
struct btrfs_root *root, u64 offset);
2586
int btrfs_del_orphan_item(struct btrfs_trans_handle *trans,
2587
struct btrfs_root *root, u64 offset);
2588
int btrfs_find_orphan_item(struct btrfs_root *root, u64 offset);
2591
int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans,
2592
struct btrfs_root *root,
2593
const char *name, int name_len,
2594
u64 inode_objectid, u64 ref_objectid, u64 index);
2595
int btrfs_del_inode_ref(struct btrfs_trans_handle *trans,
2596
struct btrfs_root *root,
2597
const char *name, int name_len,
2598
u64 inode_objectid, u64 ref_objectid, u64 *index);
2599
struct btrfs_inode_ref *
2600
btrfs_lookup_inode_ref(struct btrfs_trans_handle *trans,
2601
struct btrfs_root *root,
2602
struct btrfs_path *path,
2603
const char *name, int name_len,
2604
u64 inode_objectid, u64 ref_objectid, int mod);
2605
int btrfs_insert_empty_inode(struct btrfs_trans_handle *trans,
2606
struct btrfs_root *root,
2607
struct btrfs_path *path, u64 objectid);
2608
int btrfs_lookup_inode(struct btrfs_trans_handle *trans, struct btrfs_root
2609
*root, struct btrfs_path *path,
2610
struct btrfs_key *location, int mod);
2613
int btrfs_del_csums(struct btrfs_trans_handle *trans,
2614
struct btrfs_root *root, u64 bytenr, u64 len);
2615
int btrfs_lookup_bio_sums(struct btrfs_root *root, struct inode *inode,
2616
struct bio *bio, u32 *dst);
2617
int btrfs_lookup_bio_sums_dio(struct btrfs_root *root, struct inode *inode,
2618
struct bio *bio, u64 logical_offset, u32 *dst);
2619
int btrfs_insert_file_extent(struct btrfs_trans_handle *trans,
2620
struct btrfs_root *root,
2621
u64 objectid, u64 pos,
2622
u64 disk_offset, u64 disk_num_bytes,
2623
u64 num_bytes, u64 offset, u64 ram_bytes,
2624
u8 compression, u8 encryption, u16 other_encoding);
2625
int btrfs_lookup_file_extent(struct btrfs_trans_handle *trans,
2626
struct btrfs_root *root,
2627
struct btrfs_path *path, u64 objectid,
2628
u64 bytenr, int mod);
2629
int btrfs_csum_file_blocks(struct btrfs_trans_handle *trans,
2630
struct btrfs_root *root,
2631
struct btrfs_ordered_sum *sums);
2632
int btrfs_csum_one_bio(struct btrfs_root *root, struct inode *inode,
2633
struct bio *bio, u64 file_start, int contig);
2634
struct btrfs_csum_item *btrfs_lookup_csum(struct btrfs_trans_handle *trans,
2635
struct btrfs_root *root,
2636
struct btrfs_path *path,
2637
u64 bytenr, int cow);
2638
int btrfs_csum_truncate(struct btrfs_trans_handle *trans,
2639
struct btrfs_root *root, struct btrfs_path *path,
2641
int btrfs_lookup_csums_range(struct btrfs_root *root, u64 start, u64 end,
2642
struct list_head *list, int search_commit);
2644
struct extent_map *btrfs_get_extent_fiemap(struct inode *inode, struct page *page,
2645
size_t pg_offset, u64 start, u64 len,
2648
/* RHEL and EL kernels have a patch that renames PG_checked to FsMisc */
2649
#if defined(ClearPageFsMisc) && !defined(ClearPageChecked)
2650
#define ClearPageChecked ClearPageFsMisc
2651
#define SetPageChecked SetPageFsMisc
2652
#define PageChecked PageFsMisc
2655
/* This forces readahead on a given range of bytes in an inode */
2656
static inline void btrfs_force_ra(struct address_space *mapping,
2657
struct file_ra_state *ra, struct file *file,
2658
pgoff_t offset, unsigned long req_size)
2660
page_cache_sync_readahead(mapping, ra, file, offset, req_size);
2663
struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry);
2664
int btrfs_set_inode_index(struct inode *dir, u64 *index);
2665
int btrfs_unlink_inode(struct btrfs_trans_handle *trans,
2666
struct btrfs_root *root,
2667
struct inode *dir, struct inode *inode,
2668
const char *name, int name_len);
2669
int btrfs_add_link(struct btrfs_trans_handle *trans,
2670
struct inode *parent_inode, struct inode *inode,
2671
const char *name, int name_len, int add_backref, u64 index);
2672
int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
2673
struct btrfs_root *root,
2674
struct inode *dir, u64 objectid,
2675
const char *name, int name_len);
2676
int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans,
2677
struct btrfs_root *root,
2678
struct inode *inode, u64 new_size,
2681
int btrfs_start_delalloc_inodes(struct btrfs_root *root, int delay_iput);
2682
int btrfs_set_extent_delalloc(struct inode *inode, u64 start, u64 end,
2683
struct extent_state **cached_state);
2684
int btrfs_writepages(struct address_space *mapping,
2685
struct writeback_control *wbc);
2686
int btrfs_create_subvol_root(struct btrfs_trans_handle *trans,
2687
struct btrfs_root *new_root, u64 new_dirid);
2688
int btrfs_merge_bio_hook(struct page *page, unsigned long offset,
2689
size_t size, struct bio *bio, unsigned long bio_flags);
2691
int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf);
2692
int btrfs_readpage(struct file *file, struct page *page);
2693
void btrfs_evict_inode(struct inode *inode);
2694
int btrfs_write_inode(struct inode *inode, struct writeback_control *wbc);
2695
int btrfs_dirty_inode(struct inode *inode);
2696
int btrfs_update_time(struct file *file);
2697
struct inode *btrfs_alloc_inode(struct super_block *sb);
2698
void btrfs_destroy_inode(struct inode *inode);
2699
int btrfs_drop_inode(struct inode *inode);
2700
int btrfs_init_cachep(void);
2701
void btrfs_destroy_cachep(void);
2702
long btrfs_ioctl_trans_end(struct file *file);
2703
struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location,
2704
struct btrfs_root *root, int *was_new);
2705
struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page,
2706
size_t pg_offset, u64 start, u64 end,
2708
int btrfs_update_inode(struct btrfs_trans_handle *trans,
2709
struct btrfs_root *root,
2710
struct inode *inode);
2711
int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode);
2712
int btrfs_orphan_del(struct btrfs_trans_handle *trans, struct inode *inode);
2713
int btrfs_orphan_cleanup(struct btrfs_root *root);
2714
void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans,
2715
struct btrfs_root *root);
2716
int btrfs_cont_expand(struct inode *inode, loff_t oldsize, loff_t size);
2717
int btrfs_invalidate_inodes(struct btrfs_root *root);
2718
void btrfs_add_delayed_iput(struct inode *inode);
2719
void btrfs_run_delayed_iputs(struct btrfs_root *root);
2720
int btrfs_prealloc_file_range(struct inode *inode, int mode,
2721
u64 start, u64 num_bytes, u64 min_size,
2722
loff_t actual_len, u64 *alloc_hint);
2723
int btrfs_prealloc_file_range_trans(struct inode *inode,
2724
struct btrfs_trans_handle *trans, int mode,
2725
u64 start, u64 num_bytes, u64 min_size,
2726
loff_t actual_len, u64 *alloc_hint);
2727
extern const struct dentry_operations btrfs_dentry_operations;
2730
long btrfs_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
2731
void btrfs_update_iflags(struct inode *inode);
2732
void btrfs_inherit_iflags(struct inode *inode, struct inode *dir);
2733
int btrfs_defrag_file(struct inode *inode, struct file *file,
2734
struct btrfs_ioctl_defrag_range_args *range,
2735
u64 newer_than, unsigned long max_pages);
2737
int btrfs_add_inode_defrag(struct btrfs_trans_handle *trans,
2738
struct inode *inode);
2739
int btrfs_run_defrag_inodes(struct btrfs_fs_info *fs_info);
2740
int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync);
2741
int btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end,
2743
extern const struct file_operations btrfs_file_operations;
2744
int btrfs_drop_extents(struct btrfs_trans_handle *trans, struct inode *inode,
2745
u64 start, u64 end, u64 *hint_byte, int drop_cache);
2746
int btrfs_mark_extent_written(struct btrfs_trans_handle *trans,
2747
struct inode *inode, u64 start, u64 end);
2748
int btrfs_release_file(struct inode *inode, struct file *file);
2749
void btrfs_drop_pages(struct page **pages, size_t num_pages);
2750
int btrfs_dirty_pages(struct btrfs_root *root, struct inode *inode,
2751
struct page **pages, size_t num_pages,
2752
loff_t pos, size_t write_bytes,
2753
struct extent_state **cached);
2756
int btrfs_defrag_leaves(struct btrfs_trans_handle *trans,
2757
struct btrfs_root *root, int cache_only);
2760
int btrfs_init_sysfs(void);
2761
void btrfs_exit_sysfs(void);
2764
ssize_t btrfs_listxattr(struct dentry *dentry, char *buffer, size_t size);
2767
int btrfs_parse_options(struct btrfs_root *root, char *options);
2768
int btrfs_sync_fs(struct super_block *sb, int wait);
2769
void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function,
2770
unsigned int line, int errno);
2772
#define btrfs_std_error(fs_info, errno) \
2775
__btrfs_std_error((fs_info), __func__, __LINE__, (errno));\
2779
#ifdef CONFIG_BTRFS_FS_POSIX_ACL
2780
struct posix_acl *btrfs_get_acl(struct inode *inode, int type);
2781
int btrfs_init_acl(struct btrfs_trans_handle *trans,
2782
struct inode *inode, struct inode *dir);
2783
int btrfs_acl_chmod(struct inode *inode);
2785
#define btrfs_get_acl NULL
2786
static inline int btrfs_init_acl(struct btrfs_trans_handle *trans,
2787
struct inode *inode, struct inode *dir)
2791
static inline int btrfs_acl_chmod(struct inode *inode)
2798
int btrfs_relocate_block_group(struct btrfs_root *root, u64 group_start);
2799
int btrfs_init_reloc_root(struct btrfs_trans_handle *trans,
2800
struct btrfs_root *root);
2801
int btrfs_update_reloc_root(struct btrfs_trans_handle *trans,
2802
struct btrfs_root *root);
2803
int btrfs_recover_relocation(struct btrfs_root *root);
2804
int btrfs_reloc_clone_csums(struct inode *inode, u64 file_pos, u64 len);
2805
void btrfs_reloc_cow_block(struct btrfs_trans_handle *trans,
2806
struct btrfs_root *root, struct extent_buffer *buf,
2807
struct extent_buffer *cow);
2808
void btrfs_reloc_pre_snapshot(struct btrfs_trans_handle *trans,
2809
struct btrfs_pending_snapshot *pending,
2810
u64 *bytes_to_reserve);
2811
void btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans,
2812
struct btrfs_pending_snapshot *pending);
2815
int btrfs_scrub_dev(struct btrfs_root *root, u64 devid, u64 start, u64 end,
2816
struct btrfs_scrub_progress *progress, int readonly);
2817
int btrfs_scrub_pause(struct btrfs_root *root);
2818
int btrfs_scrub_pause_super(struct btrfs_root *root);
2819
int btrfs_scrub_continue(struct btrfs_root *root);
2820
int btrfs_scrub_continue_super(struct btrfs_root *root);
2821
int btrfs_scrub_cancel(struct btrfs_root *root);
2822
int btrfs_scrub_cancel_dev(struct btrfs_root *root, struct btrfs_device *dev);
2823
int btrfs_scrub_cancel_devid(struct btrfs_root *root, u64 devid);
2824
int btrfs_scrub_progress(struct btrfs_root *root, u64 devid,
2825
struct btrfs_scrub_progress *progress);
2828
struct reada_control {
2829
struct btrfs_root *root; /* tree to prefetch */
2830
struct btrfs_key key_start;
2831
struct btrfs_key key_end; /* exclusive */
2834
wait_queue_head_t wait;
2836
struct reada_control *btrfs_reada_add(struct btrfs_root *root,
2837
struct btrfs_key *start, struct btrfs_key *end);
2838
int btrfs_reada_wait(void *handle);
2839
void btrfs_reada_detach(void *handle);
2840
int btree_readahead_hook(struct btrfs_root *root, struct extent_buffer *eb,
2841
u64 start, int err);