Re: [PATCH] Btrfs: fix a dio write regression
From: David Sterba <hidden>
Date: 2012-08-22 15:57:30
Hi, a few minor style comments, On Wed, Aug 22, 2012 at 06:11:14PM +0800, bo.li.liu@oracle.com wrote:
quoted hunk ↗ jump to hunk
--- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c@@ -5993,10 +5993,24 @@ unlock: * in the case of read we need to unlock only the end area that we * aren't using if there is any left over space. */ - if (lockstart < lockend) - clear_extent_bit(&BTRFS_I(inode)->io_tree, lockstart, lockend, - unlock_bits, 1, 0, &cached_state, GFP_NOFS); - else + if (lockstart < lockend) { + if (create && len < lockend - lockstart) { + clear_extent_bit(&BTRFS_I(inode)->io_tree, lockstart, + lockstart + len - 1, unlock_bits, 1, 0, + &cached_state, GFP_NOFS); + /* + * Beside unlock, we also need to cleanup reserved space + * for the left range by attaching EXTENT_DO_ACCOUNTING. + */ + clear_extent_bit(&BTRFS_I(inode)->io_tree, + lockstart + len, lockend, unlock_bits | + EXTENT_DO_ACCOUNTING, 1, 0, NULL,
I'd prefer to see unlock_bits and the new value on one line
+ GFP_NOFS); + } else
add { ... } around this
+ clear_extent_bit(&BTRFS_I(inode)->io_tree, lockstart, + lockend, unlock_bits, 1, 0, + &cached_state, GFP_NOFS); + } else
here too
free_extent_state(cached_state); free_extent_map(em);