aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/btrfs_inode.h
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/btrfs_inode.h')
-rw-r--r--fs/btrfs/btrfs_inode.h54
1 files changed, 51 insertions, 3 deletions
diff --git a/fs/btrfs/btrfs_inode.h b/fs/btrfs/btrfs_inode.h
index 0577fda2168a..0b2e623cf421 100644
--- a/fs/btrfs/btrfs_inode.h
+++ b/fs/btrfs/btrfs_inode.h
@@ -25,27 +25,58 @@
25 25
26/* in memory btrfs inode */ 26/* in memory btrfs inode */
27struct btrfs_inode { 27struct btrfs_inode {
28 /* which subvolume this inode belongs to */
28 struct btrfs_root *root; 29 struct btrfs_root *root;
30
31 /* the block group preferred for allocations. This pointer is buggy
32 * and needs to be replaced with a bytenr instead
33 */
29 struct btrfs_block_group_cache *block_group; 34 struct btrfs_block_group_cache *block_group;
35
36 /* key used to find this inode on disk. This is used by the code
37 * to read in roots of subvolumes
38 */
30 struct btrfs_key location; 39 struct btrfs_key location;
40
41 /* the extent_tree has caches of all the extent mappings to disk */
31 struct extent_map_tree extent_tree; 42 struct extent_map_tree extent_tree;
43
44 /* the io_tree does range state (DIRTY, LOCKED etc) */
32 struct extent_io_tree io_tree; 45 struct extent_io_tree io_tree;
46
47 /* special utility tree used to record which mirrors have already been
48 * tried when checksums fail for a given block
49 */
33 struct extent_io_tree io_failure_tree; 50 struct extent_io_tree io_failure_tree;
51
52 /* held while inserting checksums to avoid races */
34 struct mutex csum_mutex; 53 struct mutex csum_mutex;
54
55 /* held while inesrting or deleting extents from files */
35 struct mutex extent_mutex; 56 struct mutex extent_mutex;
57
58 /* held while logging the inode in tree-log.c */
36 struct mutex log_mutex; 59 struct mutex log_mutex;
37 struct inode vfs_inode; 60
61 /* used to order data wrt metadata */
38 struct btrfs_ordered_inode_tree ordered_tree; 62 struct btrfs_ordered_inode_tree ordered_tree;
39 63
64 /* standard acl pointers */
40 struct posix_acl *i_acl; 65 struct posix_acl *i_acl;
41 struct posix_acl *i_default_acl; 66 struct posix_acl *i_default_acl;
42 67
43 /* for keeping track of orphaned inodes */ 68 /* for keeping track of orphaned inodes */
44 struct list_head i_orphan; 69 struct list_head i_orphan;
45 70
71 /* list of all the delalloc inodes in the FS. There are times we need
72 * to write all the delalloc pages to disk, and this list is used
73 * to walk them all.
74 */
46 struct list_head delalloc_inodes; 75 struct list_head delalloc_inodes;
47 76
48 /* full 64 bit generation number */ 77 /* full 64 bit generation number, struct vfs_inode doesn't have a big
78 * enough field for this.
79 */
49 u64 generation; 80 u64 generation;
50 81
51 /* 82 /*
@@ -57,10 +88,25 @@ struct btrfs_inode {
57 */ 88 */
58 u64 logged_trans; 89 u64 logged_trans;
59 90
60 /* trans that last made a change that should be fully fsync'd */ 91 /*
92 * trans that last made a change that should be fully fsync'd. This
93 * gets reset to zero each time the inode is logged
94 */
61 u64 log_dirty_trans; 95 u64 log_dirty_trans;
96
97 /* total number of bytes pending delalloc, used by stat to calc the
98 * real block usage of the file
99 */
62 u64 delalloc_bytes; 100 u64 delalloc_bytes;
101
102 /*
103 * the size of the file stored in the metadata on disk. data=ordered
104 * means the in-memory i_size might be larger than the size on disk
105 * because not all the blocks are written yet.
106 */
63 u64 disk_i_size; 107 u64 disk_i_size;
108
109 /* flags field from the on disk inode */
64 u32 flags; 110 u32 flags;
65 111
66 /* 112 /*
@@ -68,6 +114,8 @@ struct btrfs_inode {
68 * number for new files that are created 114 * number for new files that are created
69 */ 115 */
70 u64 index_cnt; 116 u64 index_cnt;
117
118 struct inode vfs_inode;
71}; 119};
72 120
73static inline struct btrfs_inode *BTRFS_I(struct inode *inode) 121static inline struct btrfs_inode *BTRFS_I(struct inode *inode)