diff options
author | Josef Bacik <jbacik@fusionio.com> | 2013-02-21 15:28:28 -0500 |
---|---|---|
committer | Josef Bacik <jbacik@fusionio.com> | 2013-02-26 10:57:48 -0500 |
commit | f2bdf9a8f79052e9577936cbe5696c0e232aa0e3 (patch) | |
tree | ba7840304d4859579ddddd36e66f9e6bfe3bbfb8 | |
parent | dc81cdc58ad2f413b96b9004f8d681e5dc554473 (diff) | |
download | op-kernel-dev-f2bdf9a8f79052e9577936cbe5696c0e232aa0e3.zip op-kernel-dev-f2bdf9a8f79052e9577936cbe5696c0e232aa0e3.tar.gz |
Btrfs: make sure NODATACOW also gets NODATASUM set
A user reported hitting the BUG_ON() in btrfs_finished_ordered_io() where we had
csums on a NOCOW extent. This can happen if we have NODATACOW set but not
NODATASUM set, which can happen in two cases, either we mount with -o nodatacow
and then write into preallocated space, or chattr +C a directory and move a file
into that directory. Liu has fixed the move case in a different place, but this
fixes the mount -o nodatacow case. Thanks,
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
-rw-r--r-- | fs/btrfs/inode.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 40d49da..14c82cd 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -5574,7 +5574,8 @@ static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans, if (btrfs_test_opt(root, NODATASUM)) BTRFS_I(inode)->flags |= BTRFS_INODE_NODATASUM; if (btrfs_test_opt(root, NODATACOW)) - BTRFS_I(inode)->flags |= BTRFS_INODE_NODATACOW; + BTRFS_I(inode)->flags |= BTRFS_INODE_NODATACOW | + BTRFS_INODE_NODATASUM; } insert_inode_hash(inode); |