Btrfs: fix preallocation and nodatacow checks in O_DIRECT
authorChris Mason <chris.mason@oracle.com>
Wed, 26 May 2010 15:04:10 +0000 (11:04 -0400)
committerChris Mason <chris.mason@oracle.com>
Thu, 27 May 2010 01:34:45 +0000 (21:34 -0400)
commit46bfbb5c0740c200d2b66afcbd1f9d64ab320940
tree3ec1523f7da103a79f71fc5f486596307a4eeb54
parent94b604429a6cd94ddc128fa2772c57209bb1318f
Btrfs: fix preallocation and nodatacow checks in O_DIRECT

The O_DIRECT code wasn't checking for multiple references
on preallocated or nodatacow extents.  This means it
wasn't honoring snapshots properly.

The fix here is to add an explicit check for multiple references
This also fixes the math for selecting the correct disk block,
making sure not to go past the end of the extent.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/inode.c