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

@ -291,7 +291,8 @@ static int coda_rmdir(struct inode *dir, struct dentry *de)
/* rename */
static int coda_rename(struct inode *old_dir, struct dentry *old_dentry,
struct inode *new_dir, struct dentry *new_dentry)
struct inode *new_dir, struct dentry *new_dentry,
unsigned int flags)
{
const char *old_name = old_dentry->d_name.name;
const char *new_name = new_dentry->d_name.name;
@ -299,6 +300,9 @@ static int coda_rename(struct inode *old_dir, struct dentry *old_dentry,
int new_length = new_dentry->d_name.len;
int error;
if (flags)
return -EINVAL;
error = venus_rename(old_dir->i_sb, coda_i2f(old_dir),
coda_i2f(new_dir), old_length, new_length,
(const char *) old_name, (const char *)new_name);
@ -569,7 +573,7 @@ const struct inode_operations coda_dir_inode_operations = {
.mkdir = coda_mkdir,
.rmdir = coda_rmdir,
.mknod = CODA_EIO_ERROR,
.rename = coda_rename,
.rename2 = coda_rename,
.permission = coda_permission,
.getattr = coda_getattr,
.setattr = coda_setattr,