ovl: copy up file size as well
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)
Copy i_size of the underlying inode to the overlay inode in ovl_copyattr().

This is in preparation for stacking I/O operations on overlay files.

This patch shouldn't have any observable effect.

Remove stale comment from ovl_setattr() [spotted by Vivek Goyal].

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

index 3f1e5bd0ba8739b8ae8527e589d9d4bdf5747121..5b6c86703d34bff8f4307c0b7b77eb66893be0ec 100644 (file)
@@ -22,15 +22,6 @@ int ovl_setattr(struct dentry *dentry, struct iattr *attr)
        struct dentry *upperdentry;
        const struct cred *old_cred;
 
-       /*
-        * Check for permissions before trying to copy-up.  This is redundant
-        * since it will be rechecked later by ->setattr() on upper dentry.  But
-        * without this, copy-up can be triggered by just about anybody.
-        *
-        * We don't initialize inode->size, which just means that
-        * inode_newsize_ok() will always check against MAX_LFS_FILESIZE and not
-        * check for a swapfile (which this won't be anyway).
-        */
        err = setattr_prepare(dentry, attr);
        if (err)
                return err;
index 25cf26e57cdbef6af4230800e2a4fa6d35c1a0bb..f28f1e37d457e717b15dc1338869cfab49fa1285 100644 (file)
@@ -9,6 +9,7 @@
 
 #include <linux/kernel.h>
 #include <linux/uuid.h>
+#include <linux/fs.h>
 #include "ovl_entry.h"
 
 enum ovl_path_type {
@@ -348,6 +349,7 @@ static inline void ovl_copyattr(struct inode *from, struct inode *to)
        to->i_atime = from->i_atime;
        to->i_mtime = from->i_mtime;
        to->i_ctime = from->i_ctime;
+       i_size_write(to, i_size_read(from));
 }
 
 static inline void ovl_copyflags(struct inode *from, struct inode *to)