Skip to content

Commit

Permalink
vfs: remove unused i_op->rename
Browse files Browse the repository at this point in the history
No in-tree uses remain.

Signed-off-by: Miklos Szeredi <[email protected]>
  • Loading branch information
Miklos Szeredi committed Sep 27, 2016
1 parent 1cd66c9 commit 18fc84d
Show file tree
Hide file tree
Showing 7 changed files with 10 additions and 31 deletions.
6 changes: 1 addition & 5 deletions Documentation/filesystems/Locking
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,6 @@ prototypes:
int (*mkdir) (struct inode *,struct dentry *,umode_t);
int (*rmdir) (struct inode *,struct dentry *);
int (*mknod) (struct inode *,struct dentry *,umode_t,dev_t);
int (*rename) (struct inode *, struct dentry *,
struct inode *, struct dentry *);
int (*rename2) (struct inode *, struct dentry *,
struct inode *, struct dentry *, unsigned int);
int (*readlink) (struct dentry *, char __user *,int);
Expand Down Expand Up @@ -83,7 +81,6 @@ symlink: yes
mkdir: yes
unlink: yes (both)
rmdir: yes (both) (see below)
rename: yes (all) (see below)
rename2: yes (all) (see below)
readlink: no
get_link: no
Expand All @@ -102,8 +99,7 @@ tmpfile: no

Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on
victim.
cross-directory ->rename() and rename2() has (per-superblock)
->s_vfs_rename_sem.
cross-directory ->rename2() has (per-superblock) ->s_vfs_rename_sem.

See Documentation/filesystems/directory-locking for more detailed discussion
of the locking scheme for directory operations.
Expand Down
2 changes: 1 addition & 1 deletion Documentation/filesystems/directory-locking
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ locks victim and calls the method. Locks are exclusive.

4) rename() that is _not_ cross-directory. Locking rules: caller locks
the parent and finds source and target. In case of exchange (with
RENAME_EXCHANGE in rename2() flags argument) lock both. In any case,
RENAME_EXCHANGE in flags argument) lock both. In any case,
if the target already exists, lock it. If the source is a non-directory,
lock it. If we need to lock both, lock them in inode pointer order.
Then call the method. All locks are exclusive.
Expand Down
9 changes: 2 additions & 7 deletions Documentation/filesystems/vfs.txt
Original file line number Diff line number Diff line change
Expand Up @@ -345,8 +345,6 @@ struct inode_operations {
int (*mkdir) (struct inode *,struct dentry *,umode_t);
int (*rmdir) (struct inode *,struct dentry *);
int (*mknod) (struct inode *,struct dentry *,umode_t,dev_t);
int (*rename) (struct inode *, struct dentry *,
struct inode *, struct dentry *);
int (*rename2) (struct inode *, struct dentry *,
struct inode *, struct dentry *, unsigned int);
int (*readlink) (struct dentry *, char __user *,int);
Expand Down Expand Up @@ -416,11 +414,8 @@ otherwise noted.
rename: called by the rename(2) system call to rename the object to
have the parent and name given by the second inode and dentry.

rename2: this has an additional flags argument compared to rename.
If no flags are supported by the filesystem then this method
need not be implemented. If some flags are supported then the
filesystem must return -EINVAL for any unsupported or unknown
flags. Currently the following flags are implemented:
The filesystem must return -EINVAL for any unsupported or
unknown flags. Currently the following flags are implemented:
(1) RENAME_NOREPLACE: this flag indicates that if the target
of the rename exists the rename should fail with -EEXIST
instead of replacing the target. The VFS already checks for
Expand Down
3 changes: 1 addition & 2 deletions fs/cachefiles/namei.c
Original file line number Diff line number Diff line change
Expand Up @@ -804,8 +804,7 @@ struct dentry *cachefiles_get_directory(struct cachefiles_cache *cache,
!d_backing_inode(subdir)->i_op->lookup ||
!d_backing_inode(subdir)->i_op->mkdir ||
!d_backing_inode(subdir)->i_op->create ||
(!d_backing_inode(subdir)->i_op->rename &&
!d_backing_inode(subdir)->i_op->rename2) ||
!d_backing_inode(subdir)->i_op->rename2 ||
!d_backing_inode(subdir)->i_op->rmdir ||
!d_backing_inode(subdir)->i_op->unlink)
goto check_error;
Expand Down
15 changes: 3 additions & 12 deletions fs/namei.c
Original file line number Diff line number Diff line change
Expand Up @@ -4369,12 +4369,9 @@ int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
if (error)
return error;

if (!old_dir->i_op->rename && !old_dir->i_op->rename2)
if (!old_dir->i_op->rename2)
return -EPERM;

if (flags && !old_dir->i_op->rename2)
return -EINVAL;

/*
* If we are going to change the parent - check write permissions,
* we'll need to flip '..'.
Expand Down Expand Up @@ -4428,14 +4425,8 @@ int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
if (error)
goto out;
}
if (!old_dir->i_op->rename2) {
error = old_dir->i_op->rename(old_dir, old_dentry,
new_dir, new_dentry);
} else {
WARN_ON(old_dir->i_op->rename != NULL);
error = old_dir->i_op->rename2(old_dir, old_dentry,
new_dir, new_dentry, flags);
}
error = old_dir->i_op->rename2(old_dir, old_dentry,
new_dir, new_dentry, flags);
if (error)
goto out;

Expand Down
2 changes: 0 additions & 2 deletions include/linux/fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -1732,8 +1732,6 @@ struct inode_operations {
int (*mkdir) (struct inode *,struct dentry *,umode_t);
int (*rmdir) (struct inode *,struct dentry *);
int (*mknod) (struct inode *,struct dentry *,umode_t,dev_t);
int (*rename) (struct inode *, struct dentry *,
struct inode *, struct dentry *);
int (*rename2) (struct inode *, struct dentry *,
struct inode *, struct dentry *, unsigned int);
int (*setattr) (struct dentry *, struct iattr *);
Expand Down
4 changes: 2 additions & 2 deletions security/tomoyo/realpath.c
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ static char *tomoyo_get_local_path(struct dentry *dentry, char * const buffer,
* Use filesystem name if filesystem does not support rename()
* operation.
*/
if (!inode->i_op->rename && !inode->i_op->rename2)
if (!inode->i_op->rename2)
goto prepend_filesystem_name;
}
/* Prepend device name. */
Expand Down Expand Up @@ -283,7 +283,7 @@ char *tomoyo_realpath_from_path(const struct path *path)
* or dentry without vfsmount.
*/
if (!path->mnt ||
(!inode->i_op->rename && !inode->i_op->rename2))
(!inode->i_op->rename2))
pos = tomoyo_get_local_path(path->dentry, buf,
buf_len - 1);
/* Get absolute name for the rest. */
Expand Down

0 comments on commit 18fc84d

Please sign in to comment.