fs: make remaining filesystems use .rename2

This is trivial to do:

 - add flags argument to foo_rename()
 - check if flags is zero
 - assign foo_rename() to .rename2 instead of .rename

This doesn't mean it's impossible to support RENAME_NOREPLACE for these
filesystems, but it is not trivial, like for local filesystems.
RENAME_NOREPLACE must guarantee atomicity (i.e. it shouldn't be possible
for a file to be created on one host while it is overwritten by rename on
another host).

Filesystems converted:

9p, afs, ceph, coda, ecryptfs, kernfs, lustre, ncpfs, nfs, ocfs2, orangefs.

After this, we can get rid of the duplicate interfaces for rename.

Signed-off-by: Miklos Szeredi <[email protected]>
Acked-by: Greg Kroah-Hartman <[email protected]>
Acked-by: David Howells <[email protected]> [AFS]
Acked-by: Mike Marshall <[email protected]>
Cc: Eric Van Hensbergen <[email protected]>
Cc: Ilya Dryomov <[email protected]>
Cc: Jan Harkes <[email protected]>
Cc: Tyler Hicks <[email protected]>
Cc: Oleg Drokin <[email protected]>
Cc: Trond Myklebust <[email protected]>
Cc: Mark Fasheh <[email protected]>
This commit is contained in:
Miklos Szeredi 2016-09-27 11:03:58 +02:00
commit 1cd66c93ba
17 changed files with 78 additions and 31 deletions

View file

@ -1203,7 +1203,8 @@ static void ocfs2_double_unlock(struct inode *inode1, struct inode *inode2)
static int ocfs2_rename(struct inode *old_dir,
struct dentry *old_dentry,
struct inode *new_dir,
struct dentry *new_dentry)
struct dentry *new_dentry,
unsigned int flags)
{
int status = 0, rename_lock = 0, parents_locked = 0, target_exists = 0;
int old_child_locked = 0, new_child_locked = 0, update_dot_dot = 0;
@ -1228,6 +1229,9 @@ static int ocfs2_rename(struct inode *old_dir,
struct ocfs2_dir_lookup_result target_insert = { NULL, };
bool should_add_orphan = false;
if (flags)
return -EINVAL;
/* At some point it might be nice to break this function up a
* bit. */
@ -2909,7 +2913,7 @@ const struct inode_operations ocfs2_dir_iops = {
.symlink = ocfs2_symlink,
.mkdir = ocfs2_mkdir,
.mknod = ocfs2_mknod,
.rename = ocfs2_rename,
.rename2 = ocfs2_rename,
.setattr = ocfs2_setattr,
.getattr = ocfs2_getattr,
.permission = ocfs2_permission,