aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2009-07-02 12:26:06 -0400
committerChris Mason <chris.mason@oracle.com>2009-07-02 13:41:17 -0400
commit9427216476d4fa75103f39d4b228c47d56ba20da (patch)
treea6ed7b28aa778a4f9e0c9326f20215e75eb48d40
parent2c47e605a91dde6b0514f689645e7ab336c8592a (diff)
Btrfs: honor nodatacow/sum mount options for new files
The btrfs attr patches unconditionally inherited the inode flags field without honoring nodatacow and nodatasum. This fix makes sure we properly record the nodatacow/sum mount options in new inodes. Signed-off-by: Chris Mason <chris.mason@oracle.com>
-rw-r--r--fs/btrfs/inode.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 1eacc78f6614..a48c084f6d3a 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -3587,12 +3587,6 @@ static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans,
3587 owner = 1; 3587 owner = 1;
3588 BTRFS_I(inode)->block_group = 3588 BTRFS_I(inode)->block_group =
3589 btrfs_find_block_group(root, 0, alloc_hint, owner); 3589 btrfs_find_block_group(root, 0, alloc_hint, owner);
3590 if ((mode & S_IFREG)) {
3591 if (btrfs_test_opt(root, NODATASUM))
3592 BTRFS_I(inode)->flags |= BTRFS_INODE_NODATASUM;
3593 if (btrfs_test_opt(root, NODATACOW))
3594 BTRFS_I(inode)->flags |= BTRFS_INODE_NODATACOW;
3595 }
3596 3590
3597 key[0].objectid = objectid; 3591 key[0].objectid = objectid;
3598 btrfs_set_key_type(&key[0], BTRFS_INODE_ITEM_KEY); 3592 btrfs_set_key_type(&key[0], BTRFS_INODE_ITEM_KEY);
@@ -3647,6 +3641,13 @@ static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans,
3647 3641
3648 btrfs_inherit_iflags(inode, dir); 3642 btrfs_inherit_iflags(inode, dir);
3649 3643
3644 if ((mode & S_IFREG)) {
3645 if (btrfs_test_opt(root, NODATASUM))
3646 BTRFS_I(inode)->flags |= BTRFS_INODE_NODATASUM;
3647 if (btrfs_test_opt(root, NODATACOW))
3648 BTRFS_I(inode)->flags |= BTRFS_INODE_NODATACOW;
3649 }
3650
3650 insert_inode_hash(inode); 3651 insert_inode_hash(inode);
3651 inode_tree_add(inode); 3652 inode_tree_add(inode);
3652 return inode; 3653 return inode;