fix incompat flags
[platform/upstream/btrfs-progs.git] / ctree.h
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__
20 #define __BTRFS__
21
22 #include "list.h"
23 #include "kerncompat.h"
24 #include "radix-tree.h"
25 #include "extent-cache.h"
26 #include "extent_io.h"
27
28 struct btrfs_root;
29 struct btrfs_trans_handle;
30 #define BTRFS_MAGIC "_BHRfS_M"
31
32 #define BTRFS_MAX_LEVEL 8
33
34 #define BTRFS_COMPAT_EXTENT_TREE_V0
35
36 /* holds pointers to all of the tree roots */
37 #define BTRFS_ROOT_TREE_OBJECTID 1ULL
38
39 /* stores information about which extents are in use, and reference counts */
40 #define BTRFS_EXTENT_TREE_OBJECTID 2ULL
41
42 /*
43  * chunk tree stores translations from logical -> physical block numbering
44  * the super block points to the chunk tree
45  */
46 #define BTRFS_CHUNK_TREE_OBJECTID 3ULL
47
48 /*
49  * stores information about which areas of a given device are in use.
50  * one per device.  The tree of tree roots points to the device tree
51  */
52 #define BTRFS_DEV_TREE_OBJECTID 4ULL
53
54 /* one per subvolume, storing files and directories */
55 #define BTRFS_FS_TREE_OBJECTID 5ULL
56
57 /* directory objectid inside the root tree */
58 #define BTRFS_ROOT_TREE_DIR_OBJECTID 6ULL
59 /* holds checksums of all the data extents */
60 #define BTRFS_CSUM_TREE_OBJECTID 7ULL
61
62
63 /* oprhan objectid for tracking unlinked/truncated files */
64 #define BTRFS_ORPHAN_OBJECTID -5ULL
65
66 /* does write ahead logging to speed up fsyncs */
67 #define BTRFS_TREE_LOG_OBJECTID -6ULL
68 #define BTRFS_TREE_LOG_FIXUP_OBJECTID -7ULL
69
70 /* space balancing */
71 #define BTRFS_TREE_RELOC_OBJECTID -8ULL
72 #define BTRFS_DATA_RELOC_TREE_OBJECTID -9ULL
73
74 /*
75  * extent checksums all have this objectid
76  * this allows them to share the logging tree
77  * for fsyncs
78  */
79 #define BTRFS_EXTENT_CSUM_OBJECTID -10ULL
80
81 /* dummy objectid represents multiple objectids */
82 #define BTRFS_MULTIPLE_OBJECTIDS -255ULL
83
84 /*
85  * All files have objectids in this range.
86  */
87 #define BTRFS_FIRST_FREE_OBJECTID 256ULL
88 #define BTRFS_LAST_FREE_OBJECTID -256ULL
89 #define BTRFS_FIRST_CHUNK_TREE_OBJECTID 256ULL
90
91
92
93 /*
94  * the device items go into the chunk tree.  The key is in the form
95  * [ 1 BTRFS_DEV_ITEM_KEY device_id ]
96  */
97 #define BTRFS_DEV_ITEMS_OBJECTID 1ULL
98
99 /*
100  * we can actually store much bigger names, but lets not confuse the rest
101  * of linux
102  */
103 #define BTRFS_NAME_LEN 255
104
105 /* 32 bytes in various csum fields */
106 #define BTRFS_CSUM_SIZE 32
107
108 /* csum types */
109 #define BTRFS_CSUM_TYPE_CRC32   0
110
111
112 /* csum types */
113 #define BTRFS_CSUM_TYPE_CRC32   0
114
115 static int btrfs_csum_sizes[] = { 4, 0 };
116
117 /* four bytes for CRC32 */
118 #define BTRFS_CRC32_SIZE 4
119 #define BTRFS_EMPTY_DIR_SIZE 0
120
121 #define BTRFS_FT_UNKNOWN        0
122 #define BTRFS_FT_REG_FILE       1
123 #define BTRFS_FT_DIR            2
124 #define BTRFS_FT_CHRDEV         3
125 #define BTRFS_FT_BLKDEV         4
126 #define BTRFS_FT_FIFO           5
127 #define BTRFS_FT_SOCK           6
128 #define BTRFS_FT_SYMLINK        7
129 #define BTRFS_FT_XATTR          8
130 #define BTRFS_FT_MAX            9
131
132 /*
133  * the key defines the order in the tree, and so it also defines (optimal)
134  * block layout.  objectid corresonds to the inode number.  The flags
135  * tells us things about the object, and is a kind of stream selector.
136  * so for a given inode, keys with flags of 1 might refer to the inode
137  * data, flags of 2 may point to file data in the btree and flags == 3
138  * may point to extents.
139  *
140  * offset is the starting byte offset for this key in the stream.
141  *
142  * btrfs_disk_key is in disk byte order.  struct btrfs_key is always
143  * in cpu native order.  Otherwise they are identical and their sizes
144  * should be the same (ie both packed)
145  */
146 struct btrfs_disk_key {
147         __le64 objectid;
148         u8 type;
149         __le64 offset;
150 } __attribute__ ((__packed__));
151
152 struct btrfs_key {
153         u64 objectid;
154         u8 type;
155         u64 offset;
156 } __attribute__ ((__packed__));
157
158 struct btrfs_mapping_tree {
159         struct cache_tree cache_tree;
160 };
161
162 #define BTRFS_UUID_SIZE 16
163 struct btrfs_dev_item {
164         /* the internal btrfs device id */
165         __le64 devid;
166
167         /* size of the device */
168         __le64 total_bytes;
169
170         /* bytes used */
171         __le64 bytes_used;
172
173         /* optimal io alignment for this device */
174         __le32 io_align;
175
176         /* optimal io width for this device */
177         __le32 io_width;
178
179         /* minimal io size for this device */
180         __le32 sector_size;
181
182         /* type and info about this device */
183         __le64 type;
184
185         /* expected generation for this device */
186         __le64 generation;
187
188         /*
189          * starting byte of this partition on the device,
190          * to allowr for stripe alignment in the future
191          */
192         __le64 start_offset;
193
194         /* grouping information for allocation decisions */
195         __le32 dev_group;
196
197         /* seek speed 0-100 where 100 is fastest */
198         u8 seek_speed;
199
200         /* bandwidth 0-100 where 100 is fastest */
201         u8 bandwidth;
202
203         /* btrfs generated uuid for this device */
204         u8 uuid[BTRFS_UUID_SIZE];
205
206         /* uuid of FS who owns this device */
207         u8 fsid[BTRFS_UUID_SIZE];
208 } __attribute__ ((__packed__));
209
210 struct btrfs_stripe {
211         __le64 devid;
212         __le64 offset;
213         u8 dev_uuid[BTRFS_UUID_SIZE];
214 } __attribute__ ((__packed__));
215
216 struct btrfs_chunk {
217         /* size of this chunk in bytes */
218         __le64 length;
219
220         /* objectid of the root referencing this chunk */
221         __le64 owner;
222
223         __le64 stripe_len;
224         __le64 type;
225
226         /* optimal io alignment for this chunk */
227         __le32 io_align;
228
229         /* optimal io width for this chunk */
230         __le32 io_width;
231
232         /* minimal io size for this chunk */
233         __le32 sector_size;
234
235         /* 2^16 stripes is quite a lot, a second limit is the size of a single
236          * item in the btree
237          */
238         __le16 num_stripes;
239
240         /* sub stripes only matter for raid10 */
241         __le16 sub_stripes;
242         struct btrfs_stripe stripe;
243         /* additional stripes go here */
244 } __attribute__ ((__packed__));
245
246 static inline unsigned long btrfs_chunk_item_size(int num_stripes)
247 {
248         BUG_ON(num_stripes == 0);
249         return sizeof(struct btrfs_chunk) +
250                 sizeof(struct btrfs_stripe) * (num_stripes - 1);
251 }
252
253 #define BTRFS_FSID_SIZE 16
254 #define BTRFS_HEADER_FLAG_WRITTEN               (1ULL << 0)
255 #define BTRFS_HEADER_FLAG_RELOC                 (1ULL << 1)
256 #define BTRFS_SUPER_FLAG_SEEDING                (1ULL << 32)
257 #define BTRFS_SUPER_FLAG_METADUMP               (1ULL << 33)
258
259 #define BTRFS_BACKREF_REV_MAX           256
260 #define BTRFS_BACKREF_REV_SHIFT         56
261 #define BTRFS_BACKREF_REV_MASK          (((u64)BTRFS_BACKREF_REV_MAX - 1) << \
262                                          BTRFS_BACKREF_REV_SHIFT)
263
264 #define BTRFS_OLD_BACKREF_REV           0
265 #define BTRFS_MIXED_BACKREF_REV         1
266
267 /*
268  * every tree block (leaf or node) starts with this header.
269  */
270 struct btrfs_header {
271         /* these first four must match the super block */
272         u8 csum[BTRFS_CSUM_SIZE];
273         u8 fsid[BTRFS_FSID_SIZE]; /* FS specific uuid */
274         __le64 bytenr; /* which block this node is supposed to live in */
275         __le64 flags;
276
277         /* allowed to be different from the super from here on down */
278         u8 chunk_tree_uuid[BTRFS_UUID_SIZE];
279         __le64 generation;
280         __le64 owner;
281         __le32 nritems;
282         u8 level;
283 } __attribute__ ((__packed__));
284
285 #define BTRFS_NODEPTRS_PER_BLOCK(r) (((r)->nodesize - \
286                                 sizeof(struct btrfs_header)) / \
287                                 sizeof(struct btrfs_key_ptr))
288 #define __BTRFS_LEAF_DATA_SIZE(bs) ((bs) - sizeof(struct btrfs_header))
289 #define BTRFS_LEAF_DATA_SIZE(r) (__BTRFS_LEAF_DATA_SIZE(r->leafsize))
290 #define BTRFS_MAX_INLINE_DATA_SIZE(r) (BTRFS_LEAF_DATA_SIZE(r) - \
291                                         sizeof(struct btrfs_item) - \
292                                         sizeof(struct btrfs_file_extent_item))
293
294
295 /*
296  * this is a very generous portion of the super block, giving us
297  * room to translate 14 chunks with 3 stripes each.
298  */
299 #define BTRFS_SYSTEM_CHUNK_ARRAY_SIZE 2048
300 #define BTRFS_LABEL_SIZE 256
301
302 /*
303  * the super block basically lists the main trees of the FS
304  * it currently lacks any block count etc etc
305  */
306 struct btrfs_super_block {
307         u8 csum[BTRFS_CSUM_SIZE];
308         /* the first 3 fields must match struct btrfs_header */
309         u8 fsid[BTRFS_FSID_SIZE];    /* FS specific uuid */
310         __le64 bytenr; /* this block number */
311         __le64 flags;
312
313         /* allowed to be different from the btrfs_header from here own down */
314         __le64 magic;
315         __le64 generation;
316         __le64 root;
317         __le64 chunk_root;
318         __le64 log_root;
319
320         /* this will help find the new super based on the log root */
321         __le64 log_root_transid;
322         __le64 total_bytes;
323         __le64 bytes_used;
324         __le64 root_dir_objectid;
325         __le64 num_devices;
326         __le32 sectorsize;
327         __le32 nodesize;
328         __le32 leafsize;
329         __le32 stripesize;
330         __le32 sys_chunk_array_size;
331         __le64 chunk_root_generation;
332         __le64 compat_flags;
333         __le64 compat_ro_flags;
334         __le64 incompat_flags;
335         __le16 csum_type;
336         u8 root_level;
337         u8 chunk_root_level;
338         u8 log_root_level;
339         struct btrfs_dev_item dev_item;
340
341         char label[BTRFS_LABEL_SIZE];
342
343         /* future expansion */
344         __le64 reserved[32];
345         u8 sys_chunk_array[BTRFS_SYSTEM_CHUNK_ARRAY_SIZE];
346 } __attribute__ ((__packed__));
347
348 /*
349  * Compat flags that we support.  If any incompat flags are set other than the
350  * ones specified below then we will fail to mount
351  */
352 #define BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF    (1ULL << 0)
353 #define BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL   (2ULL << 0)
354
355 #define BTRFS_FEATURE_COMPAT_SUPP               0ULL
356 #define BTRFS_FEATURE_COMPAT_RO_SUPP            0ULL
357 #define BTRFS_FEATURE_INCOMPAT_SUPP             \
358         (BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF | \
359          BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL)
360
361 /*
362  * A leaf is full of items. offset and size tell us where to find
363  * the item in the leaf (relative to the start of the data area)
364  */
365 struct btrfs_item {
366         struct btrfs_disk_key key;
367         __le32 offset;
368         __le32 size;
369 } __attribute__ ((__packed__));
370
371 /*
372  * leaves have an item area and a data area:
373  * [item0, item1....itemN] [free space] [dataN...data1, data0]
374  *
375  * The data is separate from the items to get the keys closer together
376  * during searches.
377  */
378 struct btrfs_leaf {
379         struct btrfs_header header;
380         struct btrfs_item items[];
381 } __attribute__ ((__packed__));
382
383 /*
384  * all non-leaf blocks are nodes, they hold only keys and pointers to
385  * other blocks
386  */
387 struct btrfs_key_ptr {
388         struct btrfs_disk_key key;
389         __le64 blockptr;
390         __le64 generation;
391 } __attribute__ ((__packed__));
392
393 struct btrfs_node {
394         struct btrfs_header header;
395         struct btrfs_key_ptr ptrs[];
396 } __attribute__ ((__packed__));
397
398 /*
399  * btrfs_paths remember the path taken from the root down to the leaf.
400  * level 0 is always the leaf, and nodes[1...BTRFS_MAX_LEVEL] will point
401  * to any other levels that are present.
402  *
403  * The slots array records the index of the item or block pointer
404  * used while walking the tree.
405  */
406
407 struct btrfs_path {
408         struct extent_buffer *nodes[BTRFS_MAX_LEVEL];
409         int slots[BTRFS_MAX_LEVEL];
410         /* if there is real range locking, this locks field will change */
411         int locks[BTRFS_MAX_LEVEL];
412         int reada;
413         /* keep some upper locks as we walk down */
414         int lowest_level;
415
416         /*
417          * set by btrfs_split_item, tells search_slot to keep all locks
418          * and to force calls to keep space in the nodes
419          */
420         unsigned int search_for_split:1;
421         unsigned int keep_locks:1;
422         unsigned int skip_locking:1;
423         unsigned int leave_spinning:1;
424 };
425
426 /*
427  * items in the extent btree are used to record the objectid of the
428  * owner of the block and the number of references
429  */
430
431 struct btrfs_extent_item {
432         __le64 refs;
433         __le64 generation;
434         __le64 flags;
435 } __attribute__ ((__packed__));
436
437 struct btrfs_extent_item_v0 {
438         __le32 refs;
439 } __attribute__ ((__packed__));
440
441 #define BTRFS_MAX_EXTENT_ITEM_SIZE(r) ((BTRFS_LEAF_DATA_SIZE(r) >> 4) - \
442                                         sizeof(struct btrfs_item))
443
444 #define BTRFS_EXTENT_FLAG_DATA          (1ULL << 0)
445 #define BTRFS_EXTENT_FLAG_TREE_BLOCK    (1ULL << 1)
446
447 /* following flags only apply to tree blocks */
448
449 /* use full backrefs for extent pointers in the block*/
450 #define BTRFS_BLOCK_FLAG_FULL_BACKREF   (1ULL << 8)
451
452 struct btrfs_tree_block_info {
453         struct btrfs_disk_key key;
454         u8 level;
455 } __attribute__ ((__packed__));
456
457 struct btrfs_extent_data_ref {
458         __le64 root;
459         __le64 objectid;
460         __le64 offset;
461         __le32 count;
462 } __attribute__ ((__packed__));
463
464 struct btrfs_shared_data_ref {
465         __le32 count;
466 } __attribute__ ((__packed__));
467
468 struct btrfs_extent_inline_ref {
469         u8 type;
470         u64 offset;
471 } __attribute__ ((__packed__));
472
473 struct btrfs_extent_ref_v0 {
474         __le64 root;
475         __le64 generation;
476         __le64 objectid;
477         __le32 count;
478 } __attribute__ ((__packed__));
479
480 /* dev extents record free space on individual devices.  The owner
481  * field points back to the chunk allocation mapping tree that allocated
482  * the extent.  The chunk tree uuid field is a way to double check the owner
483  */
484 struct btrfs_dev_extent {
485         __le64 chunk_tree;
486         __le64 chunk_objectid;
487         __le64 chunk_offset;
488         __le64 length;
489         u8 chunk_tree_uuid[BTRFS_UUID_SIZE];
490 } __attribute__ ((__packed__));
491
492 struct btrfs_inode_ref {
493         __le64 index;
494         __le16 name_len;
495         /* name goes here */
496 } __attribute__ ((__packed__));
497
498 struct btrfs_timespec {
499         __le64 sec;
500         __le32 nsec;
501 } __attribute__ ((__packed__));
502
503 typedef enum {
504         BTRFS_COMPRESS_NONE = 0,
505         BTRFS_COMPRESS_ZLIB = 1,
506         BTRFS_COMPRESS_LAST = 2,
507 } btrfs_compression_type;
508
509 /* we don't understand any encryption methods right now */
510 typedef enum {
511         BTRFS_ENCRYPTION_NONE = 0,
512         BTRFS_ENCRYPTION_LAST = 1,
513 } btrfs_encryption_type;
514
515 struct btrfs_inode_item {
516         /* nfs style generation number */
517         __le64 generation;
518         /* transid that last touched this inode */
519         __le64 transid;
520         __le64 size;
521         __le64 nbytes;
522         __le64 block_group;
523         __le32 nlink;
524         __le32 uid;
525         __le32 gid;
526         __le32 mode;
527         __le64 rdev;
528         __le64 flags;
529
530         /* modification sequence number for NFS */
531         __le64 sequence;
532
533         /*
534          * a little future expansion, for more than this we can
535          * just grow the inode item and version it
536          */
537         __le64 reserved[4];
538         struct btrfs_timespec atime;
539         struct btrfs_timespec ctime;
540         struct btrfs_timespec mtime;
541         struct btrfs_timespec otime;
542 } __attribute__ ((__packed__));
543
544 struct btrfs_dir_log_item {
545         __le64 end;
546 } __attribute__ ((__packed__));
547
548 struct btrfs_dir_item {
549         struct btrfs_disk_key location;
550         __le64 transid;
551         __le16 data_len;
552         __le16 name_len;
553         u8 type;
554 } __attribute__ ((__packed__));
555
556 struct btrfs_root_item {
557         struct btrfs_inode_item inode;
558         __le64 generation;
559         __le64 root_dirid;
560         __le64 bytenr;
561         __le64 byte_limit;
562         __le64 bytes_used;
563         __le64 last_snapshot;
564         __le64 flags;
565         __le32 refs;
566         struct btrfs_disk_key drop_progress;
567         u8 drop_level;
568         u8 level;
569 } __attribute__ ((__packed__));
570
571 /*
572  * this is used for both forward and backward root refs
573  */
574 struct btrfs_root_ref {
575         __le64 dirid;
576         __le64 sequence;
577         __le16 name_len;
578 } __attribute__ ((__packed__));
579
580 #define BTRFS_FILE_EXTENT_INLINE 0
581 #define BTRFS_FILE_EXTENT_REG 1
582 #define BTRFS_FILE_EXTENT_PREALLOC 2
583
584 struct btrfs_file_extent_item {
585         /*
586          * transaction id that created this extent
587          */
588         __le64 generation;
589         /*
590          * max number of bytes to hold this extent in ram
591          * when we split a compressed extent we can't know how big
592          * each of the resulting pieces will be.  So, this is
593          * an upper limit on the size of the extent in ram instead of
594          * an exact limit.
595          */
596         __le64 ram_bytes;
597
598         /*
599          * 32 bits for the various ways we might encode the data,
600          * including compression and encryption.  If any of these
601          * are set to something a given disk format doesn't understand
602          * it is treated like an incompat flag for reading and writing,
603          * but not for stat.
604          */
605         u8 compression;
606         u8 encryption;
607         __le16 other_encoding; /* spare for later use */
608
609         /* are we inline data or a real extent? */
610         u8 type;
611
612         /*
613          * disk space consumed by the extent, checksum blocks are included
614          * in these numbers
615          */
616         __le64 disk_bytenr;
617         __le64 disk_num_bytes;
618         /*
619          * the logical offset in file blocks (no csums)
620          * this extent record is for.  This allows a file extent to point
621          * into the middle of an existing extent on disk, sharing it
622          * between two snapshots (useful if some bytes in the middle of the
623          * extent have changed
624          */
625         __le64 offset;
626         /*
627          * the logical number of file blocks (no csums included)
628          */
629         __le64 num_bytes;
630
631 } __attribute__ ((__packed__));
632
633 struct btrfs_csum_item {
634         u8 csum;
635 } __attribute__ ((__packed__));
636
637 /* tag for the radix tree of block groups in ram */
638 #define BTRFS_BLOCK_GROUP_DATA     (1 << 0)
639 #define BTRFS_BLOCK_GROUP_SYSTEM   (1 << 1)
640 #define BTRFS_BLOCK_GROUP_METADATA (1 << 2)
641 #define BTRFS_BLOCK_GROUP_RAID0    (1 << 3)
642 #define BTRFS_BLOCK_GROUP_RAID1    (1 << 4)
643 #define BTRFS_BLOCK_GROUP_DUP      (1 << 5)
644 #define BTRFS_BLOCK_GROUP_RAID10   (1 << 6)
645
646 struct btrfs_block_group_item {
647         __le64 used;
648         __le64 chunk_objectid;
649         __le64 flags;
650 } __attribute__ ((__packed__));
651
652 struct btrfs_space_info {
653         u64 flags;
654         u64 total_bytes;
655         u64 bytes_used;
656         u64 bytes_pinned;
657         int full;
658         struct list_head list;
659 };
660
661 struct btrfs_block_group_cache {
662         struct cache_extent cache;
663         struct btrfs_key key;
664         struct btrfs_block_group_item item;
665         struct btrfs_space_info *space_info;
666         u64 pinned;
667         u64 flags;
668         int cached;
669         int ro;
670 };
671
672 struct btrfs_extent_ops {
673        int (*alloc_extent)(struct btrfs_root *root, u64 num_bytes,
674                            u64 hint_byte, struct btrfs_key *ins);
675        int (*free_extent)(struct btrfs_root *root, u64 bytenr,
676                           u64 num_bytes);
677 };
678
679 struct btrfs_device;
680 struct btrfs_fs_devices;
681 struct btrfs_fs_info {
682         u8 fsid[BTRFS_FSID_SIZE];
683         u8 chunk_tree_uuid[BTRFS_UUID_SIZE];
684         struct btrfs_root *fs_root;
685         struct btrfs_root *extent_root;
686         struct btrfs_root *tree_root;
687         struct btrfs_root *chunk_root;
688         struct btrfs_root *dev_root;
689         struct btrfs_root *csum_root;
690
691         struct cache_tree fs_root_cache;
692
693         /* the log root tree is a directory of all the other log roots */
694         struct btrfs_root *log_root_tree;
695
696         struct extent_io_tree extent_cache;
697         struct extent_io_tree free_space_cache;
698         struct extent_io_tree block_group_cache;
699         struct extent_io_tree pinned_extents;
700         struct extent_io_tree pending_del;
701         struct extent_io_tree extent_ins;
702
703         /* logical->physical extent mapping */
704         struct btrfs_mapping_tree mapping_tree;
705
706         u64 generation;
707         u64 last_trans_committed;
708
709         u64 avail_data_alloc_bits;
710         u64 avail_metadata_alloc_bits;
711         u64 avail_system_alloc_bits;
712         u64 data_alloc_profile;
713         u64 metadata_alloc_profile;
714         u64 system_alloc_profile;
715         u64 alloc_start;
716
717         struct btrfs_trans_handle *running_transaction;
718         struct btrfs_super_block super_copy;
719         struct mutex fs_mutex;
720
721         u64 super_bytenr;
722         u64 total_pinned;
723
724         struct btrfs_extent_ops *extent_ops;
725         struct list_head dirty_cowonly_roots;
726
727         struct btrfs_fs_devices *fs_devices;
728         struct list_head space_info;
729         int system_allocs;
730         int readonly;
731 };
732
733 /*
734  * in ram representation of the tree.  extent_root is used for all allocations
735  * and for the extent tree extent_root root.
736  */
737 struct btrfs_root {
738         struct extent_buffer *node;
739         struct extent_buffer *commit_root;
740         struct btrfs_root_item root_item;
741         struct btrfs_key root_key;
742         struct btrfs_fs_info *fs_info;
743         u64 objectid;
744         u64 last_trans;
745
746         /* data allocations are done in sectorsize units */
747         u32 sectorsize;
748
749         /* node allocations are done in nodesize units */
750         u32 nodesize;
751
752         /* leaf allocations are done in leafsize units */
753         u32 leafsize;
754
755         /* leaf allocations are done in leafsize units */
756         u32 stripesize;
757
758         int ref_cows;
759         int track_dirty;
760
761
762         u32 type;
763         u64 highest_inode;
764         u64 last_inode_alloc;
765
766         /* the dirty list is only used by non-reference counted roots */
767         struct list_head dirty_list;
768         struct cache_extent cache;
769 };
770
771 /*
772  * inode items have the data typically returned from stat and store other
773  * info about object characteristics.  There is one for every file and dir in
774  * the FS
775  */
776 #define BTRFS_INODE_ITEM_KEY            1
777 #define BTRFS_INODE_REF_KEY             12
778 #define BTRFS_XATTR_ITEM_KEY            24
779 #define BTRFS_ORPHAN_ITEM_KEY           48
780
781 #define BTRFS_DIR_LOG_ITEM_KEY  60
782 #define BTRFS_DIR_LOG_INDEX_KEY 72
783 /*
784  * dir items are the name -> inode pointers in a directory.  There is one
785  * for every name in a directory.
786  */
787 #define BTRFS_DIR_ITEM_KEY      84
788 #define BTRFS_DIR_INDEX_KEY     96
789
790 /*
791  * extent data is for file data
792  */
793 #define BTRFS_EXTENT_DATA_KEY   108
794
795 /*
796  * csum items have the checksums for data in the extents
797  */
798 #define BTRFS_CSUM_ITEM_KEY     120
799 /*
800  * extent csums are stored in a separate tree and hold csums for
801  * an entire extent on disk.
802  */
803 #define BTRFS_EXTENT_CSUM_KEY   128
804
805 /*
806  * root items point to tree roots.  There are typically in the root
807  * tree used by the super block to find all the other trees
808  */
809 #define BTRFS_ROOT_ITEM_KEY     132
810
811 /*
812  * root backrefs tie subvols and snapshots to the directory entries that
813  * reference them
814  */
815 #define BTRFS_ROOT_BACKREF_KEY  144
816
817 /*
818  * root refs make a fast index for listing all of the snapshots and
819  * subvolumes referenced by a given root.  They point directly to the
820  * directory item in the root that references the subvol
821  */
822 #define BTRFS_ROOT_REF_KEY      156
823
824 /*
825  * extent items are in the extent map tree.  These record which blocks
826  * are used, and how many references there are to each block
827  */
828 #define BTRFS_EXTENT_ITEM_KEY   168
829
830 #define BTRFS_TREE_BLOCK_REF_KEY        176
831
832 #define BTRFS_EXTENT_DATA_REF_KEY       178
833
834 /* old style extent backrefs */
835 #define BTRFS_EXTENT_REF_V0_KEY         180
836
837 #define BTRFS_SHARED_BLOCK_REF_KEY      182
838
839 #define BTRFS_SHARED_DATA_REF_KEY       184
840
841
842 /*
843  * block groups give us hints into the extent allocation trees.  Which
844  * blocks are free etc etc
845  */
846 #define BTRFS_BLOCK_GROUP_ITEM_KEY 192
847
848 #define BTRFS_DEV_EXTENT_KEY    204
849 #define BTRFS_DEV_ITEM_KEY      216
850 #define BTRFS_CHUNK_ITEM_KEY    228
851
852 /*
853  * string items are for debugging.  They just store a short string of
854  * data in the FS
855  */
856 #define BTRFS_STRING_ITEM_KEY   253
857 /*
858  * Inode flags
859  */
860 #define BTRFS_INODE_NODATASUM           (1 << 0)
861 #define BTRFS_INODE_NODATACOW           (1 << 1)
862 #define BTRFS_INODE_READONLY            (1 << 2)
863
864 #define read_eb_member(eb, ptr, type, member, result) (                 \
865         read_extent_buffer(eb, (char *)(result),                        \
866                            ((unsigned long)(ptr)) +                     \
867                             offsetof(type, member),                     \
868                            sizeof(((type *)0)->member)))
869
870 #define write_eb_member(eb, ptr, type, member, result) (                \
871         write_extent_buffer(eb, (char *)(result),                       \
872                            ((unsigned long)(ptr)) +                     \
873                             offsetof(type, member),                     \
874                            sizeof(((type *)0)->member)))
875
876 #define BTRFS_SETGET_HEADER_FUNCS(name, type, member, bits)             \
877 static inline u##bits btrfs_##name(struct extent_buffer *eb)            \
878 {                                                                       \
879         struct btrfs_header *h = (struct btrfs_header *)eb->data;       \
880         return le##bits##_to_cpu(h->member);                            \
881 }                                                                       \
882 static inline void btrfs_set_##name(struct extent_buffer *eb,           \
883                                     u##bits val)                        \
884 {                                                                       \
885         struct btrfs_header *h = (struct btrfs_header *)eb->data;       \
886         h->member = cpu_to_le##bits(val);                               \
887 }
888
889 #define BTRFS_SETGET_FUNCS(name, type, member, bits)                    \
890 static inline u##bits btrfs_##name(struct extent_buffer *eb,            \
891                                    type *s)                             \
892 {                                                                       \
893         unsigned long offset = (unsigned long)s;                        \
894         type *p = (type *) (eb->data + offset);                         \
895         return le##bits##_to_cpu(p->member);                            \
896 }                                                                       \
897 static inline void btrfs_set_##name(struct extent_buffer *eb,           \
898                                     type *s, u##bits val)               \
899 {                                                                       \
900         unsigned long offset = (unsigned long)s;                        \
901         type *p = (type *) (eb->data + offset);                         \
902         p->member = cpu_to_le##bits(val);                               \
903 }
904
905 #define BTRFS_SETGET_STACK_FUNCS(name, type, member, bits)              \
906 static inline u##bits btrfs_##name(type *s)                             \
907 {                                                                       \
908         return le##bits##_to_cpu(s->member);                            \
909 }                                                                       \
910 static inline void btrfs_set_##name(type *s, u##bits val)               \
911 {                                                                       \
912         s->member = cpu_to_le##bits(val);                               \
913 }
914
915 BTRFS_SETGET_FUNCS(device_type, struct btrfs_dev_item, type, 64);
916 BTRFS_SETGET_FUNCS(device_total_bytes, struct btrfs_dev_item, total_bytes, 64);
917 BTRFS_SETGET_FUNCS(device_bytes_used, struct btrfs_dev_item, bytes_used, 64);
918 BTRFS_SETGET_FUNCS(device_io_align, struct btrfs_dev_item, io_align, 32);
919 BTRFS_SETGET_FUNCS(device_io_width, struct btrfs_dev_item, io_width, 32);
920 BTRFS_SETGET_FUNCS(device_start_offset, struct btrfs_dev_item,
921                    start_offset, 64);
922 BTRFS_SETGET_FUNCS(device_sector_size, struct btrfs_dev_item, sector_size, 32);
923 BTRFS_SETGET_FUNCS(device_id, struct btrfs_dev_item, devid, 64);
924 BTRFS_SETGET_FUNCS(device_group, struct btrfs_dev_item, dev_group, 32);
925 BTRFS_SETGET_FUNCS(device_seek_speed, struct btrfs_dev_item, seek_speed, 8);
926 BTRFS_SETGET_FUNCS(device_bandwidth, struct btrfs_dev_item, bandwidth, 8);
927 BTRFS_SETGET_FUNCS(device_generation, struct btrfs_dev_item, generation, 64);
928
929 BTRFS_SETGET_STACK_FUNCS(stack_device_type, struct btrfs_dev_item, type, 64);
930 BTRFS_SETGET_STACK_FUNCS(stack_device_total_bytes, struct btrfs_dev_item,
931                          total_bytes, 64);
932 BTRFS_SETGET_STACK_FUNCS(stack_device_bytes_used, struct btrfs_dev_item,
933                          bytes_used, 64);
934 BTRFS_SETGET_STACK_FUNCS(stack_device_io_align, struct btrfs_dev_item,
935                          io_align, 32);
936 BTRFS_SETGET_STACK_FUNCS(stack_device_io_width, struct btrfs_dev_item,
937                          io_width, 32);
938 BTRFS_SETGET_STACK_FUNCS(stack_device_sector_size, struct btrfs_dev_item,
939                          sector_size, 32);
940 BTRFS_SETGET_STACK_FUNCS(stack_device_id, struct btrfs_dev_item, devid, 64);
941 BTRFS_SETGET_STACK_FUNCS(stack_device_group, struct btrfs_dev_item,
942                          dev_group, 32);
943 BTRFS_SETGET_STACK_FUNCS(stack_device_seek_speed, struct btrfs_dev_item,
944                          seek_speed, 8);
945 BTRFS_SETGET_STACK_FUNCS(stack_device_bandwidth, struct btrfs_dev_item,
946                          bandwidth, 8);
947 BTRFS_SETGET_STACK_FUNCS(stack_device_generation, struct btrfs_dev_item,
948                          generation, 64);
949
950 static inline char *btrfs_device_uuid(struct btrfs_dev_item *d)
951 {
952         return (char *)d + offsetof(struct btrfs_dev_item, uuid);
953 }
954
955 static inline char *btrfs_device_fsid(struct btrfs_dev_item *d)
956 {
957         return (char *)d + offsetof(struct btrfs_dev_item, fsid);
958 }
959
960 BTRFS_SETGET_FUNCS(chunk_length, struct btrfs_chunk, length, 64);
961 BTRFS_SETGET_FUNCS(chunk_owner, struct btrfs_chunk, owner, 64);
962 BTRFS_SETGET_FUNCS(chunk_stripe_len, struct btrfs_chunk, stripe_len, 64);
963 BTRFS_SETGET_FUNCS(chunk_io_align, struct btrfs_chunk, io_align, 32);
964 BTRFS_SETGET_FUNCS(chunk_io_width, struct btrfs_chunk, io_width, 32);
965 BTRFS_SETGET_FUNCS(chunk_sector_size, struct btrfs_chunk, sector_size, 32);
966 BTRFS_SETGET_FUNCS(chunk_type, struct btrfs_chunk, type, 64);
967 BTRFS_SETGET_FUNCS(chunk_num_stripes, struct btrfs_chunk, num_stripes, 16);
968 BTRFS_SETGET_FUNCS(chunk_sub_stripes, struct btrfs_chunk, sub_stripes, 16);
969 BTRFS_SETGET_FUNCS(stripe_devid, struct btrfs_stripe, devid, 64);
970 BTRFS_SETGET_FUNCS(stripe_offset, struct btrfs_stripe, offset, 64);
971
972 static inline char *btrfs_stripe_dev_uuid(struct btrfs_stripe *s)
973 {
974         return (char *)s + offsetof(struct btrfs_stripe, dev_uuid);
975 }
976
977 BTRFS_SETGET_STACK_FUNCS(stack_chunk_length, struct btrfs_chunk, length, 64);
978 BTRFS_SETGET_STACK_FUNCS(stack_chunk_owner, struct btrfs_chunk, owner, 64);
979 BTRFS_SETGET_STACK_FUNCS(stack_chunk_stripe_len, struct btrfs_chunk,
980                          stripe_len, 64);
981 BTRFS_SETGET_STACK_FUNCS(stack_chunk_io_align, struct btrfs_chunk,
982                          io_align, 32);
983 BTRFS_SETGET_STACK_FUNCS(stack_chunk_io_width, struct btrfs_chunk,
984                          io_width, 32);
985 BTRFS_SETGET_STACK_FUNCS(stack_chunk_sector_size, struct btrfs_chunk,
986                          sector_size, 32);
987 BTRFS_SETGET_STACK_FUNCS(stack_chunk_type, struct btrfs_chunk, type, 64);
988 BTRFS_SETGET_STACK_FUNCS(stack_chunk_num_stripes, struct btrfs_chunk,
989                          num_stripes, 16);
990 BTRFS_SETGET_STACK_FUNCS(stack_chunk_sub_stripes, struct btrfs_chunk,
991                          sub_stripes, 16);
992 BTRFS_SETGET_STACK_FUNCS(stack_stripe_devid, struct btrfs_stripe, devid, 64);
993 BTRFS_SETGET_STACK_FUNCS(stack_stripe_offset, struct btrfs_stripe, offset, 64);
994
995 static inline struct btrfs_stripe *btrfs_stripe_nr(struct btrfs_chunk *c,
996                                                    int nr)
997 {
998         unsigned long offset = (unsigned long)c;
999         offset += offsetof(struct btrfs_chunk, stripe);
1000         offset += nr * sizeof(struct btrfs_stripe);
1001         return (struct btrfs_stripe *)offset;
1002 }
1003
1004 static inline char *btrfs_stripe_dev_uuid_nr(struct btrfs_chunk *c, int nr)
1005 {
1006         return btrfs_stripe_dev_uuid(btrfs_stripe_nr(c, nr));
1007 }
1008
1009 static inline u64 btrfs_stripe_offset_nr(struct extent_buffer *eb,
1010                                          struct btrfs_chunk *c, int nr)
1011 {
1012         return btrfs_stripe_offset(eb, btrfs_stripe_nr(c, nr));
1013 }
1014
1015 static inline void btrfs_set_stripe_offset_nr(struct extent_buffer *eb,
1016                                              struct btrfs_chunk *c, int nr,
1017                                              u64 val)
1018 {
1019         btrfs_set_stripe_offset(eb, btrfs_stripe_nr(c, nr), val);
1020 }
1021
1022 static inline u64 btrfs_stripe_devid_nr(struct extent_buffer *eb,
1023                                          struct btrfs_chunk *c, int nr)
1024 {
1025         return btrfs_stripe_devid(eb, btrfs_stripe_nr(c, nr));
1026 }
1027
1028 static inline void btrfs_set_stripe_devid_nr(struct extent_buffer *eb,
1029                                              struct btrfs_chunk *c, int nr,
1030                                              u64 val)
1031 {
1032         btrfs_set_stripe_devid(eb, btrfs_stripe_nr(c, nr), val);
1033 }
1034
1035 /* struct btrfs_block_group_item */
1036 BTRFS_SETGET_STACK_FUNCS(block_group_used, struct btrfs_block_group_item,
1037                          used, 64);
1038 BTRFS_SETGET_FUNCS(disk_block_group_used, struct btrfs_block_group_item,
1039                          used, 64);
1040 BTRFS_SETGET_STACK_FUNCS(block_group_chunk_objectid,
1041                         struct btrfs_block_group_item, chunk_objectid, 64);
1042
1043 BTRFS_SETGET_FUNCS(disk_block_group_chunk_objectid,
1044                    struct btrfs_block_group_item, chunk_objectid, 64);
1045 BTRFS_SETGET_FUNCS(disk_block_group_flags,
1046                    struct btrfs_block_group_item, flags, 64);
1047 BTRFS_SETGET_STACK_FUNCS(block_group_flags,
1048                         struct btrfs_block_group_item, flags, 64);
1049
1050 /* struct btrfs_inode_ref */
1051 BTRFS_SETGET_FUNCS(inode_ref_name_len, struct btrfs_inode_ref, name_len, 16);
1052 BTRFS_SETGET_STACK_FUNCS(stack_inode_ref_name_len, struct btrfs_inode_ref, name_len, 16);
1053 BTRFS_SETGET_FUNCS(inode_ref_index, struct btrfs_inode_ref, index, 64);
1054
1055 /* struct btrfs_inode_item */
1056 BTRFS_SETGET_FUNCS(inode_generation, struct btrfs_inode_item, generation, 64);
1057 BTRFS_SETGET_FUNCS(inode_sequence, struct btrfs_inode_item, sequence, 64);
1058 BTRFS_SETGET_FUNCS(inode_transid, struct btrfs_inode_item, transid, 64);
1059 BTRFS_SETGET_FUNCS(inode_size, struct btrfs_inode_item, size, 64);
1060 BTRFS_SETGET_FUNCS(inode_nbytes, struct btrfs_inode_item, nbytes, 64);
1061 BTRFS_SETGET_FUNCS(inode_block_group, struct btrfs_inode_item, block_group, 64);
1062 BTRFS_SETGET_FUNCS(inode_nlink, struct btrfs_inode_item, nlink, 32);
1063 BTRFS_SETGET_FUNCS(inode_uid, struct btrfs_inode_item, uid, 32);
1064 BTRFS_SETGET_FUNCS(inode_gid, struct btrfs_inode_item, gid, 32);
1065 BTRFS_SETGET_FUNCS(inode_mode, struct btrfs_inode_item, mode, 32);
1066 BTRFS_SETGET_FUNCS(inode_rdev, struct btrfs_inode_item, rdev, 64);
1067 BTRFS_SETGET_FUNCS(inode_flags, struct btrfs_inode_item, flags, 64);
1068
1069 BTRFS_SETGET_STACK_FUNCS(stack_inode_generation,
1070                          struct btrfs_inode_item, generation, 64);
1071 BTRFS_SETGET_STACK_FUNCS(stack_inode_sequence,
1072                          struct btrfs_inode_item, generation, 64);
1073 BTRFS_SETGET_STACK_FUNCS(stack_inode_size,
1074                          struct btrfs_inode_item, size, 64);
1075 BTRFS_SETGET_STACK_FUNCS(stack_inode_nbytes,
1076                          struct btrfs_inode_item, nbytes, 64);
1077 BTRFS_SETGET_STACK_FUNCS(stack_inode_block_group,
1078                          struct btrfs_inode_item, block_group, 64);
1079 BTRFS_SETGET_STACK_FUNCS(stack_inode_nlink,
1080                          struct btrfs_inode_item, nlink, 32);
1081 BTRFS_SETGET_STACK_FUNCS(stack_inode_uid,
1082                          struct btrfs_inode_item, uid, 32);
1083 BTRFS_SETGET_STACK_FUNCS(stack_inode_gid,
1084                          struct btrfs_inode_item, gid, 32);
1085 BTRFS_SETGET_STACK_FUNCS(stack_inode_mode,
1086                          struct btrfs_inode_item, mode, 32);
1087 BTRFS_SETGET_STACK_FUNCS(stack_inode_rdev,
1088                          struct btrfs_inode_item, rdev, 64);
1089 BTRFS_SETGET_STACK_FUNCS(stack_inode_flags,
1090                          struct btrfs_inode_item, flags, 64);
1091
1092 static inline struct btrfs_timespec *
1093 btrfs_inode_atime(struct btrfs_inode_item *inode_item)
1094 {
1095         unsigned long ptr = (unsigned long)inode_item;
1096         ptr += offsetof(struct btrfs_inode_item, atime);
1097         return (struct btrfs_timespec *)ptr;
1098 }
1099
1100 static inline struct btrfs_timespec *
1101 btrfs_inode_mtime(struct btrfs_inode_item *inode_item)
1102 {
1103         unsigned long ptr = (unsigned long)inode_item;
1104         ptr += offsetof(struct btrfs_inode_item, mtime);
1105         return (struct btrfs_timespec *)ptr;
1106 }
1107
1108 static inline struct btrfs_timespec *
1109 btrfs_inode_ctime(struct btrfs_inode_item *inode_item)
1110 {
1111         unsigned long ptr = (unsigned long)inode_item;
1112         ptr += offsetof(struct btrfs_inode_item, ctime);
1113         return (struct btrfs_timespec *)ptr;
1114 }
1115
1116 static inline struct btrfs_timespec *
1117 btrfs_inode_otime(struct btrfs_inode_item *inode_item)
1118 {
1119         unsigned long ptr = (unsigned long)inode_item;
1120         ptr += offsetof(struct btrfs_inode_item, otime);
1121         return (struct btrfs_timespec *)ptr;
1122 }
1123
1124 BTRFS_SETGET_FUNCS(timespec_sec, struct btrfs_timespec, sec, 64);
1125 BTRFS_SETGET_FUNCS(timespec_nsec, struct btrfs_timespec, nsec, 32);
1126 BTRFS_SETGET_STACK_FUNCS(stack_timespec_sec, struct btrfs_timespec,
1127                          sec, 64);
1128 BTRFS_SETGET_STACK_FUNCS(stack_timespec_nsec, struct btrfs_timespec,
1129                          nsec, 32);
1130
1131 /* struct btrfs_dev_extent */
1132 BTRFS_SETGET_FUNCS(dev_extent_chunk_tree, struct btrfs_dev_extent,
1133                    chunk_tree, 64);
1134 BTRFS_SETGET_FUNCS(dev_extent_chunk_objectid, struct btrfs_dev_extent,
1135                    chunk_objectid, 64);
1136 BTRFS_SETGET_FUNCS(dev_extent_chunk_offset, struct btrfs_dev_extent,
1137                    chunk_offset, 64);
1138 BTRFS_SETGET_FUNCS(dev_extent_length, struct btrfs_dev_extent, length, 64);
1139
1140 static inline u8 *btrfs_dev_extent_chunk_tree_uuid(struct btrfs_dev_extent *dev)
1141 {
1142         unsigned long ptr = offsetof(struct btrfs_dev_extent, chunk_tree_uuid);
1143         return (u8 *)((unsigned long)dev + ptr);
1144 }
1145
1146
1147 /* struct btrfs_extent_item */
1148 BTRFS_SETGET_FUNCS(extent_refs, struct btrfs_extent_item, refs, 64);
1149 BTRFS_SETGET_FUNCS(extent_generation, struct btrfs_extent_item,
1150                    generation, 64);
1151 BTRFS_SETGET_FUNCS(extent_flags, struct btrfs_extent_item, flags, 64);
1152
1153 BTRFS_SETGET_FUNCS(extent_refs_v0, struct btrfs_extent_item_v0, refs, 32);
1154
1155 BTRFS_SETGET_FUNCS(tree_block_level, struct btrfs_tree_block_info, level, 8);
1156
1157 static inline void btrfs_tree_block_key(struct extent_buffer *eb,
1158                                         struct btrfs_tree_block_info *item,
1159                                         struct btrfs_disk_key *key)
1160 {
1161         read_eb_member(eb, item, struct btrfs_tree_block_info, key, key);
1162 }
1163
1164 static inline void btrfs_set_tree_block_key(struct extent_buffer *eb,
1165                                             struct btrfs_tree_block_info *item,
1166                                             struct btrfs_disk_key *key)
1167 {
1168         write_eb_member(eb, item, struct btrfs_tree_block_info, key, key);
1169 }
1170
1171 BTRFS_SETGET_FUNCS(extent_data_ref_root, struct btrfs_extent_data_ref,
1172                    root, 64);
1173 BTRFS_SETGET_FUNCS(extent_data_ref_objectid, struct btrfs_extent_data_ref,
1174                    objectid, 64);
1175 BTRFS_SETGET_FUNCS(extent_data_ref_offset, struct btrfs_extent_data_ref,
1176                    offset, 64);
1177 BTRFS_SETGET_FUNCS(extent_data_ref_count, struct btrfs_extent_data_ref,
1178                    count, 32);
1179
1180 BTRFS_SETGET_FUNCS(shared_data_ref_count, struct btrfs_shared_data_ref,
1181                    count, 32);
1182
1183 BTRFS_SETGET_FUNCS(extent_inline_ref_type, struct btrfs_extent_inline_ref,
1184                    type, 8);
1185 BTRFS_SETGET_FUNCS(extent_inline_ref_offset, struct btrfs_extent_inline_ref,
1186                    offset, 64);
1187
1188 static inline u32 btrfs_extent_inline_ref_size(int type)
1189 {
1190         if (type == BTRFS_TREE_BLOCK_REF_KEY ||
1191             type == BTRFS_SHARED_BLOCK_REF_KEY)
1192                 return sizeof(struct btrfs_extent_inline_ref);
1193         if (type == BTRFS_SHARED_DATA_REF_KEY)
1194                 return sizeof(struct btrfs_shared_data_ref) +
1195                        sizeof(struct btrfs_extent_inline_ref);
1196         if (type == BTRFS_EXTENT_DATA_REF_KEY)
1197                 return sizeof(struct btrfs_extent_data_ref) +
1198                        offsetof(struct btrfs_extent_inline_ref, offset);
1199         BUG();
1200         return 0;
1201 }
1202
1203 BTRFS_SETGET_FUNCS(ref_root_v0, struct btrfs_extent_ref_v0, root, 64);
1204 BTRFS_SETGET_FUNCS(ref_generation_v0, struct btrfs_extent_ref_v0,
1205                    generation, 64);
1206 BTRFS_SETGET_FUNCS(ref_objectid_v0, struct btrfs_extent_ref_v0, objectid, 64);
1207 BTRFS_SETGET_FUNCS(ref_count_v0, struct btrfs_extent_ref_v0, count, 32);
1208
1209 /* struct btrfs_node */
1210 BTRFS_SETGET_FUNCS(key_blockptr, struct btrfs_key_ptr, blockptr, 64);
1211 BTRFS_SETGET_FUNCS(key_generation, struct btrfs_key_ptr, generation, 64);
1212
1213 static inline u64 btrfs_node_blockptr(struct extent_buffer *eb, int nr)
1214 {
1215         unsigned long ptr;
1216         ptr = offsetof(struct btrfs_node, ptrs) +
1217                 sizeof(struct btrfs_key_ptr) * nr;
1218         return btrfs_key_blockptr(eb, (struct btrfs_key_ptr *)ptr);
1219 }
1220
1221 static inline void btrfs_set_node_blockptr(struct extent_buffer *eb,
1222                                            int nr, u64 val)
1223 {
1224         unsigned long ptr;
1225         ptr = offsetof(struct btrfs_node, ptrs) +
1226                 sizeof(struct btrfs_key_ptr) * nr;
1227         btrfs_set_key_blockptr(eb, (struct btrfs_key_ptr *)ptr, val);
1228 }
1229
1230 static inline u64 btrfs_node_ptr_generation(struct extent_buffer *eb, int nr)
1231 {
1232         unsigned long ptr;
1233         ptr = offsetof(struct btrfs_node, ptrs) +
1234                 sizeof(struct btrfs_key_ptr) * nr;
1235         return btrfs_key_generation(eb, (struct btrfs_key_ptr *)ptr);
1236 }
1237
1238 static inline void btrfs_set_node_ptr_generation(struct extent_buffer *eb,
1239                                                  int nr, u64 val)
1240 {
1241         unsigned long ptr;
1242         ptr = offsetof(struct btrfs_node, ptrs) +
1243                 sizeof(struct btrfs_key_ptr) * nr;
1244         btrfs_set_key_generation(eb, (struct btrfs_key_ptr *)ptr, val);
1245 }
1246
1247 static inline unsigned long btrfs_node_key_ptr_offset(int nr)
1248 {
1249         return offsetof(struct btrfs_node, ptrs) +
1250                 sizeof(struct btrfs_key_ptr) * nr;
1251 }
1252
1253 static inline void btrfs_node_key(struct extent_buffer *eb,
1254                                   struct btrfs_disk_key *disk_key, int nr)
1255 {
1256         unsigned long ptr;
1257         ptr = btrfs_node_key_ptr_offset(nr);
1258         read_eb_member(eb, (struct btrfs_key_ptr *)ptr,
1259                        struct btrfs_key_ptr, key, disk_key);
1260 }
1261
1262 static inline void btrfs_set_node_key(struct extent_buffer *eb,
1263                                       struct btrfs_disk_key *disk_key, int nr)
1264 {
1265         unsigned long ptr;
1266         ptr = btrfs_node_key_ptr_offset(nr);
1267         write_eb_member(eb, (struct btrfs_key_ptr *)ptr,
1268                        struct btrfs_key_ptr, key, disk_key);
1269 }
1270
1271 /* struct btrfs_item */
1272 BTRFS_SETGET_FUNCS(item_offset, struct btrfs_item, offset, 32);
1273 BTRFS_SETGET_FUNCS(item_size, struct btrfs_item, size, 32);
1274
1275 static inline unsigned long btrfs_item_nr_offset(int nr)
1276 {
1277         return offsetof(struct btrfs_leaf, items) +
1278                 sizeof(struct btrfs_item) * nr;
1279 }
1280
1281 static inline struct btrfs_item *btrfs_item_nr(struct extent_buffer *eb,
1282                                                int nr)
1283 {
1284         return (struct btrfs_item *)btrfs_item_nr_offset(nr);
1285 }
1286
1287 static inline u32 btrfs_item_end(struct extent_buffer *eb,
1288                                  struct btrfs_item *item)
1289 {
1290         return btrfs_item_offset(eb, item) + btrfs_item_size(eb, item);
1291 }
1292
1293 static inline u32 btrfs_item_end_nr(struct extent_buffer *eb, int nr)
1294 {
1295         return btrfs_item_end(eb, btrfs_item_nr(eb, nr));
1296 }
1297
1298 static inline u32 btrfs_item_offset_nr(struct extent_buffer *eb, int nr)
1299 {
1300         return btrfs_item_offset(eb, btrfs_item_nr(eb, nr));
1301 }
1302
1303 static inline u32 btrfs_item_size_nr(struct extent_buffer *eb, int nr)
1304 {
1305         return btrfs_item_size(eb, btrfs_item_nr(eb, nr));
1306 }
1307
1308 static inline void btrfs_item_key(struct extent_buffer *eb,
1309                            struct btrfs_disk_key *disk_key, int nr)
1310 {
1311         struct btrfs_item *item = btrfs_item_nr(eb, nr);
1312         read_eb_member(eb, item, struct btrfs_item, key, disk_key);
1313 }
1314
1315 static inline void btrfs_set_item_key(struct extent_buffer *eb,
1316                                struct btrfs_disk_key *disk_key, int nr)
1317 {
1318         struct btrfs_item *item = btrfs_item_nr(eb, nr);
1319         write_eb_member(eb, item, struct btrfs_item, key, disk_key);
1320 }
1321
1322 BTRFS_SETGET_FUNCS(dir_log_end, struct btrfs_dir_log_item, end, 64);
1323
1324 /*
1325  * struct btrfs_root_ref
1326  */
1327 BTRFS_SETGET_FUNCS(root_ref_dirid, struct btrfs_root_ref, dirid, 64);
1328 BTRFS_SETGET_FUNCS(root_ref_sequence, struct btrfs_root_ref, sequence, 64);
1329 BTRFS_SETGET_FUNCS(root_ref_name_len, struct btrfs_root_ref, name_len, 16);
1330
1331 BTRFS_SETGET_STACK_FUNCS(stack_root_ref_dirid, struct btrfs_root_ref, dirid, 64);
1332 BTRFS_SETGET_STACK_FUNCS(stack_root_ref_sequence, struct btrfs_root_ref, sequence, 64);
1333 BTRFS_SETGET_STACK_FUNCS(stack_root_ref_name_len, struct btrfs_root_ref, name_len, 16);
1334
1335 /* struct btrfs_dir_item */
1336 BTRFS_SETGET_FUNCS(dir_data_len, struct btrfs_dir_item, data_len, 16);
1337 BTRFS_SETGET_FUNCS(dir_type, struct btrfs_dir_item, type, 8);
1338 BTRFS_SETGET_FUNCS(dir_name_len, struct btrfs_dir_item, name_len, 16);
1339 BTRFS_SETGET_FUNCS(dir_transid, struct btrfs_dir_item, transid, 64);
1340
1341 static inline void btrfs_dir_item_key(struct extent_buffer *eb,
1342                                       struct btrfs_dir_item *item,
1343                                       struct btrfs_disk_key *key)
1344 {
1345         read_eb_member(eb, item, struct btrfs_dir_item, location, key);
1346 }
1347
1348 static inline void btrfs_set_dir_item_key(struct extent_buffer *eb,
1349                                           struct btrfs_dir_item *item,
1350                                           struct btrfs_disk_key *key)
1351 {
1352         write_eb_member(eb, item, struct btrfs_dir_item, location, key);
1353 }
1354
1355 /* struct btrfs_disk_key */
1356 BTRFS_SETGET_STACK_FUNCS(disk_key_objectid, struct btrfs_disk_key,
1357                          objectid, 64);
1358 BTRFS_SETGET_STACK_FUNCS(disk_key_offset, struct btrfs_disk_key, offset, 64);
1359 BTRFS_SETGET_STACK_FUNCS(disk_key_type, struct btrfs_disk_key, type, 8);
1360
1361 static inline void btrfs_disk_key_to_cpu(struct btrfs_key *cpu,
1362                                          struct btrfs_disk_key *disk)
1363 {
1364         cpu->offset = le64_to_cpu(disk->offset);
1365         cpu->type = disk->type;
1366         cpu->objectid = le64_to_cpu(disk->objectid);
1367 }
1368
1369 static inline void btrfs_cpu_key_to_disk(struct btrfs_disk_key *disk,
1370                                          struct btrfs_key *cpu)
1371 {
1372         disk->offset = cpu_to_le64(cpu->offset);
1373         disk->type = cpu->type;
1374         disk->objectid = cpu_to_le64(cpu->objectid);
1375 }
1376
1377 static inline void btrfs_node_key_to_cpu(struct extent_buffer *eb,
1378                                   struct btrfs_key *key, int nr)
1379 {
1380         struct btrfs_disk_key disk_key;
1381         btrfs_node_key(eb, &disk_key, nr);
1382         btrfs_disk_key_to_cpu(key, &disk_key);
1383 }
1384
1385 static inline void btrfs_item_key_to_cpu(struct extent_buffer *eb,
1386                                   struct btrfs_key *key, int nr)
1387 {
1388         struct btrfs_disk_key disk_key;
1389         btrfs_item_key(eb, &disk_key, nr);
1390         btrfs_disk_key_to_cpu(key, &disk_key);
1391 }
1392
1393 static inline void btrfs_dir_item_key_to_cpu(struct extent_buffer *eb,
1394                                       struct btrfs_dir_item *item,
1395                                       struct btrfs_key *key)
1396 {
1397         struct btrfs_disk_key disk_key;
1398         btrfs_dir_item_key(eb, item, &disk_key);
1399         btrfs_disk_key_to_cpu(key, &disk_key);
1400 }
1401
1402
1403 static inline u8 btrfs_key_type(struct btrfs_key *key)
1404 {
1405         return key->type;
1406 }
1407
1408 static inline void btrfs_set_key_type(struct btrfs_key *key, u8 val)
1409 {
1410         key->type = val;
1411 }
1412
1413 /* struct btrfs_header */
1414 BTRFS_SETGET_HEADER_FUNCS(header_bytenr, struct btrfs_header, bytenr, 64);
1415 BTRFS_SETGET_HEADER_FUNCS(header_generation, struct btrfs_header,
1416                           generation, 64);
1417 BTRFS_SETGET_HEADER_FUNCS(header_owner, struct btrfs_header, owner, 64);
1418 BTRFS_SETGET_HEADER_FUNCS(header_nritems, struct btrfs_header, nritems, 32);
1419 BTRFS_SETGET_HEADER_FUNCS(header_flags, struct btrfs_header, flags, 64);
1420 BTRFS_SETGET_HEADER_FUNCS(header_level, struct btrfs_header, level, 8);
1421
1422 static inline int btrfs_header_flag(struct extent_buffer *eb, u64 flag)
1423 {
1424         return (btrfs_header_flags(eb) & flag) == flag;
1425 }
1426
1427 static inline int btrfs_set_header_flag(struct extent_buffer *eb, u64 flag)
1428 {
1429         u64 flags = btrfs_header_flags(eb);
1430         btrfs_set_header_flags(eb, flags | flag);
1431         return (flags & flag) == flag;
1432 }
1433
1434 static inline int btrfs_clear_header_flag(struct extent_buffer *eb, u64 flag)
1435 {
1436         u64 flags = btrfs_header_flags(eb);
1437         btrfs_set_header_flags(eb, flags & ~flag);
1438         return (flags & flag) == flag;
1439 }
1440
1441 static inline int btrfs_header_backref_rev(struct extent_buffer *eb)
1442 {
1443         u64 flags = btrfs_header_flags(eb);
1444         return flags >> BTRFS_BACKREF_REV_SHIFT;
1445 }
1446
1447 static inline void btrfs_set_header_backref_rev(struct extent_buffer *eb,
1448                                                 int rev)
1449 {
1450         u64 flags = btrfs_header_flags(eb);
1451         flags &= ~BTRFS_BACKREF_REV_MASK;
1452         flags |= (u64)rev << BTRFS_BACKREF_REV_SHIFT;
1453         btrfs_set_header_flags(eb, flags);
1454 }
1455
1456 static inline u8 *btrfs_header_fsid(struct extent_buffer *eb)
1457 {
1458         unsigned long ptr = offsetof(struct btrfs_header, fsid);
1459         return (u8 *)ptr;
1460 }
1461
1462 static inline u8 *btrfs_header_chunk_tree_uuid(struct extent_buffer *eb)
1463 {
1464         unsigned long ptr = offsetof(struct btrfs_header, chunk_tree_uuid);
1465         return (u8 *)ptr;
1466 }
1467
1468 static inline u8 *btrfs_super_fsid(struct extent_buffer *eb)
1469 {
1470         unsigned long ptr = offsetof(struct btrfs_super_block, fsid);
1471         return (u8 *)ptr;
1472 }
1473
1474 static inline u8 *btrfs_header_csum(struct extent_buffer *eb)
1475 {
1476         unsigned long ptr = offsetof(struct btrfs_header, csum);
1477         return (u8 *)ptr;
1478 }
1479
1480 static inline struct btrfs_node *btrfs_buffer_node(struct extent_buffer *eb)
1481 {
1482         return NULL;
1483 }
1484
1485 static inline struct btrfs_leaf *btrfs_buffer_leaf(struct extent_buffer *eb)
1486 {
1487         return NULL;
1488 }
1489
1490 static inline struct btrfs_header *btrfs_buffer_header(struct extent_buffer *eb)
1491 {
1492         return NULL;
1493 }
1494
1495 static inline int btrfs_is_leaf(struct extent_buffer *eb)
1496 {
1497         return (btrfs_header_level(eb) == 0);
1498 }
1499
1500 /* struct btrfs_root_item */
1501 BTRFS_SETGET_FUNCS(disk_root_generation, struct btrfs_root_item,
1502                    generation, 64);
1503 BTRFS_SETGET_FUNCS(disk_root_refs, struct btrfs_root_item, refs, 32);
1504 BTRFS_SETGET_FUNCS(disk_root_bytenr, struct btrfs_root_item, bytenr, 64);
1505 BTRFS_SETGET_FUNCS(disk_root_level, struct btrfs_root_item, level, 8);
1506
1507 BTRFS_SETGET_STACK_FUNCS(root_generation, struct btrfs_root_item,
1508                          generation, 64);
1509 BTRFS_SETGET_STACK_FUNCS(root_bytenr, struct btrfs_root_item, bytenr, 64);
1510 BTRFS_SETGET_STACK_FUNCS(root_level, struct btrfs_root_item, level, 8);
1511 BTRFS_SETGET_STACK_FUNCS(root_dirid, struct btrfs_root_item, root_dirid, 64);
1512 BTRFS_SETGET_STACK_FUNCS(root_refs, struct btrfs_root_item, refs, 32);
1513 BTRFS_SETGET_STACK_FUNCS(root_flags, struct btrfs_root_item, flags, 64);
1514 BTRFS_SETGET_STACK_FUNCS(root_used, struct btrfs_root_item, bytes_used, 64);
1515 BTRFS_SETGET_STACK_FUNCS(root_limit, struct btrfs_root_item, byte_limit, 64);
1516 BTRFS_SETGET_STACK_FUNCS(root_last_snapshot, struct btrfs_root_item,
1517                          last_snapshot, 64);
1518
1519
1520 /* struct btrfs_super_block */
1521
1522 BTRFS_SETGET_STACK_FUNCS(super_bytenr, struct btrfs_super_block, bytenr, 64);
1523 BTRFS_SETGET_STACK_FUNCS(super_flags, struct btrfs_super_block, flags, 64);
1524 BTRFS_SETGET_STACK_FUNCS(super_generation, struct btrfs_super_block,
1525                          generation, 64);
1526 BTRFS_SETGET_STACK_FUNCS(super_root, struct btrfs_super_block, root, 64);
1527 BTRFS_SETGET_STACK_FUNCS(super_sys_array_size,
1528                          struct btrfs_super_block, sys_chunk_array_size, 32);
1529 BTRFS_SETGET_STACK_FUNCS(super_chunk_root_generation,
1530                          struct btrfs_super_block, chunk_root_generation, 64);
1531 BTRFS_SETGET_STACK_FUNCS(super_root_level, struct btrfs_super_block,
1532                          root_level, 8);
1533 BTRFS_SETGET_STACK_FUNCS(super_chunk_root, struct btrfs_super_block,
1534                          chunk_root, 64);
1535 BTRFS_SETGET_STACK_FUNCS(super_chunk_root_level, struct btrfs_super_block,
1536                          chunk_root_level, 8);
1537 BTRFS_SETGET_STACK_FUNCS(super_log_root, struct btrfs_super_block,
1538                          log_root, 64);
1539 BTRFS_SETGET_STACK_FUNCS(super_log_root_transid, struct btrfs_super_block,
1540                          log_root_transid, 64);
1541 BTRFS_SETGET_STACK_FUNCS(super_log_root_level, struct btrfs_super_block,
1542                          log_root_level, 8);
1543 BTRFS_SETGET_STACK_FUNCS(super_total_bytes, struct btrfs_super_block,
1544                          total_bytes, 64);
1545 BTRFS_SETGET_STACK_FUNCS(super_bytes_used, struct btrfs_super_block,
1546                          bytes_used, 64);
1547 BTRFS_SETGET_STACK_FUNCS(super_sectorsize, struct btrfs_super_block,
1548                          sectorsize, 32);
1549 BTRFS_SETGET_STACK_FUNCS(super_nodesize, struct btrfs_super_block,
1550                          nodesize, 32);
1551 BTRFS_SETGET_STACK_FUNCS(super_leafsize, struct btrfs_super_block,
1552                          leafsize, 32);
1553 BTRFS_SETGET_STACK_FUNCS(super_stripesize, struct btrfs_super_block,
1554                          stripesize, 32);
1555 BTRFS_SETGET_STACK_FUNCS(super_root_dir, struct btrfs_super_block,
1556                          root_dir_objectid, 64);
1557 BTRFS_SETGET_STACK_FUNCS(super_num_devices, struct btrfs_super_block,
1558                          num_devices, 64);
1559 BTRFS_SETGET_STACK_FUNCS(super_compat_flags, struct btrfs_super_block,
1560                          compat_flags, 64);
1561 BTRFS_SETGET_STACK_FUNCS(super_compat_ro_flags, struct btrfs_super_block,
1562                          compat_flags, 64);
1563 BTRFS_SETGET_STACK_FUNCS(super_incompat_flags, struct btrfs_super_block,
1564                          incompat_flags, 64);
1565 BTRFS_SETGET_STACK_FUNCS(super_csum_type, struct btrfs_super_block,
1566                          csum_type, 16);
1567
1568 static inline int btrfs_super_csum_size(struct btrfs_super_block *s)
1569 {
1570         int t = btrfs_super_csum_type(s);
1571         BUG_ON(t >= ARRAY_SIZE(btrfs_csum_sizes));
1572         return btrfs_csum_sizes[t];
1573 }
1574
1575 static inline unsigned long btrfs_leaf_data(struct extent_buffer *l)
1576 {
1577         return offsetof(struct btrfs_leaf, items);
1578 }
1579
1580 /* struct btrfs_file_extent_item */
1581 BTRFS_SETGET_FUNCS(file_extent_type, struct btrfs_file_extent_item, type, 8);
1582 BTRFS_SETGET_STACK_FUNCS(stack_file_extent_type, struct btrfs_file_extent_item, type, 8);
1583
1584 static inline unsigned long btrfs_file_extent_inline_start(struct
1585                                                    btrfs_file_extent_item *e)
1586 {
1587         unsigned long offset = (unsigned long)e;
1588         offset += offsetof(struct btrfs_file_extent_item, disk_bytenr);
1589         return offset;
1590 }
1591
1592 static inline u32 btrfs_file_extent_calc_inline_size(u32 datasize)
1593 {
1594         return offsetof(struct btrfs_file_extent_item, disk_bytenr) + datasize;
1595 }
1596
1597 BTRFS_SETGET_FUNCS(file_extent_disk_bytenr, struct btrfs_file_extent_item,
1598                    disk_bytenr, 64);
1599 BTRFS_SETGET_STACK_FUNCS(stack_file_extent_disk_bytenr, struct btrfs_file_extent_item,
1600                    disk_bytenr, 64);
1601 BTRFS_SETGET_FUNCS(file_extent_generation, struct btrfs_file_extent_item,
1602                    generation, 64);
1603 BTRFS_SETGET_STACK_FUNCS(stack_file_extent_generation, struct btrfs_file_extent_item,
1604                    generation, 64);
1605 BTRFS_SETGET_FUNCS(file_extent_disk_num_bytes, struct btrfs_file_extent_item,
1606                    disk_num_bytes, 64);
1607 BTRFS_SETGET_FUNCS(file_extent_offset, struct btrfs_file_extent_item,
1608                   offset, 64);
1609 BTRFS_SETGET_STACK_FUNCS(stack_file_extent_offset, struct btrfs_file_extent_item,
1610                   offset, 64);
1611 BTRFS_SETGET_FUNCS(file_extent_num_bytes, struct btrfs_file_extent_item,
1612                    num_bytes, 64);
1613 BTRFS_SETGET_STACK_FUNCS(stack_file_extent_num_bytes, struct btrfs_file_extent_item,
1614                    num_bytes, 64);
1615 BTRFS_SETGET_FUNCS(file_extent_ram_bytes, struct btrfs_file_extent_item,
1616                    ram_bytes, 64);
1617 BTRFS_SETGET_STACK_FUNCS(stack_file_extent_ram_bytes, struct btrfs_file_extent_item,
1618                    ram_bytes, 64);
1619 BTRFS_SETGET_FUNCS(file_extent_compression, struct btrfs_file_extent_item,
1620                    compression, 8);
1621 BTRFS_SETGET_STACK_FUNCS(stack_file_extent_compression, struct btrfs_file_extent_item,
1622                    compression, 8);
1623 BTRFS_SETGET_FUNCS(file_extent_encryption, struct btrfs_file_extent_item,
1624                    encryption, 8);
1625 BTRFS_SETGET_FUNCS(file_extent_other_encoding, struct btrfs_file_extent_item,
1626                    other_encoding, 16);
1627
1628 /* this returns the number of file bytes represented by the inline item.
1629  * If an item is compressed, this is the uncompressed size
1630  */
1631 static inline u32 btrfs_file_extent_inline_len(struct extent_buffer *eb,
1632                                         struct btrfs_file_extent_item *e)
1633 {
1634        return btrfs_file_extent_ram_bytes(eb, e);
1635 }
1636
1637 /*
1638  * this returns the number of bytes used by the item on disk, minus the
1639  * size of any extent headers.  If a file is compressed on disk, this is
1640  * the compressed size
1641  */
1642 static inline u32 btrfs_file_extent_inline_item_len(struct extent_buffer *eb,
1643                                                     struct btrfs_item *e)
1644 {
1645        unsigned long offset;
1646        offset = offsetof(struct btrfs_file_extent_item, disk_bytenr);
1647        return btrfs_item_size(eb, e) - offset;
1648 }
1649
1650 static inline u32 btrfs_level_size(struct btrfs_root *root, int level) {
1651         if (level == 0)
1652                 return root->leafsize;
1653         return root->nodesize;
1654 }
1655
1656 /* helper function to cast into the data area of the leaf. */
1657 #define btrfs_item_ptr(leaf, slot, type) \
1658         ((type *)(btrfs_leaf_data(leaf) + \
1659         btrfs_item_offset_nr(leaf, slot)))
1660
1661 #define btrfs_item_ptr_offset(leaf, slot) \
1662         ((unsigned long)(btrfs_leaf_data(leaf) + \
1663         btrfs_item_offset_nr(leaf, slot)))
1664
1665 /* extent-tree.c */
1666 int btrfs_extent_post_op(struct btrfs_trans_handle *trans,
1667                          struct btrfs_root *root);
1668 int btrfs_copy_pinned(struct btrfs_root *root, struct extent_io_tree *copy);
1669 struct btrfs_block_group_cache *btrfs_lookup_block_group(struct
1670                                                          btrfs_fs_info *info,
1671                                                          u64 bytenr);
1672 struct btrfs_block_group_cache *btrfs_find_block_group(struct btrfs_root *root,
1673                                                  struct btrfs_block_group_cache
1674                                                  *hint, u64 search_start,
1675                                                  int data, int owner);
1676 struct extent_buffer *btrfs_alloc_free_block(struct btrfs_trans_handle *trans,
1677                                         struct btrfs_root *root,
1678                                         u32 blocksize, u64 root_objectid,
1679                                         struct btrfs_disk_key *key, int level,
1680                                         u64 hint, u64 empty_size);
1681 int btrfs_alloc_extent(struct btrfs_trans_handle *trans,
1682                        struct btrfs_root *root,
1683                        u64 num_bytes, u64 parent,
1684                        u64 root_objectid, u64 ref_generation,
1685                        u64 owner, u64 empty_size, u64 hint_byte,
1686                        u64 search_end, struct btrfs_key *ins, int data);
1687 int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans,
1688                              struct btrfs_root *root, u64 bytenr,
1689                              u64 num_bytes, u64 *refs, u64 *flags);
1690 int btrfs_set_block_flags(struct btrfs_trans_handle *trans,
1691                           struct btrfs_root *root,
1692                           u64 bytenr, u64 num_bytes, u64 flags);
1693 int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
1694                   struct extent_buffer *buf, int record_parent);
1695 int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
1696                   struct extent_buffer *buf, int record_parent);
1697 int btrfs_free_extent(struct btrfs_trans_handle *trans,
1698                       struct btrfs_root *root,
1699                       u64 bytenr, u64 num_bytes, u64 parent,
1700                       u64 root_objectid, u64 owner, u64 offset);
1701 int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans,
1702                                struct btrfs_root *root,
1703                                struct extent_io_tree *unpin);
1704 int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
1705                                 struct btrfs_root *root,
1706                                 u64 bytenr, u64 num_bytes, u64 parent,
1707                                 u64 root_objectid, u64 ref_generation,
1708                                 u64 owner_objectid);
1709 int btrfs_update_extent_ref(struct btrfs_trans_handle *trans,
1710                             struct btrfs_root *root, u64 bytenr,
1711                             u64 orig_parent, u64 parent,
1712                             u64 root_objectid, u64 ref_generation,
1713                             u64 owner_objectid);
1714 int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans,
1715                                     struct btrfs_root *root);
1716 int btrfs_free_block_groups(struct btrfs_fs_info *info);
1717 int btrfs_read_block_groups(struct btrfs_root *root);
1718 int btrfs_make_block_group(struct btrfs_trans_handle *trans,
1719                            struct btrfs_root *root, u64 bytes_used,
1720                            u64 type, u64 chunk_objectid, u64 chunk_offset,
1721                            u64 size);
1722 int btrfs_make_block_groups(struct btrfs_trans_handle *trans,
1723                             struct btrfs_root *root);
1724 int btrfs_update_block_group(struct btrfs_trans_handle *trans,
1725                              struct btrfs_root *root, u64 bytenr, u64 num,
1726                              int alloc, int mark_free);
1727 /* ctree.c */
1728 int btrfs_previous_item(struct btrfs_root *root,
1729                         struct btrfs_path *path, u64 min_objectid,
1730                         int type);
1731 int btrfs_comp_keys(struct btrfs_disk_key *disk, struct btrfs_key *k2);
1732 int btrfs_cow_block(struct btrfs_trans_handle *trans,
1733                     struct btrfs_root *root, struct extent_buffer *buf,
1734                     struct extent_buffer *parent, int parent_slot,
1735                     struct extent_buffer **cow_ret);
1736 int __btrfs_cow_block(struct btrfs_trans_handle *trans,
1737                              struct btrfs_root *root,
1738                              struct extent_buffer *buf,
1739                              struct extent_buffer *parent, int parent_slot,
1740                              struct extent_buffer **cow_ret,
1741                              u64 search_start, u64 empty_size);
1742 int btrfs_copy_root(struct btrfs_trans_handle *trans,
1743                       struct btrfs_root *root,
1744                       struct extent_buffer *buf,
1745                       struct extent_buffer **cow_ret, u64 new_root_objectid);
1746 int btrfs_extend_item(struct btrfs_trans_handle *trans, struct btrfs_root
1747                       *root, struct btrfs_path *path, u32 data_size);
1748 int btrfs_truncate_item(struct btrfs_trans_handle *trans,
1749                         struct btrfs_root *root,
1750                         struct btrfs_path *path,
1751                         u32 new_size, int from_end);
1752 int btrfs_split_item(struct btrfs_trans_handle *trans,
1753                      struct btrfs_root *root,
1754                      struct btrfs_path *path,
1755                      struct btrfs_key *new_key,
1756                      unsigned long split_offset);
1757 int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root
1758                       *root, struct btrfs_key *key, struct btrfs_path *p, int
1759                       ins_len, int cow);
1760 int btrfs_realloc_node(struct btrfs_trans_handle *trans,
1761                        struct btrfs_root *root, struct extent_buffer *parent,
1762                        int start_slot, int cache_only, u64 *last_ret,
1763                        struct btrfs_key *progress);
1764 void btrfs_release_path(struct btrfs_root *root, struct btrfs_path *p);
1765 struct btrfs_path *btrfs_alloc_path(void);
1766 void btrfs_free_path(struct btrfs_path *p);
1767 void btrfs_init_path(struct btrfs_path *p);
1768 int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root,
1769                    struct btrfs_path *path, int slot, int nr);
1770
1771 static inline int btrfs_del_item(struct btrfs_trans_handle *trans,
1772                                  struct btrfs_root *root,
1773                                  struct btrfs_path *path)
1774 {
1775         return btrfs_del_items(trans, root, path, path->slots[0], 1);
1776 }
1777
1778 int btrfs_insert_item(struct btrfs_trans_handle *trans, struct btrfs_root
1779                       *root, struct btrfs_key *key, void *data, u32 data_size);
1780 int btrfs_insert_empty_items(struct btrfs_trans_handle *trans,
1781                              struct btrfs_root *root,
1782                              struct btrfs_path *path,
1783                              struct btrfs_key *cpu_key, u32 *data_size, int nr);
1784
1785 static inline int btrfs_insert_empty_item(struct btrfs_trans_handle *trans,
1786                                           struct btrfs_root *root,
1787                                           struct btrfs_path *path,
1788                                           struct btrfs_key *key,
1789                                           u32 data_size)
1790 {
1791         return btrfs_insert_empty_items(trans, root, path, key, &data_size, 1);
1792 }
1793
1794 int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path);
1795 int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path);
1796 int btrfs_leaf_free_space(struct btrfs_root *root, struct extent_buffer *leaf);
1797 int btrfs_drop_snapshot(struct btrfs_trans_handle *trans, struct btrfs_root
1798                         *root);
1799 int btrfs_set_item_key_safe(struct btrfs_trans_handle *trans,
1800                             struct btrfs_root *root, struct btrfs_path *path,
1801                             struct btrfs_key *new_key);
1802
1803 /* root-item.c */
1804 int btrfs_add_root_ref(struct btrfs_trans_handle *trans,
1805                        struct btrfs_root *tree_root,
1806                        u64 root_id, u8 type, u64 ref_id,
1807                        u64 dirid, u64 sequence,
1808                        const char *name, int name_len);
1809 int btrfs_del_root(struct btrfs_trans_handle *trans, struct btrfs_root *root,
1810                    struct btrfs_key *key);
1811 int btrfs_insert_root(struct btrfs_trans_handle *trans, struct btrfs_root
1812                       *root, struct btrfs_key *key, struct btrfs_root_item
1813                       *item);
1814 int btrfs_update_root(struct btrfs_trans_handle *trans, struct btrfs_root
1815                       *root, struct btrfs_key *key, struct btrfs_root_item
1816                       *item);
1817 int btrfs_find_last_root(struct btrfs_root *root, u64 objectid, struct
1818                          btrfs_root_item *item, struct btrfs_key *key);
1819 int btrfs_find_dead_roots(struct btrfs_root *root, u64 objectid,
1820                           struct btrfs_root *latest_root);
1821 /* dir-item.c */
1822 int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, struct btrfs_root
1823                           *root, const char *name, int name_len, u64 dir,
1824                           struct btrfs_key *location, u8 type, u64 index);
1825 struct btrfs_dir_item *btrfs_lookup_dir_item(struct btrfs_trans_handle *trans,
1826                                              struct btrfs_root *root,
1827                                              struct btrfs_path *path, u64 dir,
1828                                              const char *name, int name_len,
1829                                              int mod);
1830 struct btrfs_dir_item *
1831 btrfs_lookup_dir_index_item(struct btrfs_trans_handle *trans,
1832                             struct btrfs_root *root,
1833                             struct btrfs_path *path, u64 dir,
1834                             u64 objectid, const char *name, int name_len,
1835                             int mod);
1836 struct btrfs_dir_item *btrfs_match_dir_item_name(struct btrfs_root *root,
1837                               struct btrfs_path *path,
1838                               const char *name, int name_len);
1839 int btrfs_delete_one_dir_name(struct btrfs_trans_handle *trans,
1840                               struct btrfs_root *root,
1841                               struct btrfs_path *path,
1842                               struct btrfs_dir_item *di);
1843 int btrfs_insert_xattr_item(struct btrfs_trans_handle *trans,
1844                             struct btrfs_root *root, const char *name,
1845                             u16 name_len, const void *data, u16 data_len,
1846                             u64 dir);
1847 struct btrfs_dir_item *btrfs_lookup_xattr(struct btrfs_trans_handle *trans,
1848                                           struct btrfs_root *root,
1849                                           struct btrfs_path *path, u64 dir,
1850                                           const char *name, u16 name_len,
1851                                           int mod);
1852 /* inode-map.c */
1853 int btrfs_find_free_objectid(struct btrfs_trans_handle *trans,
1854                              struct btrfs_root *fs_root,
1855                              u64 dirid, u64 *objectid);
1856 int btrfs_find_highest_inode(struct btrfs_root *fs_root, u64 *objectid);
1857
1858 /* inode-item.c */
1859 int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans,
1860                            struct btrfs_root *root,
1861                            const char *name, int name_len,
1862                            u64 inode_objectid, u64 ref_objectid, u64 index);
1863 int btrfs_del_inode_ref(struct btrfs_trans_handle *trans,
1864                            struct btrfs_root *root,
1865                            const char *name, int name_len,
1866                            u64 inode_objectid, u64 ref_objectid);
1867 int btrfs_insert_empty_inode(struct btrfs_trans_handle *trans,
1868                              struct btrfs_root *root,
1869                              struct btrfs_path *path, u64 objectid);
1870 int btrfs_insert_inode(struct btrfs_trans_handle *trans, struct btrfs_root
1871                        *root, u64 objectid, struct btrfs_inode_item
1872                        *inode_item);
1873 int btrfs_lookup_inode(struct btrfs_trans_handle *trans, struct btrfs_root
1874                        *root, struct btrfs_path *path,
1875                        struct btrfs_key *location, int mod);
1876
1877 /* file-item.c */
1878 int btrfs_del_csums(struct btrfs_trans_handle *trans,
1879                     struct btrfs_root *root, u64 bytenr, u64 len);
1880 int btrfs_insert_file_extent(struct btrfs_trans_handle *trans,
1881                              struct btrfs_root *root,
1882                              u64 objectid, u64 pos, u64 offset,
1883                              u64 disk_num_bytes,
1884                              u64 num_bytes);
1885 int btrfs_insert_inline_extent(struct btrfs_trans_handle *trans,
1886                                 struct btrfs_root *root, u64 objectid,
1887                                 u64 offset, char *buffer, size_t size);
1888 int btrfs_lookup_file_extent(struct btrfs_trans_handle *trans,
1889                              struct btrfs_root *root,
1890                              struct btrfs_path *path, u64 objectid,
1891                              u64 bytenr, int mod);
1892 int btrfs_csum_file_block(struct btrfs_trans_handle *trans,
1893                           struct btrfs_root *root, u64 alloc_end,
1894                           u64 bytenr, char *data, size_t len);
1895 struct btrfs_csum_item *btrfs_lookup_csum(struct btrfs_trans_handle *trans,
1896                                           struct btrfs_root *root,
1897                                           struct btrfs_path *path,
1898                                           u64 bytenr, int cow);
1899 int btrfs_csum_truncate(struct btrfs_trans_handle *trans,
1900                         struct btrfs_root *root, struct btrfs_path *path,
1901                         u64 isize);
1902 #endif