diff options
author | Steve French <stfrench@microsoft.com> | 2020-02-26 01:08:54 +0100 |
---|---|---|
committer | Steve French <stfrench@microsoft.com> | 2020-03-23 04:49:09 +0100 |
commit | c7e9f78f7b459885ee472d661473aa87a0f24c04 (patch) | |
tree | 390322ab08b2de20c0dfb9452fc801964944aac7 /fs/cifs | |
parent | cifs: add SMB2_open() arg to return POSIX data (diff) | |
download | linux-c7e9f78f7b459885ee472d661473aa87a0f24c04.tar.xz linux-c7e9f78f7b459885ee472d661473aa87a0f24c04.zip |
cifs: do d_move in rename
See commit 349457ccf2592c14bdf13b6706170ae2e94931b1
"Allow file systems to manually d_move() inside of ->rename()"
Lessens possibility of race conditions in rename
Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'fs/cifs')
-rw-r--r-- | fs/cifs/cifsfs.c | 4 | ||||
-rw-r--r-- | fs/cifs/inode.c | 2 |
2 files changed, 4 insertions, 2 deletions
diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c index fa77fe5258b0..94e3ed4850b5 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c @@ -1018,7 +1018,7 @@ struct file_system_type cifs_fs_type = { .name = "cifs", .mount = cifs_do_mount, .kill_sb = cifs_kill_sb, - /* .fs_flags */ + .fs_flags = FS_RENAME_DOES_D_MOVE, }; MODULE_ALIAS_FS("cifs"); @@ -1027,7 +1027,7 @@ static struct file_system_type smb3_fs_type = { .name = "smb3", .mount = smb3_do_mount, .kill_sb = cifs_kill_sb, - /* .fs_flags */ + .fs_flags = FS_RENAME_DOES_D_MOVE, }; MODULE_ALIAS_FS("smb3"); MODULE_ALIAS("smb3"); diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index e6d66977a81d..8d01ec2dca66 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c @@ -1835,6 +1835,8 @@ cifs_do_rename(const unsigned int xid, struct dentry *from_dentry, CIFSSMBClose(xid, tcon, fid.netfid); } do_rename_exit: + if (rc == 0) + d_move(from_dentry, to_dentry); cifs_put_tlink(tlink); return rc; } |