OSDN Git Service

ovl: copy up inode flags
authorMiklos Szeredi <mszeredi@redhat.com>
Wed, 18 Jul 2018 13:44:41 +0000 (15:44 +0200)
committerMiklos Szeredi <mszeredi@redhat.com>
Wed, 18 Jul 2018 13:44:41 +0000 (15:44 +0200)
On inode creation copy certain inode flags from the underlying real inode
to the overlay inode.

This is in preparation for moving overlay functionality out of the VFS.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/overlayfs/overlayfs.h
fs/overlayfs/util.c

index 008420e..25cf26e 100644 (file)
@@ -350,6 +350,13 @@ static inline void ovl_copyattr(struct inode *from, struct inode *to)
        to->i_ctime = from->i_ctime;
 }
 
+static inline void ovl_copyflags(struct inode *from, struct inode *to)
+{
+       unsigned int mask = S_SYNC | S_IMMUTABLE | S_APPEND | S_NOATIME;
+
+       inode_set_flags(to, from->i_flags & mask, mask);
+}
+
 /* dir.c */
 extern const struct inode_operations ovl_dir_inode_operations;
 int ovl_cleanup_and_whiteout(struct dentry *workdir, struct inode *dir,
index 30a05d1..25d202b 100644 (file)
@@ -310,6 +310,7 @@ void ovl_inode_init(struct inode *inode, struct dentry *upperdentry,
                OVL_I(inode)->lower = igrab(d_inode(lowerdentry));
 
        ovl_copyattr(realinode, inode);
+       ovl_copyflags(realinode, inode);
        if (!inode->i_ino)
                inode->i_ino = realinode->i_ino;
 }