Adds BTRFS_INODE_NODATASUM to inode flags when setting NOCOW for a file (chattr +C file).
In btrfs, NOCOW implies NODATASUM and without setting NODATASUM, btrfs doesn't honour correctly the NOCOW attribute.
Signed-off-by: Andrei Popa <redacted>
---
fs/btrfs/ioctl.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 0e92e57..8a7be76 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -139,7 +139,7 @@ void btrfs_inherit_iflags(struct inode *inode, struct inode *dir)
}
if (flags & BTRFS_INODE_NODATACOW)
- BTRFS_I(inode)->flags |= BTRFS_INODE_NODATACOW;
+ BTRFS_I(inode)->flags |= BTRFS_INODE_NODATACOW | BTRFS_INODE_NODATASUM;
btrfs_update_iflags(inode);
}
@@ -236,7 +236,7 @@ static int btrfs_ioctl_setflags(struct file *file, void __user *arg)
else
ip->flags &= ~BTRFS_INODE_DIRSYNC;
if (flags & FS_NOCOW_FL)
- ip->flags |= BTRFS_INODE_NODATACOW;
+ ip->flags |= BTRFS_INODE_NODATACOW | BTRFS_INODE_NODATASUM;
else
ip->flags &= ~BTRFS_INODE_NODATACOW;
--
1.7.3.4