Revert "namei: introduce struct renamedata"
This reverts commit 01eed6c908
.
This commit is contained in:
parent
8efaad0786
commit
bf7fa5ebc4
6 changed files with 14 additions and 48 deletions
|
@ -412,14 +412,9 @@ try_again:
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
cachefiles_io_error(cache, "Rename security error %d", ret);
|
cachefiles_io_error(cache, "Rename security error %d", ret);
|
||||||
} else {
|
} else {
|
||||||
struct renamedata rd = {
|
|
||||||
.old_dir = d_inode(dir),
|
|
||||||
.old_dentry = rep,
|
|
||||||
.new_dir = d_inode(cache->graveyard),
|
|
||||||
.new_dentry = grave,
|
|
||||||
};
|
|
||||||
trace_cachefiles_rename(object, rep, grave, why);
|
trace_cachefiles_rename(object, rep, grave, why);
|
||||||
ret = vfs_rename(&rd);
|
ret = vfs_rename(d_inode(dir), rep,
|
||||||
|
d_inode(cache->graveyard), grave, NULL, 0);
|
||||||
if (ret != 0 && ret != -ENOMEM)
|
if (ret != 0 && ret != -ENOMEM)
|
||||||
cachefiles_io_error(cache,
|
cachefiles_io_error(cache,
|
||||||
"Rename failed with error %d", ret);
|
"Rename failed with error %d", ret);
|
||||||
|
|
|
@ -598,7 +598,6 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||||
struct dentry *lower_new_dir_dentry;
|
struct dentry *lower_new_dir_dentry;
|
||||||
struct dentry *trap;
|
struct dentry *trap;
|
||||||
struct inode *target_inode;
|
struct inode *target_inode;
|
||||||
struct renamedata rd = {};
|
|
||||||
|
|
||||||
if (flags)
|
if (flags)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -628,12 +627,9 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||||
rc = -ENOTEMPTY;
|
rc = -ENOTEMPTY;
|
||||||
goto out_lock;
|
goto out_lock;
|
||||||
}
|
}
|
||||||
|
rc = vfs_rename(d_inode(lower_old_dir_dentry), lower_old_dentry,
|
||||||
rd.old_dir = d_inode(lower_old_dir_dentry);
|
d_inode(lower_new_dir_dentry), lower_new_dentry,
|
||||||
rd.old_dentry = lower_old_dentry;
|
NULL, 0);
|
||||||
rd.new_dir = d_inode(lower_new_dir_dentry);
|
|
||||||
rd.new_dentry = lower_new_dentry;
|
|
||||||
rc = vfs_rename(&rd);
|
|
||||||
if (rc)
|
if (rc)
|
||||||
goto out_lock;
|
goto out_lock;
|
||||||
if (target_inode)
|
if (target_inode)
|
||||||
|
|
21
fs/namei.c
21
fs/namei.c
|
@ -4404,14 +4404,11 @@ SYSCALL_DEFINE2(link, const char __user *, oldname, const char __user *, newname
|
||||||
* ->i_mutex on parents, which works but leads to some truly excessive
|
* ->i_mutex on parents, which works but leads to some truly excessive
|
||||||
* locking].
|
* locking].
|
||||||
*/
|
*/
|
||||||
int vfs_rename(struct renamedata *rd)
|
int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||||
|
struct inode *new_dir, struct dentry *new_dentry,
|
||||||
|
struct inode **delegated_inode, unsigned int flags)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
struct inode *old_dir = rd->old_dir, *new_dir = rd->new_dir;
|
|
||||||
struct dentry *old_dentry = rd->old_dentry;
|
|
||||||
struct dentry *new_dentry = rd->new_dentry;
|
|
||||||
struct inode **delegated_inode = rd->delegated_inode;
|
|
||||||
unsigned int flags = rd->flags;
|
|
||||||
bool is_dir = d_is_dir(old_dentry);
|
bool is_dir = d_is_dir(old_dentry);
|
||||||
struct inode *source = old_dentry->d_inode;
|
struct inode *source = old_dentry->d_inode;
|
||||||
struct inode *target = new_dentry->d_inode;
|
struct inode *target = new_dentry->d_inode;
|
||||||
|
@ -4568,7 +4565,6 @@ EXPORT_SYMBOL_NS(vfs_rename, ANDROID_GKI_VFS_EXPORT_ONLY);
|
||||||
int do_renameat2(int olddfd, struct filename *from, int newdfd,
|
int do_renameat2(int olddfd, struct filename *from, int newdfd,
|
||||||
struct filename *to, unsigned int flags)
|
struct filename *to, unsigned int flags)
|
||||||
{
|
{
|
||||||
struct renamedata rd;
|
|
||||||
struct dentry *old_dentry, *new_dentry;
|
struct dentry *old_dentry, *new_dentry;
|
||||||
struct dentry *trap;
|
struct dentry *trap;
|
||||||
struct path old_path, new_path;
|
struct path old_path, new_path;
|
||||||
|
@ -4672,14 +4668,9 @@ retry_deleg:
|
||||||
&new_path, new_dentry, flags);
|
&new_path, new_dentry, flags);
|
||||||
if (error)
|
if (error)
|
||||||
goto exit5;
|
goto exit5;
|
||||||
|
error = vfs_rename(old_path.dentry->d_inode, old_dentry,
|
||||||
rd.old_dir = old_path.dentry->d_inode;
|
new_path.dentry->d_inode, new_dentry,
|
||||||
rd.old_dentry = old_dentry;
|
&delegated_inode, flags);
|
||||||
rd.new_dir = new_path.dentry->d_inode;
|
|
||||||
rd.new_dentry = new_dentry;
|
|
||||||
rd.delegated_inode = &delegated_inode;
|
|
||||||
rd.flags = flags;
|
|
||||||
error = vfs_rename(&rd);
|
|
||||||
exit5:
|
exit5:
|
||||||
dput(new_dentry);
|
dput(new_dentry);
|
||||||
exit4:
|
exit4:
|
||||||
|
|
|
@ -1809,6 +1809,7 @@ retry:
|
||||||
if (!nfsd_wait_for_delegreturn(rqstp, d_inode(odentry)))
|
if (!nfsd_wait_for_delegreturn(rqstp, d_inode(odentry)))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
host_err = vfs_rename(fdir, odentry, tdir, ndentry, NULL, 0);
|
||||||
if (!host_err) {
|
if (!host_err) {
|
||||||
host_err = commit_metadata(tfhp);
|
host_err = commit_metadata(tfhp);
|
||||||
if (!host_err)
|
if (!host_err)
|
||||||
|
|
|
@ -214,16 +214,9 @@ static inline int ovl_do_rename(struct inode *olddir, struct dentry *olddentry,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct renamedata rd = {
|
|
||||||
.old_dir = olddir,
|
|
||||||
.old_dentry = olddentry,
|
|
||||||
.new_dir = newdir,
|
|
||||||
.new_dentry = newdentry,
|
|
||||||
.flags = flags,
|
|
||||||
};
|
|
||||||
|
|
||||||
pr_debug("rename(%pd2, %pd2, 0x%x)\n", olddentry, newdentry, flags);
|
pr_debug("rename(%pd2, %pd2, 0x%x)\n", olddentry, newdentry, flags);
|
||||||
err = vfs_rename(&rd);
|
err = vfs_rename(olddir, olddentry, newdir, newdentry, NULL, flags);
|
||||||
if (err) {
|
if (err) {
|
||||||
pr_debug("...rename(%pd2, %pd2, ...) = %i\n",
|
pr_debug("...rename(%pd2, %pd2, ...) = %i\n",
|
||||||
olddentry, newdentry, err);
|
olddentry, newdentry, err);
|
||||||
|
|
|
@ -1839,17 +1839,7 @@ extern int vfs_symlink(struct inode *, struct dentry *, const char *);
|
||||||
extern int vfs_link(struct dentry *, struct inode *, struct dentry *, struct inode **);
|
extern int vfs_link(struct dentry *, struct inode *, struct dentry *, struct inode **);
|
||||||
extern int vfs_rmdir(struct inode *, struct dentry *);
|
extern int vfs_rmdir(struct inode *, struct dentry *);
|
||||||
extern int vfs_unlink(struct inode *, struct dentry *, struct inode **);
|
extern int vfs_unlink(struct inode *, struct dentry *, struct inode **);
|
||||||
|
extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *, struct inode **, unsigned int);
|
||||||
struct renamedata {
|
|
||||||
struct inode *old_dir;
|
|
||||||
struct dentry *old_dentry;
|
|
||||||
struct inode *new_dir;
|
|
||||||
struct dentry *new_dentry;
|
|
||||||
struct inode **delegated_inode;
|
|
||||||
unsigned int flags;
|
|
||||||
} __randomize_layout;
|
|
||||||
|
|
||||||
int vfs_rename(struct renamedata *);
|
|
||||||
|
|
||||||
static inline int vfs_whiteout(struct inode *dir, struct dentry *dentry)
|
static inline int vfs_whiteout(struct inode *dir, struct dentry *dentry)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue