mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 18:43:33 +02: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:
parent
7844d50ca2
commit
cc26f593dc
|
|
@ -1323,14 +1323,6 @@ typedef struct smb_com_ntransact_rsp {
|
||||||
/* parms and data follow */
|
/* parms and data follow */
|
||||||
} __attribute__((packed)) NTRANSACT_RSP;
|
} __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 {
|
typedef struct smb_com_transaction_ioctl_req {
|
||||||
struct smb_hdr hdr; /* wct = 23 */
|
struct smb_hdr hdr; /* wct = 23 */
|
||||||
__u8 MaxSetupCount;
|
__u8 MaxSetupCount;
|
||||||
|
|
|
||||||
|
|
@ -1524,7 +1524,7 @@ smb2_close_getattr(const unsigned int xid, struct cifs_tcon *tcon,
|
||||||
static int
|
static int
|
||||||
SMB2_request_res_key(const unsigned int xid, struct cifs_tcon *tcon,
|
SMB2_request_res_key(const unsigned int xid, struct cifs_tcon *tcon,
|
||||||
u64 persistent_fid, u64 volatile_fid,
|
u64 persistent_fid, u64 volatile_fid,
|
||||||
struct copychunk_ioctl *pcchunk)
|
struct copychunk_ioctl_req *pcchunk)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
unsigned int ret_data_len;
|
unsigned int ret_data_len;
|
||||||
|
|
@ -1857,10 +1857,10 @@ smb2_copychunk_range(const unsigned int xid,
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
unsigned int ret_data_len = 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 copychunk_ioctl_rsp *cc_rsp = NULL;
|
||||||
struct cifs_tcon *tcon;
|
struct cifs_tcon *tcon;
|
||||||
struct copychunk *chunk;
|
struct srv_copychunk *chunk;
|
||||||
u32 chunks, chunk_count, chunk_bytes;
|
u32 chunks, chunk_count, chunk_bytes;
|
||||||
u32 copy_bytes, copy_bytes_left;
|
u32 copy_bytes, copy_bytes_left;
|
||||||
u32 chunks_written, bytes_written;
|
u32 chunks_written, bytes_written;
|
||||||
|
|
|
||||||
|
|
@ -193,36 +193,12 @@ struct crt_sd_ctxt {
|
||||||
struct smb3_sd sd;
|
struct smb3_sd sd;
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
|
|
||||||
#define COPY_CHUNK_RES_KEY_SIZE 24
|
|
||||||
struct resume_key_req {
|
struct resume_key_req {
|
||||||
char ResumeKey[COPY_CHUNK_RES_KEY_SIZE];
|
char ResumeKey[COPY_CHUNK_RES_KEY_SIZE];
|
||||||
__le32 ContextLength; /* MBZ */
|
__le32 ContextLength; /* MBZ */
|
||||||
char Context[]; /* ignored, Windows sets to 4 bytes of zero */
|
char Context[]; /* ignored, Windows sets to 4 bytes of zero */
|
||||||
} __packed;
|
} __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 */
|
/* See MS-FSCC 2.3.29 and 2.3.30 */
|
||||||
struct get_retrieval_pointer_count_req {
|
struct get_retrieval_pointer_count_req {
|
||||||
__le64 StartingVcn; /* virtual cluster number (signed) */
|
__le64 StartingVcn; /* virtual cluster number (signed) */
|
||||||
|
|
|
||||||
|
|
@ -1388,6 +1388,35 @@ struct smb2_ioctl_req {
|
||||||
__u8 Buffer[];
|
__u8 Buffer[];
|
||||||
} __packed;
|
} __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_ioctl_rsp {
|
||||||
struct smb2_hdr hdr;
|
struct smb2_hdr hdr;
|
||||||
__le16 StructureSize; /* Must be 49 */
|
__le16 StructureSize; /* Must be 49 */
|
||||||
|
|
|
||||||
|
|
@ -7754,11 +7754,11 @@ static int fsctl_copychunk(struct ksmbd_work *work,
|
||||||
}
|
}
|
||||||
|
|
||||||
src_fp = ksmbd_lookup_foreign_fd(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);
|
dst_fp = ksmbd_lookup_fd_slow(work, volatile_id, persistent_id);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
if (!src_fp ||
|
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;
|
rsp->hdr.Status = STATUS_OBJECT_NAME_NOT_FOUND;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -174,26 +174,6 @@ struct resume_key_ioctl_rsp {
|
||||||
__u8 Context[4]; /* ignored, Windows sets to 4 bytes of zero */
|
__u8 Context[4]; /* ignored, Windows sets to 4 bytes of zero */
|
||||||
} __packed;
|
} __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 {
|
struct file_sparse {
|
||||||
__u8 SetSparse;
|
__u8 SetSparse;
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user