diff options
Diffstat (limited to 'fs/btrfs/file-item.c')
-rw-r--r-- | fs/btrfs/file-item.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c index 1ad08e4e4a15..94aa53b38721 100644 --- a/fs/btrfs/file-item.c +++ b/fs/btrfs/file-item.c | |||
@@ -133,7 +133,6 @@ fail: | |||
133 | return ERR_PTR(ret); | 133 | return ERR_PTR(ret); |
134 | } | 134 | } |
135 | 135 | ||
136 | |||
137 | int btrfs_lookup_file_extent(struct btrfs_trans_handle *trans, | 136 | int btrfs_lookup_file_extent(struct btrfs_trans_handle *trans, |
138 | struct btrfs_root *root, | 137 | struct btrfs_root *root, |
139 | struct btrfs_path *path, u64 objectid, | 138 | struct btrfs_path *path, u64 objectid, |
@@ -151,6 +150,26 @@ int btrfs_lookup_file_extent(struct btrfs_trans_handle *trans, | |||
151 | return ret; | 150 | return ret; |
152 | } | 151 | } |
153 | 152 | ||
153 | u64 btrfs_file_extent_length(struct btrfs_path *path) | ||
154 | { | ||
155 | int extent_type; | ||
156 | struct btrfs_file_extent_item *fi; | ||
157 | u64 len; | ||
158 | |||
159 | fi = btrfs_item_ptr(path->nodes[0], path->slots[0], | ||
160 | struct btrfs_file_extent_item); | ||
161 | extent_type = btrfs_file_extent_type(path->nodes[0], fi); | ||
162 | |||
163 | if (extent_type == BTRFS_FILE_EXTENT_REG || | ||
164 | extent_type == BTRFS_FILE_EXTENT_PREALLOC) | ||
165 | len = btrfs_file_extent_num_bytes(path->nodes[0], fi); | ||
166 | else if (extent_type == BTRFS_FILE_EXTENT_INLINE) | ||
167 | len = btrfs_file_extent_inline_len(path->nodes[0], fi); | ||
168 | else | ||
169 | BUG(); | ||
170 | |||
171 | return len; | ||
172 | } | ||
154 | 173 | ||
155 | static int __btrfs_lookup_bio_sums(struct btrfs_root *root, | 174 | static int __btrfs_lookup_bio_sums(struct btrfs_root *root, |
156 | struct inode *inode, struct bio *bio, | 175 | struct inode *inode, struct bio *bio, |
@@ -441,8 +460,8 @@ int btrfs_csum_one_bio(struct btrfs_root *root, struct inode *inode, | |||
441 | if (!contig) | 460 | if (!contig) |
442 | offset = page_offset(bvec->bv_page) + bvec->bv_offset; | 461 | offset = page_offset(bvec->bv_page) + bvec->bv_offset; |
443 | 462 | ||
444 | if (!contig && (offset >= ordered->file_offset + ordered->len || | 463 | if (offset >= ordered->file_offset + ordered->len || |
445 | offset < ordered->file_offset)) { | 464 | offset < ordered->file_offset) { |
446 | unsigned long bytes_left; | 465 | unsigned long bytes_left; |
447 | sums->len = this_sum_bytes; | 466 | sums->len = this_sum_bytes; |
448 | this_sum_bytes = 0; | 467 | this_sum_bytes = 0; |