Commit 5003ad71 authored by ChenXiaoSong's avatar ChenXiaoSong Committed by Steve French
Browse files

smb: move create_durable_reconn to common/smb2pdu.h



The fields in struct create_durable_reconn_req and struct create_durable
are exactly the same, so remove create_durable_reconn_req from server,
and use typedef to define both create_durable_req_t and
create_durable_reconn_t for a single struct.

Rename the following places:

  - struct create_durable -> create_durable_req_t
  - struct create_durable_reconn_req -> create_durable_reconn_t

The documentation references are:

  - SMB2_CREATE_DURABLE_HANDLE_REQUEST   in MS-SMB2 2.2.13.2.3
  - SMB2_CREATE_DURABLE_HANDLE_RECONNECT in MS-SMB2 2.2.13.2.4
  - SMB2_FILEID in MS-SMB2 2.2.14.1

Descriptions of the struct fields:

  - __u8  Reserved[16]: DurableRequest field of SMB2_CREATE_DURABLE_HANDLE_REQUEST.
                        A 16-byte field that MUST be reserved.
  - __u64 PersistentFileId: Persistent field of 2.2.14.1 SMB2_FILEID
  - __u64 VolatileFileId: Volatile field of 2.2.14.1 SMB2_FILEID
  - struct Fid: Data field of SMB2_CREATE_DURABLE_HANDLE_RECONNECT.
                An SMB2_FILEID structure, as specified in section 2.2.14.1.

Suggested-by: default avatarNamjae Jeon <linkinjeon@kernel.org>
Signed-off-by: default avatarChenXiaoSong <chenxiaosong@kylinos.cn>
Acked-by: default avatarNamjae Jeon <linkinjeon@kernel.org>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent e7e60e8b
Loading
Loading
Loading
Loading
+11 −12
Original line number Diff line number Diff line
@@ -2229,21 +2229,20 @@ SMB2_tdis(const unsigned int xid, struct cifs_tcon *tcon)
	return rc;
}


static struct create_durable *
static create_durable_req_t *
create_durable_buf(void)
{
	struct create_durable *buf;
	create_durable_req_t *buf;

	buf = kzalloc(sizeof(struct create_durable), GFP_KERNEL);
	buf = kzalloc(sizeof(create_durable_req_t), GFP_KERNEL);
	if (!buf)
		return NULL;

	buf->ccontext.DataOffset = cpu_to_le16(offsetof
					(struct create_durable, Data));
					(create_durable_req_t, Data));
	buf->ccontext.DataLength = cpu_to_le32(16);
	buf->ccontext.NameOffset = cpu_to_le16(offsetof
				(struct create_durable, Name));
				(create_durable_req_t, Name));
	buf->ccontext.NameLength = cpu_to_le16(4);
	/* SMB2_CREATE_DURABLE_HANDLE_REQUEST is "DHnQ" */
	buf->Name[0] = 'D';
@@ -2253,20 +2252,20 @@ create_durable_buf(void)
	return buf;
}

static struct create_durable *
static create_durable_req_t *
create_reconnect_durable_buf(struct cifs_fid *fid)
{
	struct create_durable *buf;
	create_durable_req_t *buf;

	buf = kzalloc(sizeof(struct create_durable), GFP_KERNEL);
	buf = kzalloc(sizeof(create_durable_req_t), GFP_KERNEL);
	if (!buf)
		return NULL;

	buf->ccontext.DataOffset = cpu_to_le16(offsetof
					(struct create_durable, Data));
					(create_durable_req_t, Data));
	buf->ccontext.DataLength = cpu_to_le32(16);
	buf->ccontext.NameOffset = cpu_to_le16(offsetof
				(struct create_durable, Name));
				(create_durable_req_t, Name));
	buf->ccontext.NameLength = cpu_to_le16(4);
	buf->Data.Fid.PersistentFileId = fid->persistent_fid;
	buf->Data.Fid.VolatileFileId = fid->volatile_fid;
@@ -2552,7 +2551,7 @@ add_durable_context(struct kvec *iov, unsigned int *num_iovec,
		iov[num].iov_base = create_durable_buf();
	if (iov[num].iov_base == NULL)
		return -ENOMEM;
	iov[num].iov_len = sizeof(struct create_durable);
	iov[num].iov_len = sizeof(create_durable_req_t);
	*num_iovec = num + 1;
	return 0;
}
+2 −2
Original line number Diff line number Diff line
@@ -1265,7 +1265,7 @@ struct create_posix {
} __packed;

/* See MS-SMB2 2.2.13.2.3 and MS-SMB2 2.2.13.2.4 */
struct create_durable {
typedef struct {
	struct create_context_hdr ccontext;
	__u8   Name[8];
	union {
@@ -1275,7 +1275,7 @@ struct create_durable {
			__u64 VolatileFileId;
		} Fid;
	} Data;
} __packed;
} __packed create_durable_req_t, create_durable_reconn_t;

/* See MS-SMB2 2.2.13.2.5 */
struct create_mxac_req {
+3 −3
Original line number Diff line number Diff line
@@ -2756,7 +2756,7 @@ static int parse_durable_handle_context(struct ksmbd_work *work,
		}
		case DURABLE_RECONN:
		{
			struct create_durable_reconn_req *recon;
			create_durable_reconn_t *recon;

			if (dh_info->type == DURABLE_RECONN_V2 ||
			    dh_info->type == DURABLE_REQ_V2) {
@@ -2766,12 +2766,12 @@ static int parse_durable_handle_context(struct ksmbd_work *work,

			if (le16_to_cpu(context->DataOffset) +
				le32_to_cpu(context->DataLength) <
			    sizeof(struct create_durable_reconn_req)) {
			    sizeof(create_durable_reconn_t)) {
				err = -EINVAL;
				goto out;
			}

			recon = (struct create_durable_reconn_req *)context;
			recon = (create_durable_reconn_t *)context;
			persistent_id = recon->Data.Fid.PersistentFileId;
			dh_info->fp = ksmbd_lookup_durable_fd(persistent_id);
			if (!dh_info->fp) {
+0 −12
Original line number Diff line number Diff line
@@ -68,18 +68,6 @@ struct preauth_integrity_info {

#define DURABLE_HANDLE_MAX_TIMEOUT	300000

struct create_durable_reconn_req {
	struct create_context_hdr ccontext;
	__u8   Name[8];
	union {
		__u8  Reserved[16];
		struct {
			__u64 PersistentFileId;
			__u64 VolatileFileId;
		} Fid;
	} Data;
} __packed;

struct create_alloc_size_req {
	struct create_context_hdr ccontext;
	__u8   Name[8];