Commit 312bbc59 authored by Sachin Prabhu's avatar Sachin Prabhu Committed by Steve French

SMB3: Rename clone_range to copychunk_range

Server side copy is one of the most important mechanisms smb2/smb3
supports and it was unintentionally disabled for most use cases.

Renaming calls to reflect the underlying smb2 ioctl called. This is
similar to the name duplicate_extents used for a similar ioctl which is
also used to duplicate files by reusing fs blocks. The name change is to
avoid confusion.
Signed-off-by: default avatarSachin Prabhu <sprabhu@redhat.com>
CC: Stable <stable@vger.kernel.org>
Signed-off-by: default avatarSteve French <smfrench@gmail.com>
Reviewed-by: default avatarPavel Shilovsky <pshilov@microsoft.com>
parent 38bd4906
...@@ -408,7 +408,8 @@ struct smb_version_operations { ...@@ -408,7 +408,8 @@ struct smb_version_operations {
char * (*create_lease_buf)(u8 *, u8); char * (*create_lease_buf)(u8 *, u8);
/* parse lease context buffer and return oplock/epoch info */ /* parse lease context buffer and return oplock/epoch info */
__u8 (*parse_lease_buf)(void *, unsigned int *); __u8 (*parse_lease_buf)(void *, unsigned int *);
int (*clone_range)(const unsigned int, struct cifsFileInfo *src_file, int (*copychunk_range)(const unsigned int,
struct cifsFileInfo *src_file,
struct cifsFileInfo *target_file, u64 src_off, u64 len, struct cifsFileInfo *target_file, u64 src_off, u64 len,
u64 dest_off); u64 dest_off);
int (*duplicate_extents)(const unsigned int, struct cifsFileInfo *src, int (*duplicate_extents)(const unsigned int, struct cifsFileInfo *src,
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
#include "cifs_ioctl.h" #include "cifs_ioctl.h"
#include <linux/btrfs.h> #include <linux/btrfs.h>
static int cifs_file_clone_range(unsigned int xid, struct file *src_file, static int cifs_file_copychunk_range(unsigned int xid, struct file *src_file,
struct file *dst_file) struct file *dst_file)
{ {
struct inode *src_inode = file_inode(src_file); struct inode *src_inode = file_inode(src_file);
...@@ -45,7 +45,7 @@ static int cifs_file_clone_range(unsigned int xid, struct file *src_file, ...@@ -45,7 +45,7 @@ static int cifs_file_clone_range(unsigned int xid, struct file *src_file,
struct cifs_tcon *target_tcon; struct cifs_tcon *target_tcon;
int rc; int rc;
cifs_dbg(FYI, "ioctl clone range\n"); cifs_dbg(FYI, "ioctl copychunk range\n");
if (!src_file->private_data || !dst_file->private_data) { if (!src_file->private_data || !dst_file->private_data) {
rc = -EBADF; rc = -EBADF;
...@@ -75,8 +75,8 @@ static int cifs_file_clone_range(unsigned int xid, struct file *src_file, ...@@ -75,8 +75,8 @@ static int cifs_file_clone_range(unsigned int xid, struct file *src_file,
/* 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->clone_range) if (target_tcon->ses->server->ops->copychunk_range)
rc = target_tcon->ses->server->ops->clone_range(xid, rc = target_tcon->ses->server->ops->copychunk_range(xid,
smb_file_src, smb_file_target, 0, src_inode->i_size, 0); smb_file_src, smb_file_target, 0, src_inode->i_size, 0);
else else
rc = -EOPNOTSUPP; rc = -EOPNOTSUPP;
...@@ -91,14 +91,14 @@ static int cifs_file_clone_range(unsigned int xid, struct file *src_file, ...@@ -91,14 +91,14 @@ static int cifs_file_clone_range(unsigned int xid, struct file *src_file,
return rc; return rc;
} }
static long cifs_ioctl_clone(unsigned int xid, struct file *dst_file, static long cifs_ioctl_copychunk(unsigned int xid, struct file *dst_file,
unsigned long srcfd) unsigned long srcfd)
{ {
int rc; int rc;
struct fd src_file; struct fd src_file;
struct inode *src_inode; struct inode *src_inode;
cifs_dbg(FYI, "ioctl clone range\n"); cifs_dbg(FYI, "ioctl copychunk range\n");
/* the destination must be opened for writing */ /* the destination must be opened for writing */
if (!(dst_file->f_mode & FMODE_WRITE)) { if (!(dst_file->f_mode & FMODE_WRITE)) {
cifs_dbg(FYI, "file target not open for write\n"); cifs_dbg(FYI, "file target not open for write\n");
...@@ -129,7 +129,7 @@ static long cifs_ioctl_clone(unsigned int xid, struct file *dst_file, ...@@ -129,7 +129,7 @@ static long cifs_ioctl_clone(unsigned int xid, struct file *dst_file,
if (S_ISDIR(src_inode->i_mode)) if (S_ISDIR(src_inode->i_mode))
goto out_fput; goto out_fput;
rc = cifs_file_clone_range(xid, src_file.file, dst_file); rc = cifs_file_copychunk_range(xid, src_file.file, dst_file);
out_fput: out_fput:
fdput(src_file); fdput(src_file);
...@@ -251,7 +251,7 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg) ...@@ -251,7 +251,7 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg)
} }
break; break;
case CIFS_IOC_COPYCHUNK_FILE: case CIFS_IOC_COPYCHUNK_FILE:
rc = cifs_ioctl_clone(xid, filep, arg); rc = cifs_ioctl_copychunk(xid, filep, arg);
break; break;
case CIFS_IOC_SET_INTEGRITY: case CIFS_IOC_SET_INTEGRITY:
if (pSMBFile == NULL) if (pSMBFile == NULL)
......
...@@ -593,7 +593,7 @@ SMB2_request_res_key(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -593,7 +593,7 @@ SMB2_request_res_key(const unsigned int xid, struct cifs_tcon *tcon,
} }
static int static int
smb2_clone_range(const unsigned int xid, smb2_copychunk_range(const unsigned int xid,
struct cifsFileInfo *srcfile, struct cifsFileInfo *srcfile,
struct cifsFileInfo *trgtfile, u64 src_off, struct cifsFileInfo *trgtfile, u64 src_off,
u64 len, u64 dest_off) u64 len, u64 dest_off)
...@@ -611,7 +611,7 @@ smb2_clone_range(const unsigned int xid, ...@@ -611,7 +611,7 @@ smb2_clone_range(const unsigned int xid,
if (pcchunk == NULL) if (pcchunk == NULL)
return -ENOMEM; return -ENOMEM;
cifs_dbg(FYI, "in smb2_clone_range - about to call request res key\n"); cifs_dbg(FYI, "in smb2_copychunk_range - about to call request res key\n");
/* Request a key from the server to identify the source of the copy */ /* Request a key from the server to identify the source of the copy */
rc = SMB2_request_res_key(xid, tlink_tcon(srcfile->tlink), rc = SMB2_request_res_key(xid, tlink_tcon(srcfile->tlink),
srcfile->fid.persistent_fid, srcfile->fid.persistent_fid,
...@@ -2378,7 +2378,7 @@ struct smb_version_operations smb20_operations = { ...@@ -2378,7 +2378,7 @@ struct smb_version_operations smb20_operations = {
.set_oplock_level = smb2_set_oplock_level, .set_oplock_level = smb2_set_oplock_level,
.create_lease_buf = smb2_create_lease_buf, .create_lease_buf = smb2_create_lease_buf,
.parse_lease_buf = smb2_parse_lease_buf, .parse_lease_buf = smb2_parse_lease_buf,
.clone_range = smb2_clone_range, .copychunk_range = smb2_copychunk_range,
.wp_retry_size = smb2_wp_retry_size, .wp_retry_size = smb2_wp_retry_size,
.dir_needs_close = smb2_dir_needs_close, .dir_needs_close = smb2_dir_needs_close,
.get_dfs_refer = smb2_get_dfs_refer, .get_dfs_refer = smb2_get_dfs_refer,
...@@ -2461,7 +2461,7 @@ struct smb_version_operations smb21_operations = { ...@@ -2461,7 +2461,7 @@ struct smb_version_operations smb21_operations = {
.set_oplock_level = smb21_set_oplock_level, .set_oplock_level = smb21_set_oplock_level,
.create_lease_buf = smb2_create_lease_buf, .create_lease_buf = smb2_create_lease_buf,
.parse_lease_buf = smb2_parse_lease_buf, .parse_lease_buf = smb2_parse_lease_buf,
.clone_range = smb2_clone_range, .copychunk_range = smb2_copychunk_range,
.wp_retry_size = smb2_wp_retry_size, .wp_retry_size = smb2_wp_retry_size,
.dir_needs_close = smb2_dir_needs_close, .dir_needs_close = smb2_dir_needs_close,
.enum_snapshots = smb3_enum_snapshots, .enum_snapshots = smb3_enum_snapshots,
...@@ -2548,7 +2548,7 @@ struct smb_version_operations smb30_operations = { ...@@ -2548,7 +2548,7 @@ struct smb_version_operations smb30_operations = {
.set_oplock_level = smb3_set_oplock_level, .set_oplock_level = smb3_set_oplock_level,
.create_lease_buf = smb3_create_lease_buf, .create_lease_buf = smb3_create_lease_buf,
.parse_lease_buf = smb3_parse_lease_buf, .parse_lease_buf = smb3_parse_lease_buf,
.clone_range = smb2_clone_range, .copychunk_range = smb2_copychunk_range,
.duplicate_extents = smb2_duplicate_extents, .duplicate_extents = smb2_duplicate_extents,
.validate_negotiate = smb3_validate_negotiate, .validate_negotiate = smb3_validate_negotiate,
.wp_retry_size = smb2_wp_retry_size, .wp_retry_size = smb2_wp_retry_size,
...@@ -2643,7 +2643,7 @@ struct smb_version_operations smb311_operations = { ...@@ -2643,7 +2643,7 @@ struct smb_version_operations smb311_operations = {
.set_oplock_level = smb3_set_oplock_level, .set_oplock_level = smb3_set_oplock_level,
.create_lease_buf = smb3_create_lease_buf, .create_lease_buf = smb3_create_lease_buf,
.parse_lease_buf = smb3_parse_lease_buf, .parse_lease_buf = smb3_parse_lease_buf,
.clone_range = smb2_clone_range, .copychunk_range = smb2_copychunk_range,
.duplicate_extents = smb2_duplicate_extents, .duplicate_extents = smb2_duplicate_extents,
/* .validate_negotiate = smb3_validate_negotiate, */ /* not used in 3.11 */ /* .validate_negotiate = smb3_validate_negotiate, */ /* not used in 3.11 */
.wp_retry_size = smb2_wp_retry_size, .wp_retry_size = smb2_wp_retry_size,
......
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