Btrfs: don't set and clear delalloc for O_DIRECT writes
authorJosef Bacik <jbacik@fb.com>
Wed, 11 Feb 2015 20:08:58 +0000 (15:08 -0500)
committerChris Mason <clm@fb.com>
Sat, 14 Feb 2015 16:19:14 +0000 (08:19 -0800)
We do this to get the space accounting, but this is just needless churn on the
io_tree, so just drop setting/clearing delalloc and just drop the reserved data
space when we have a successfull allocation.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
Reviewed-by: Liu Bo <bo.li.liu@oracle.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/inode.c

index 5a5b902..3b95792 100644 (file)
@@ -7160,7 +7160,7 @@ static int btrfs_get_blocks_direct(struct inode *inode, sector_t iblock,
        int ret = 0;
 
        if (create)
-               unlock_bits |= EXTENT_DELALLOC | EXTENT_DIRTY;
+               unlock_bits |= EXTENT_DIRTY;
        else
                len = min_t(u64, len, root->sectorsize);
 
@@ -7296,11 +7296,7 @@ unlock:
                        BTRFS_I(inode)->outstanding_extents++;
                        spin_unlock(&BTRFS_I(inode)->lock);
                }
-
-               ret = set_extent_bit(&BTRFS_I(inode)->io_tree, lockstart,
-                                    lockstart + len - 1, EXTENT_DELALLOC, NULL,
-                                    &cached_state, GFP_NOFS);
-               BUG_ON(ret);
+               btrfs_free_reserved_data_space(inode, len);
        }
 
        /*