mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 14:41:22 -05:00
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: ChenXiaoSong <chenxiaosong@kylinos.cn> Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn> Signed-off-by: ZhangGuoDong <zhangguodong@kylinos.cn> Acked-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
committed by
Steve French
parent
7844d50ca2
commit
cc26f593dc
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -174,26 +174,6 @@ struct resume_key_ioctl_rsp {
|
||||
__u8 Context[4]; /* ignored, Windows sets to 4 bytes of zero */
|
||||
} __packed;
|
||||
|
||||
struct srv_copychunk {
|
||||
__le64 SourceOffset;
|
||||
__le64 TargetOffset;
|
||||
__le32 Length;
|
||||
__le32 Reserved;
|
||||
} __packed;
|
||||
|
||||
struct copychunk_ioctl_req {
|
||||
__le64 ResumeKey[3];
|
||||
__le32 ChunkCount;
|
||||
__le32 Reserved;
|
||||
struct srv_copychunk Chunks[] __counted_by_le(ChunkCount);
|
||||
} __packed;
|
||||
|
||||
struct copychunk_ioctl_rsp {
|
||||
__le32 ChunksWritten;
|
||||
__le32 ChunkBytesWritten;
|
||||
__le32 TotalBytesWritten;
|
||||
} __packed;
|
||||
|
||||
struct file_sparse {
|
||||
__u8 SetSparse;
|
||||
} __packed;
|
||||
|
||||
Reference in New Issue
Block a user