aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYan <yanzheng@21cn.com>2008-02-05 09:07:49 -0500
committerChris Mason <chris.mason@oracle.com>2008-09-25 11:04:00 -0400
commitdacb473ad81d5c1650cb73d1cb9b866202f6bab0 (patch)
tree7b0396348204f8b1a0b5b0e8b205f04067b5a739
parent47b0c4f8c717890877058f30e07a30e05f74a7bb (diff)
Btrfs: Fix hole creation in file_write
Signed-off-by: Chris Mason <chris.mason@oracle.com>
-rw-r--r--fs/btrfs/file.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 7cbf8d8d7e27..184bde1cfc3d 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -265,16 +265,14 @@ static int noinline dirty_and_release_pages(struct btrfs_trans_handle *trans,
265 set_extent_uptodate(io_tree, start_pos, end_of_last_block, GFP_NOFS); 265 set_extent_uptodate(io_tree, start_pos, end_of_last_block, GFP_NOFS);
266 266
267 /* FIXME...EIEIO, ENOSPC and more */ 267 /* FIXME...EIEIO, ENOSPC and more */
268
269 /* insert any holes we need to create */ 268 /* insert any holes we need to create */
270 if (inode->i_size < start_pos) { 269 if (isize < end_pos) {
271 u64 last_pos_in_file; 270 u64 last_pos_in_file;
272 u64 hole_size; 271 u64 hole_size;
273 u64 mask = root->sectorsize - 1; 272 u64 mask = root->sectorsize - 1;
274 last_pos_in_file = (isize + mask) & ~mask; 273 last_pos_in_file = (isize + mask) & ~mask;
275 hole_size = (end_pos - last_pos_in_file + mask) & ~mask; 274 hole_size = (end_pos - last_pos_in_file + mask) & ~mask;
276 275 if (last_pos_in_file < end_pos) {
277 if (last_pos_in_file < start_pos) {
278 err = btrfs_drop_extents(trans, root, inode, 276 err = btrfs_drop_extents(trans, root, inode,
279 last_pos_in_file, 277 last_pos_in_file,
280 last_pos_in_file + hole_size, 278 last_pos_in_file + hole_size,