Loading fs/overlayfs/copy_up.c +11 −3 Original line number Diff line number Diff line Loading @@ -324,7 +324,7 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir, * is possible that the copy up will lock the old parent. At that point * the file will have already been copied up anyway. */ int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry, static int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry, struct path *lowerpath, struct kstat *stat) { DEFINE_DELAYED_CALL(done); Loading Loading @@ -378,7 +378,7 @@ int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry, return err; } int ovl_copy_up(struct dentry *dentry) int ovl_copy_up_flags(struct dentry *dentry, int flags) { int err = 0; const struct cred *old_cred = ovl_override_creds(dentry->d_sb); Loading Loading @@ -408,6 +408,9 @@ int ovl_copy_up(struct dentry *dentry) ovl_path_lower(next, &lowerpath); err = vfs_getattr(&lowerpath, &stat); /* maybe truncate regular file. this has no effect on dirs */ if (flags & O_TRUNC) stat.size = 0; if (!err) err = ovl_copy_up_one(parent, next, &lowerpath, &stat); Loading @@ -418,3 +421,8 @@ int ovl_copy_up(struct dentry *dentry) return err; } int ovl_copy_up(struct dentry *dentry) { return ovl_copy_up_flags(dentry, 0); } fs/overlayfs/inode.c +1 −32 Original line number Diff line number Diff line Loading @@ -13,34 +13,6 @@ #include <linux/posix_acl.h> #include "overlayfs.h" static int ovl_copy_up_truncate(struct dentry *dentry) { int err; struct dentry *parent; struct kstat stat; struct path lowerpath; const struct cred *old_cred; parent = dget_parent(dentry); err = ovl_copy_up(parent); if (err) goto out_dput_parent; ovl_path_lower(dentry, &lowerpath); old_cred = ovl_override_creds(dentry->d_sb); err = vfs_getattr(&lowerpath, &stat); if (!err) { stat.size = 0; err = ovl_copy_up_one(parent, dentry, &lowerpath, &stat); } revert_creds(old_cred); out_dput_parent: dput(parent); return err; } int ovl_setattr(struct dentry *dentry, struct iattr *attr) { int err; Loading Loading @@ -281,10 +253,7 @@ int ovl_open_maybe_copy_up(struct dentry *dentry, unsigned int file_flags) if (ovl_open_need_copy_up(file_flags, type, realpath.dentry)) { err = ovl_want_write(dentry); if (!err) { if (file_flags & O_TRUNC) err = ovl_copy_up_truncate(dentry); else err = ovl_copy_up(dentry); err = ovl_copy_up_flags(dentry, file_flags); ovl_drop_write(dentry); } } Loading fs/overlayfs/overlayfs.h +1 −2 Original line number Diff line number Diff line Loading @@ -219,7 +219,6 @@ void ovl_cleanup(struct inode *dir, struct dentry *dentry); /* copy_up.c */ int ovl_copy_up(struct dentry *dentry); int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry, struct path *lowerpath, struct kstat *stat); int ovl_copy_up_flags(struct dentry *dentry, int flags); int ovl_copy_xattr(struct dentry *old, struct dentry *new); int ovl_set_attr(struct dentry *upper, struct kstat *stat); Loading
fs/overlayfs/copy_up.c +11 −3 Original line number Diff line number Diff line Loading @@ -324,7 +324,7 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir, * is possible that the copy up will lock the old parent. At that point * the file will have already been copied up anyway. */ int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry, static int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry, struct path *lowerpath, struct kstat *stat) { DEFINE_DELAYED_CALL(done); Loading Loading @@ -378,7 +378,7 @@ int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry, return err; } int ovl_copy_up(struct dentry *dentry) int ovl_copy_up_flags(struct dentry *dentry, int flags) { int err = 0; const struct cred *old_cred = ovl_override_creds(dentry->d_sb); Loading Loading @@ -408,6 +408,9 @@ int ovl_copy_up(struct dentry *dentry) ovl_path_lower(next, &lowerpath); err = vfs_getattr(&lowerpath, &stat); /* maybe truncate regular file. this has no effect on dirs */ if (flags & O_TRUNC) stat.size = 0; if (!err) err = ovl_copy_up_one(parent, next, &lowerpath, &stat); Loading @@ -418,3 +421,8 @@ int ovl_copy_up(struct dentry *dentry) return err; } int ovl_copy_up(struct dentry *dentry) { return ovl_copy_up_flags(dentry, 0); }
fs/overlayfs/inode.c +1 −32 Original line number Diff line number Diff line Loading @@ -13,34 +13,6 @@ #include <linux/posix_acl.h> #include "overlayfs.h" static int ovl_copy_up_truncate(struct dentry *dentry) { int err; struct dentry *parent; struct kstat stat; struct path lowerpath; const struct cred *old_cred; parent = dget_parent(dentry); err = ovl_copy_up(parent); if (err) goto out_dput_parent; ovl_path_lower(dentry, &lowerpath); old_cred = ovl_override_creds(dentry->d_sb); err = vfs_getattr(&lowerpath, &stat); if (!err) { stat.size = 0; err = ovl_copy_up_one(parent, dentry, &lowerpath, &stat); } revert_creds(old_cred); out_dput_parent: dput(parent); return err; } int ovl_setattr(struct dentry *dentry, struct iattr *attr) { int err; Loading Loading @@ -281,10 +253,7 @@ int ovl_open_maybe_copy_up(struct dentry *dentry, unsigned int file_flags) if (ovl_open_need_copy_up(file_flags, type, realpath.dentry)) { err = ovl_want_write(dentry); if (!err) { if (file_flags & O_TRUNC) err = ovl_copy_up_truncate(dentry); else err = ovl_copy_up(dentry); err = ovl_copy_up_flags(dentry, file_flags); ovl_drop_write(dentry); } } Loading
fs/overlayfs/overlayfs.h +1 −2 Original line number Diff line number Diff line Loading @@ -219,7 +219,6 @@ void ovl_cleanup(struct inode *dir, struct dentry *dentry); /* copy_up.c */ int ovl_copy_up(struct dentry *dentry); int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry, struct path *lowerpath, struct kstat *stat); int ovl_copy_up_flags(struct dentry *dentry, int flags); int ovl_copy_xattr(struct dentry *old, struct dentry *new); int ovl_set_attr(struct dentry *upper, struct kstat *stat);