Commit cc26f593 authored by ZhangGuoDong's avatar ZhangGuoDong Committed by Steve French
Browse files

smb: move copychunk definitions to common/smb2pdu.h



Rename 3 places:

  - copychunk_ioctl -> copychunk_ioctl_req
  - copychunk -> srv_copychunk
  - server: ResumeKey -> SourceKeyU64

Merge the struct members of the server and the client, then move duplicate
definitions to common header file.

Co-developed-by: default avatarChenXiaoSong <chenxiaosong@kylinos.cn>
Signed-off-by: default avatarChenXiaoSong <chenxiaosong@kylinos.cn>
Signed-off-by: default avatarZhangGuoDong <zhangguodong@kylinos.cn>
Acked-by: default avatarNamjae Jeon <linkinjeon@kernel.org>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 7844d50c
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -1323,14 +1323,6 @@ typedef struct smb_com_ntransact_rsp {
	/* parms and data follow */
} __attribute__((packed)) NTRANSACT_RSP;

/* See MS-SMB 2.2.7.2.1.1 */
struct srv_copychunk {
	__le64 SourceOffset;
	__le64 DestinationOffset;
	__le32 CopyLength;
	__u32  Reserved;
} __packed;

typedef struct smb_com_transaction_ioctl_req {
	struct smb_hdr hdr;	/* wct = 23 */
	__u8 MaxSetupCount;
+3 −3
Original line number Diff line number Diff line
@@ -1524,7 +1524,7 @@ smb2_close_getattr(const unsigned int xid, struct cifs_tcon *tcon,
static int
SMB2_request_res_key(const unsigned int xid, struct cifs_tcon *tcon,
		     u64 persistent_fid, u64 volatile_fid,
		     struct copychunk_ioctl *pcchunk)
		     struct copychunk_ioctl_req *pcchunk)
{
	int rc;
	unsigned int ret_data_len;
@@ -1857,10 +1857,10 @@ smb2_copychunk_range(const unsigned int xid,
{
	int rc = 0;
	unsigned int ret_data_len = 0;
	struct copychunk_ioctl *cc_req = NULL;
	struct copychunk_ioctl_req *cc_req = NULL;
	struct copychunk_ioctl_rsp *cc_rsp = NULL;
	struct cifs_tcon *tcon;
	struct copychunk *chunk;
	struct srv_copychunk *chunk;
	u32 chunks, chunk_count, chunk_bytes;
	u32 copy_bytes, copy_bytes_left;
	u32 chunks_written, bytes_written;
+0 −24
Original line number Diff line number Diff line
@@ -193,36 +193,12 @@ struct crt_sd_ctxt {
	struct smb3_sd sd;
} __packed;


#define COPY_CHUNK_RES_KEY_SIZE	24
struct resume_key_req {
	char ResumeKey[COPY_CHUNK_RES_KEY_SIZE];
	__le32	ContextLength;	/* MBZ */
	char	Context[];	/* ignored, Windows sets to 4 bytes of zero */
} __packed;


struct copychunk {
	__le64 SourceOffset;
	__le64 TargetOffset;
	__le32 Length;
	__le32 Reserved;
} __packed;

/* this goes in the ioctl buffer when doing a copychunk request */
struct copychunk_ioctl {
	char SourceKey[COPY_CHUNK_RES_KEY_SIZE];
	__le32 ChunkCount;
	__le32 Reserved;
	struct copychunk Chunks[];
} __packed;

struct copychunk_ioctl_rsp {
	__le32 ChunksWritten;
	__le32 ChunkBytesWritten;
	__le32 TotalBytesWritten;
} __packed;

/* See MS-FSCC 2.3.29 and 2.3.30 */
struct get_retrieval_pointer_count_req {
	__le64 StartingVcn; /* virtual cluster number (signed) */
+29 −0
Original line number Diff line number Diff line
@@ -1388,6 +1388,35 @@ struct smb2_ioctl_req {
	__u8   Buffer[];
} __packed;

/* See MS-SMB2 2.2.31.1.1 */
struct srv_copychunk {
	__le64 SourceOffset;
	__le64 TargetOffset;
	__le32 Length;
	__le32 Reserved;
} __packed;

#define COPY_CHUNK_RES_KEY_SIZE	24

/* See MS-SMB2 2.2.31.1 */
/* this goes in the ioctl buffer when doing a copychunk request */
struct copychunk_ioctl_req {
	union {
		char SourceKey[COPY_CHUNK_RES_KEY_SIZE];
		__le64 SourceKeyU64[3];
	};
	__le32 ChunkCount;
	__le32 Reserved;
	struct srv_copychunk Chunks[] __counted_by_le(ChunkCount);
} __packed;

/* See MS-SMB2 2.2.32.1 */
struct copychunk_ioctl_rsp {
	__le32 ChunksWritten;
	__le32 ChunkBytesWritten;
	__le32 TotalBytesWritten;
} __packed;

struct smb2_ioctl_rsp {
	struct smb2_hdr hdr;
	__le16 StructureSize; /* Must be 49 */
+2 −2
Original line number Diff line number Diff line
@@ -7754,11 +7754,11 @@ static int fsctl_copychunk(struct ksmbd_work *work,
	}

	src_fp = ksmbd_lookup_foreign_fd(work,
					 le64_to_cpu(ci_req->ResumeKey[0]));
					 le64_to_cpu(ci_req->SourceKeyU64[0]));
	dst_fp = ksmbd_lookup_fd_slow(work, volatile_id, persistent_id);
	ret = -EINVAL;
	if (!src_fp ||
	    src_fp->persistent_id != le64_to_cpu(ci_req->ResumeKey[1])) {
	    src_fp->persistent_id != le64_to_cpu(ci_req->SourceKeyU64[1])) {
		rsp->hdr.Status = STATUS_OBJECT_NAME_NOT_FOUND;
		goto out;
	}
Loading