diff options
Diffstat (limited to 'fs/btrfs/ordered-data.h')
-rw-r--r-- | fs/btrfs/ordered-data.h | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/fs/btrfs/ordered-data.h b/fs/btrfs/ordered-data.h index 1fe1282ef47c..ff1f69aa1883 100644 --- a/fs/btrfs/ordered-data.h +++ b/fs/btrfs/ordered-data.h | |||
@@ -21,7 +21,7 @@ | |||
21 | 21 | ||
22 | /* one of these per inode */ | 22 | /* one of these per inode */ |
23 | struct btrfs_ordered_inode_tree { | 23 | struct btrfs_ordered_inode_tree { |
24 | struct mutex mutex; | 24 | spinlock_t lock; |
25 | struct rb_root tree; | 25 | struct rb_root tree; |
26 | struct rb_node *last; | 26 | struct rb_node *last; |
27 | }; | 27 | }; |
@@ -68,10 +68,12 @@ struct btrfs_ordered_sum { | |||
68 | 68 | ||
69 | #define BTRFS_ORDERED_NOCOW 2 /* set when we want to write in place */ | 69 | #define BTRFS_ORDERED_NOCOW 2 /* set when we want to write in place */ |
70 | 70 | ||
71 | #define BTRFS_ORDERED_COMPRESSED 3 /* writing a compressed extent */ | 71 | #define BTRFS_ORDERED_COMPRESSED 3 /* writing a zlib compressed extent */ |
72 | 72 | ||
73 | #define BTRFS_ORDERED_PREALLOC 4 /* set when writing to prealloced extent */ | 73 | #define BTRFS_ORDERED_PREALLOC 4 /* set when writing to prealloced extent */ |
74 | 74 | ||
75 | #define BTRFS_ORDERED_DIRECT 5 /* set when we're doing DIO with this extent */ | ||
76 | |||
75 | struct btrfs_ordered_extent { | 77 | struct btrfs_ordered_extent { |
76 | /* logical offset in the file */ | 78 | /* logical offset in the file */ |
77 | u64 file_offset; | 79 | u64 file_offset; |
@@ -91,6 +93,9 @@ struct btrfs_ordered_extent { | |||
91 | /* flags (described above) */ | 93 | /* flags (described above) */ |
92 | unsigned long flags; | 94 | unsigned long flags; |
93 | 95 | ||
96 | /* compression algorithm */ | ||
97 | int compress_type; | ||
98 | |||
94 | /* reference count */ | 99 | /* reference count */ |
95 | atomic_t refs; | 100 | atomic_t refs; |
96 | 101 | ||
@@ -128,8 +133,8 @@ static inline int btrfs_ordered_sum_size(struct btrfs_root *root, | |||
128 | static inline void | 133 | static inline void |
129 | btrfs_ordered_inode_tree_init(struct btrfs_ordered_inode_tree *t) | 134 | btrfs_ordered_inode_tree_init(struct btrfs_ordered_inode_tree *t) |
130 | { | 135 | { |
131 | mutex_init(&t->mutex); | 136 | spin_lock_init(&t->lock); |
132 | t->tree.rb_node = NULL; | 137 | t->tree = RB_ROOT; |
133 | t->last = NULL; | 138 | t->last = NULL; |
134 | } | 139 | } |
135 | 140 | ||
@@ -137,9 +142,18 @@ int btrfs_put_ordered_extent(struct btrfs_ordered_extent *entry); | |||
137 | int btrfs_remove_ordered_extent(struct inode *inode, | 142 | int btrfs_remove_ordered_extent(struct inode *inode, |
138 | struct btrfs_ordered_extent *entry); | 143 | struct btrfs_ordered_extent *entry); |
139 | int btrfs_dec_test_ordered_pending(struct inode *inode, | 144 | int btrfs_dec_test_ordered_pending(struct inode *inode, |
140 | u64 file_offset, u64 io_size); | 145 | struct btrfs_ordered_extent **cached, |
146 | u64 file_offset, u64 io_size); | ||
147 | int btrfs_dec_test_first_ordered_pending(struct inode *inode, | ||
148 | struct btrfs_ordered_extent **cached, | ||
149 | u64 *file_offset, u64 io_size); | ||
141 | int btrfs_add_ordered_extent(struct inode *inode, u64 file_offset, | 150 | int btrfs_add_ordered_extent(struct inode *inode, u64 file_offset, |
142 | u64 start, u64 len, u64 disk_len, int tyep); | 151 | u64 start, u64 len, u64 disk_len, int type); |
152 | int btrfs_add_ordered_extent_dio(struct inode *inode, u64 file_offset, | ||
153 | u64 start, u64 len, u64 disk_len, int type); | ||
154 | int btrfs_add_ordered_extent_compress(struct inode *inode, u64 file_offset, | ||
155 | u64 start, u64 len, u64 disk_len, | ||
156 | int type, int compress_type); | ||
143 | int btrfs_add_ordered_sum(struct inode *inode, | 157 | int btrfs_add_ordered_sum(struct inode *inode, |
144 | struct btrfs_ordered_extent *entry, | 158 | struct btrfs_ordered_extent *entry, |
145 | struct btrfs_ordered_sum *sum); | 159 | struct btrfs_ordered_sum *sum); |
@@ -150,6 +164,9 @@ void btrfs_start_ordered_extent(struct inode *inode, | |||
150 | int btrfs_wait_ordered_range(struct inode *inode, u64 start, u64 len); | 164 | int btrfs_wait_ordered_range(struct inode *inode, u64 start, u64 len); |
151 | struct btrfs_ordered_extent * | 165 | struct btrfs_ordered_extent * |
152 | btrfs_lookup_first_ordered_extent(struct inode * inode, u64 file_offset); | 166 | btrfs_lookup_first_ordered_extent(struct inode * inode, u64 file_offset); |
167 | struct btrfs_ordered_extent *btrfs_lookup_ordered_range(struct inode *inode, | ||
168 | u64 file_offset, | ||
169 | u64 len); | ||
153 | int btrfs_ordered_update_i_size(struct inode *inode, u64 offset, | 170 | int btrfs_ordered_update_i_size(struct inode *inode, u64 offset, |
154 | struct btrfs_ordered_extent *ordered); | 171 | struct btrfs_ordered_extent *ordered); |
155 | int btrfs_find_ordered_sum(struct inode *inode, u64 offset, u64 disk_bytenr, u32 *sum); | 172 | int btrfs_find_ordered_sum(struct inode *inode, u64 offset, u64 disk_bytenr, u32 *sum); |