diff options
Diffstat (limited to 'fs/btrfs/file-item.c')
-rw-r--r-- | fs/btrfs/file-item.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c index 1ad08e4e4a15..bd38cef42358 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, |