Commit e27425d6 authored by Josef Bacik's avatar Josef Bacik

Btrfs: only inherit btrfs specific flags when creating files

Xfstests 79 was failing because we were inheriting the S_APPEND flag when we
weren't supposed to.  There isn't any specific documentation on this so I'm
taking the test as the standard of how things work, and having S_APPEND set on a
directory doesn't mean that S_APPEND gets inherited by its children according to
this test.  So only inherit btrfs specific things.  This will let us set
compress/nocompress on specific directories and everything in the directories
will inherit this flag, same with nodatacow.  With this patch test 79 passes.
Thanks,
Signed-off-by: default avatarJosef Bacik <josef@redhat.com>
parent 2bf64758
...@@ -117,7 +117,7 @@ void btrfs_update_iflags(struct inode *inode) ...@@ -117,7 +117,7 @@ void btrfs_update_iflags(struct inode *inode)
/* /*
* Inherit flags from the parent inode. * Inherit flags from the parent inode.
* *
* Unlike extN we don't have any flags we don't want to inherit currently. * Currently only the compression flags and the cow flags are inherited.
*/ */
void btrfs_inherit_iflags(struct inode *inode, struct inode *dir) void btrfs_inherit_iflags(struct inode *inode, struct inode *dir)
{ {
...@@ -128,12 +128,17 @@ void btrfs_inherit_iflags(struct inode *inode, struct inode *dir) ...@@ -128,12 +128,17 @@ void btrfs_inherit_iflags(struct inode *inode, struct inode *dir)
flags = BTRFS_I(dir)->flags; flags = BTRFS_I(dir)->flags;
if (S_ISREG(inode->i_mode)) if (flags & BTRFS_INODE_NOCOMPRESS) {
flags &= ~BTRFS_INODE_DIRSYNC; BTRFS_I(inode)->flags &= ~BTRFS_INODE_COMPRESS;
else if (!S_ISDIR(inode->i_mode)) BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS;
flags &= (BTRFS_INODE_NODUMP | BTRFS_INODE_NOATIME); } else if (flags & BTRFS_INODE_COMPRESS) {
BTRFS_I(inode)->flags &= ~BTRFS_INODE_NOCOMPRESS;
BTRFS_I(inode)->flags |= BTRFS_INODE_COMPRESS;
}
if (flags & BTRFS_INODE_NODATACOW)
BTRFS_I(inode)->flags |= BTRFS_INODE_NODATACOW;
BTRFS_I(inode)->flags = flags;
btrfs_update_iflags(inode); btrfs_update_iflags(inode);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment