aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/btrfs/file.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 4e52f7ec1cbe..bb98f52f4ea4 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -239,9 +239,8 @@ static int dirty_and_release_pages(struct btrfs_trans_handle *trans,
239 u64 start_pos; 239 u64 start_pos;
240 u64 end_of_last_block; 240 u64 end_of_last_block;
241 u64 end_pos = pos + write_bytes; 241 u64 end_pos = pos + write_bytes;
242 u32 inline_size; 242 u64 inline_size;
243 loff_t isize = i_size_read(inode); 243 loff_t isize = i_size_read(inode);
244
245 em = alloc_extent_map(GFP_NOFS); 244 em = alloc_extent_map(GFP_NOFS);
246 if (!em) 245 if (!em)
247 return -ENOMEM; 246 return -ENOMEM;
@@ -328,9 +327,11 @@ static int dirty_and_release_pages(struct btrfs_trans_handle *trans,
328 aligned_end, aligned_end, &hint_byte); 327 aligned_end, aligned_end, &hint_byte);
329 if (err) 328 if (err)
330 goto failed; 329 goto failed;
330 if (isize > inline_size)
331 inline_size = min_t(u64, isize, aligned_end);
332 inline_size -= start_pos;
331 err = insert_inline_extent(trans, root, inode, start_pos, 333 err = insert_inline_extent(trans, root, inode, start_pos,
332 end_pos - start_pos, pages, 0, 334 inline_size, pages, 0, num_pages);
333 num_pages);
334 BUG_ON(err); 335 BUG_ON(err);
335 } 336 }
336 if (end_pos > isize) { 337 if (end_pos > isize) {