Commit bf3c90ee authored by Amir Goldstein's avatar Amir Goldstein Committed by Steve French

cifs: copy_file_range needs to strip setuid bits and update timestamps

cifs has both source and destination inodes locked throughout the copy.
Like ->write_iter(), we update mtime and strip setuid bits of destination
file before copy and like ->read_iter(), we update atime of source file
after copy.
Signed-off-by: default avatarAmir Goldstein <amir73il@gmail.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 7e5a70ad
...@@ -1104,6 +1104,10 @@ ssize_t cifs_file_copychunk_range(unsigned int xid, ...@@ -1104,6 +1104,10 @@ ssize_t cifs_file_copychunk_range(unsigned int xid,
goto out; goto out;
} }
rc = -EOPNOTSUPP;
if (!target_tcon->ses->server->ops->copychunk_range)
goto out;
/* /*
* Note: cifs case is easier than btrfs since server responsible for * Note: cifs case is easier than btrfs since server responsible for
* checks for proper open modes and file type and if it wants * checks for proper open modes and file type and if it wants
...@@ -1115,11 +1119,12 @@ ssize_t cifs_file_copychunk_range(unsigned int xid, ...@@ -1115,11 +1119,12 @@ ssize_t cifs_file_copychunk_range(unsigned int xid,
/* should we flush first and last page first */ /* should we flush first and last page first */
truncate_inode_pages(&target_inode->i_data, 0); truncate_inode_pages(&target_inode->i_data, 0);
if (target_tcon->ses->server->ops->copychunk_range) rc = file_modified(dst_file);
if (!rc)
rc = target_tcon->ses->server->ops->copychunk_range(xid, rc = target_tcon->ses->server->ops->copychunk_range(xid,
smb_file_src, smb_file_target, off, len, destoff); smb_file_src, smb_file_target, off, len, destoff);
else
rc = -EOPNOTSUPP; file_accessed(src_file);
/* force revalidate of size and timestamps of target file now /* force revalidate of size and timestamps of target file now
* that target is updated on the server * that target is updated on the server
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment