|
@@ -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)
|
|
|
|
|
|
flags = BTRFS_I(dir)->flags;
|
|
flags = BTRFS_I(dir)->flags;
|
|
|
|
|
|
- if (S_ISREG(inode->i_mode))
|
|
|
|
- flags &= ~BTRFS_INODE_DIRSYNC;
|
|
|
|
- else if (!S_ISDIR(inode->i_mode))
|
|
|
|
- flags &= (BTRFS_INODE_NODUMP | BTRFS_INODE_NOATIME);
|
|
|
|
|
|
+ if (flags & BTRFS_INODE_NOCOMPRESS) {
|
|
|
|
+ BTRFS_I(inode)->flags &= ~BTRFS_INODE_COMPRESS;
|
|
|
|
+ BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS;
|
|
|
|
+ } 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);
|
|
}
|
|
}
|
|
|
|
|