提交 9aba6521 编写于 作者: A Amir Goldstein 提交者: Miklos Szeredi

ovl: fold ovl_copy_up_truncate() into ovl_copy_up()

This removes code duplication.
Signed-off-by: NAmir Goldstein <amir73il@gmail.com>
Signed-off-by: NMiklos Szeredi <mszeredi@redhat.com>
上级 97c684cc
...@@ -324,8 +324,8 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir, ...@@ -324,8 +324,8 @@ 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 * is possible that the copy up will lock the old parent. At that point
* the file will have already been copied up anyway. * 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) struct path *lowerpath, struct kstat *stat)
{ {
DEFINE_DELAYED_CALL(done); DEFINE_DELAYED_CALL(done);
struct dentry *workdir = ovl_workdir(dentry); struct dentry *workdir = ovl_workdir(dentry);
...@@ -378,7 +378,7 @@ int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry, ...@@ -378,7 +378,7 @@ int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry,
return err; return err;
} }
int ovl_copy_up(struct dentry *dentry) int ovl_copy_up_flags(struct dentry *dentry, int flags)
{ {
int err = 0; int err = 0;
const struct cred *old_cred = ovl_override_creds(dentry->d_sb); const struct cred *old_cred = ovl_override_creds(dentry->d_sb);
...@@ -408,6 +408,9 @@ int ovl_copy_up(struct dentry *dentry) ...@@ -408,6 +408,9 @@ int ovl_copy_up(struct dentry *dentry)
ovl_path_lower(next, &lowerpath); ovl_path_lower(next, &lowerpath);
err = vfs_getattr(&lowerpath, &stat); err = vfs_getattr(&lowerpath, &stat);
/* maybe truncate regular file. this has no effect on dirs */
if (flags & O_TRUNC)
stat.size = 0;
if (!err) if (!err)
err = ovl_copy_up_one(parent, next, &lowerpath, &stat); err = ovl_copy_up_one(parent, next, &lowerpath, &stat);
...@@ -418,3 +421,8 @@ int ovl_copy_up(struct dentry *dentry) ...@@ -418,3 +421,8 @@ int ovl_copy_up(struct dentry *dentry)
return err; return err;
} }
int ovl_copy_up(struct dentry *dentry)
{
return ovl_copy_up_flags(dentry, 0);
}
...@@ -13,34 +13,6 @@ ...@@ -13,34 +13,6 @@
#include <linux/posix_acl.h> #include <linux/posix_acl.h>
#include "overlayfs.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 ovl_setattr(struct dentry *dentry, struct iattr *attr)
{ {
int err; int err;
...@@ -281,10 +253,7 @@ int ovl_open_maybe_copy_up(struct dentry *dentry, unsigned int file_flags) ...@@ -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)) { if (ovl_open_need_copy_up(file_flags, type, realpath.dentry)) {
err = ovl_want_write(dentry); err = ovl_want_write(dentry);
if (!err) { if (!err) {
if (file_flags & O_TRUNC) err = ovl_copy_up_flags(dentry, file_flags);
err = ovl_copy_up_truncate(dentry);
else
err = ovl_copy_up(dentry);
ovl_drop_write(dentry); ovl_drop_write(dentry);
} }
} }
......
...@@ -219,7 +219,6 @@ void ovl_cleanup(struct inode *dir, struct dentry *dentry); ...@@ -219,7 +219,6 @@ void ovl_cleanup(struct inode *dir, struct dentry *dentry);
/* copy_up.c */ /* copy_up.c */
int ovl_copy_up(struct dentry *dentry); int ovl_copy_up(struct dentry *dentry);
int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry, int ovl_copy_up_flags(struct dentry *dentry, int flags);
struct path *lowerpath, struct kstat *stat);
int ovl_copy_xattr(struct dentry *old, struct dentry *new); int ovl_copy_xattr(struct dentry *old, struct dentry *new);
int ovl_set_attr(struct dentry *upper, struct kstat *stat); int ovl_set_attr(struct dentry *upper, struct kstat *stat);
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册