Btrfs: Fix hole creation in file_write
authorYan <yanzheng@21cn.com>
Tue, 5 Feb 2008 14:07:49 +0000 (09:07 -0500)
committerChris Mason <chris.mason@oracle.com>
Thu, 25 Sep 2008 15:04:00 +0000 (11:04 -0400)
Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/file.c

index 7cbf8d8d7e27e8e09f0892cb4b18814044de3cda..184bde1cfc3d3871a38c385984f1f9bb6c68f1bd 100644 (file)
@@ -265,16 +265,14 @@ static int noinline dirty_and_release_pages(struct btrfs_trans_handle *trans,
        set_extent_uptodate(io_tree, start_pos, end_of_last_block, GFP_NOFS);
 
        /* FIXME...EIEIO, ENOSPC and more */
-
        /* insert any holes we need to create */
-       if (inode->i_size < start_pos) {
+       if (isize < end_pos) {
                u64 last_pos_in_file;
                u64 hole_size;
                u64 mask = root->sectorsize - 1;
                last_pos_in_file = (isize + mask) & ~mask;
                hole_size = (end_pos - last_pos_in_file + mask) & ~mask;
-
-               if (last_pos_in_file < start_pos) {
+               if (last_pos_in_file < end_pos) {
                        err = btrfs_drop_extents(trans, root, inode,
                                                 last_pos_in_file,
                                                 last_pos_in_file + hole_size,