[PATCH v4 19/24] smb/server: remove create_durable_reconn_req

chenxiaosong.chenxiaosong@linux.dev posted 24 patches 3 months, 1 week ago
There is a newer version of this series
[PATCH v4 19/24] smb/server: remove create_durable_reconn_req
Posted by chenxiaosong.chenxiaosong@linux.dev 3 months, 1 week ago
From: ChenXiaoSong <chenxiaosong@kylinos.cn>

The fields in struct create_durable_reconn_req and struct create_durable
are exactly the same.

Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
---
 fs/smb/server/smb2pdu.c |  6 +++---
 fs/smb/server/smb2pdu.h | 12 ------------
 2 files changed, 3 insertions(+), 15 deletions(-)

diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c
index 6b3503c7bfaa..3e8344fa163b 100644
--- a/fs/smb/server/smb2pdu.c
+++ b/fs/smb/server/smb2pdu.c
@@ -2766,7 +2766,7 @@ static int parse_durable_handle_context(struct ksmbd_work *work,
 		}
 		case DURABLE_RECONN:
 		{
-			struct create_durable_reconn_req *recon;
+			struct create_durable *recon;
 
 			if (dh_info->type == DURABLE_RECONN_V2 ||
 			    dh_info->type == DURABLE_REQ_V2) {
@@ -2776,12 +2776,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(struct create_durable)) {
 				err = -EINVAL;
 				goto out;
 			}
 
-			recon = (struct create_durable_reconn_req *)context;
+			recon = (struct create_durable *)context;
 			persistent_id = recon->Data.Fid.PersistentFileId;
 			dh_info->fp = ksmbd_lookup_durable_fd(persistent_id);
 			if (!dh_info->fp) {
diff --git a/fs/smb/server/smb2pdu.h b/fs/smb/server/smb2pdu.h
index 099e9f20812b..6c8102d5cea5 100644
--- a/fs/smb/server/smb2pdu.h
+++ b/fs/smb/server/smb2pdu.h
@@ -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];
-- 
2.43.0
Re: [PATCH v4 19/24] smb/server: remove create_durable_reconn_req
Posted by Namjae Jeon 3 months, 1 week ago
On Mon, Oct 27, 2025 at 4:23 PM <chenxiaosong.chenxiaosong@linux.dev> wrote:
>
> From: ChenXiaoSong <chenxiaosong@kylinos.cn>
>
> The fields in struct create_durable_reconn_req and struct create_durable
> are exactly the same.
>
> Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
> ---
>  fs/smb/server/smb2pdu.c |  6 +++---
>  fs/smb/server/smb2pdu.h | 12 ------------
>  2 files changed, 3 insertions(+), 15 deletions(-)
>
> diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c
> index 6b3503c7bfaa..3e8344fa163b 100644
> --- a/fs/smb/server/smb2pdu.c
> +++ b/fs/smb/server/smb2pdu.c
> @@ -2766,7 +2766,7 @@ static int parse_durable_handle_context(struct ksmbd_work *work,
>                 }
>                 case DURABLE_RECONN:
>                 {
> -                       struct create_durable_reconn_req *recon;
> +                       struct create_durable *recon;
>
>                         if (dh_info->type == DURABLE_RECONN_V2 ||
>                             dh_info->type == DURABLE_REQ_V2) {
> @@ -2776,12 +2776,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(struct create_durable)) {
Please check the specification, Which structure name is correct?
thanks.
Re: [PATCH v4 19/24] smb/server: remove create_durable_reconn_req
Posted by ChenXiaoSong 3 months, 1 week ago
They 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

We can uniformly name them create_durable:

struct create_durable {
         ...
         union {
                 __u8  Reserved[16]; // DurableRequest of 
SMB2_CREATE_DURABLE_HANDLE_REQUEST, A 16-byte field that MUST NOT be 
used and MUST be reserved. This value MUST be set to 0 by the client and 
ignored by the server.
                 struct {
                         __u64 PersistentFileId; // See 2.2.14.1 SMB2_FILEID
                         __u64 VolatileFileId;   // See 2.2.14.1 SMB2_FILEID
                 } Fid; // Data of SMB2_CREATE_DURABLE_HANDLE_RECONNECT, 
An SMB2_FILEID structure, as specified in section 2.2.14.1, for the open 
that is being reestablished.
         } Data;
} __packed;

Thanks,
ChenXiaoSong.

On 10/29/25 11:54 AM, Namjae Jeon wrote:
> On Mon, Oct 27, 2025 at 4:23 PM <chenxiaosong.chenxiaosong@linux.dev> wrote:
>>
>> From: ChenXiaoSong <chenxiaosong@kylinos.cn>
>>
>> The fields in struct create_durable_reconn_req and struct create_durable
>> are exactly the same.
>>
>> Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
>> ---
>>   fs/smb/server/smb2pdu.c |  6 +++---
>>   fs/smb/server/smb2pdu.h | 12 ------------
>>   2 files changed, 3 insertions(+), 15 deletions(-)
>>
>> diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c
>> index 6b3503c7bfaa..3e8344fa163b 100644
>> --- a/fs/smb/server/smb2pdu.c
>> +++ b/fs/smb/server/smb2pdu.c
>> @@ -2766,7 +2766,7 @@ static int parse_durable_handle_context(struct ksmbd_work *work,
>>                  }
>>                  case DURABLE_RECONN:
>>                  {
>> -                       struct create_durable_reconn_req *recon;
>> +                       struct create_durable *recon;
>>
>>                          if (dh_info->type == DURABLE_RECONN_V2 ||
>>                              dh_info->type == DURABLE_REQ_V2) {
>> @@ -2776,12 +2776,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(struct create_durable)) {
> Please check the specification, Which structure name is correct?
> thanks.