From nobody Sun Feb 8 11:26:00 2026 Received: from out-172.mta0.migadu.com (out-172.mta0.migadu.com [91.218.175.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4E2E1214204 for ; Sun, 2 Nov 2025 07:32:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068742; cv=none; b=HHy0QWD7aQaxdI5qqa58oJ18APlVuITu208//5pvmA1IECn0foDH2iX6Wz7pP1VLR0U2epBl4KFP+Q8gGlzNUbAia6dDoke1+9m6LnYGtCZpl0eRPIJg1632C+UZ6BsxMX1V4DGx6/PusAH/bkXPHqdEGjLB8+T3b3W8maZ2YXg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068742; c=relaxed/simple; bh=lv0j/YcQFKnUdk2DHk6VDntmzv28QzwppahtJd7spvY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=p/RgW8s1xyA9+cJxLQf5VJCrTk4Vli4OtpYeqIBhbnUm1oAR4opR8fcWU2UNeRtKF5nHQcY29RYfj7cJp1oEaeqVvXq9G5iacZqD7l6LUsEet3EB+H/ZU0e6BY5xN68St4kWQ9s+e8J27E4ms2qBC3dW1OFbMn7MlONnpXZh/xU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=vSCcAmoF; arc=none smtp.client-ip=91.218.175.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="vSCcAmoF" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1762068738; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fRMYMmekqqB7pIlz/+ak7bgcPvJClWJupmxwrOImkfI=; b=vSCcAmoF1xy82lMvssN4AVU0mW/KDxleHuk8icuFO3M2ij8CWnKbkdGpUxgIUnCu8hBBi0 jjTvQMRWsUGKmNvu1oGcVO+rNojoRKOl+Iu5Mz7rYocr3BzQ1/V2CqLa9a7WerzJiAWxpb QLAe9LoGU/nHC7Y8fvHPFILTCONCTE0= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org, christophe.jaillet@wanadoo.fr Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ChenXiaoSong Subject: [PATCH v5 01/14] smb/client: fix CAP_BULK_TRANSFER value Date: Sun, 2 Nov 2025 15:30:46 +0800 Message-ID: <20251102073059.3681026-2-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ChenXiaoSong See MS-CIFS 2.2.4.52.2. Keep it consistent with the value in the documentation. Signed-off-by: ChenXiaoSong --- fs/smb/client/cifspdu.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/fs/smb/client/cifspdu.h b/fs/smb/client/cifspdu.h index c86a329e5822..aba9caee8302 100644 --- a/fs/smb/client/cifspdu.h +++ b/fs/smb/client/cifspdu.h @@ -711,7 +711,12 @@ struct ntlmv2_resp { =20 #define CIFS_NETWORK_OPSYS "CIFS VFS Client for Linux" =20 -/* Capabilities bits (for NTLM SessSetup request) */ + +/* + * Capabilities bits (for NTLM SessSetup request) + * See MS-CIFS 2.2.4.52.2 + * MS-SMB 2.2.4.5.2.1 + */ #define CAP_UNICODE 0x00000004 #define CAP_LARGE_FILES 0x00000008 #define CAP_NT_SMBS 0x00000010 @@ -719,7 +724,7 @@ struct ntlmv2_resp { #define CAP_LEVEL_II_OPLOCKS 0x00000080 #define CAP_NT_FIND 0x00000200 /* reserved should be zero (because NT_SMBs implies the same thing?) */ -#define CAP_BULK_TRANSFER 0x20000000 +#define CAP_BULK_TRANSFER 0x00000400 #define CAP_EXTENDED_SECURITY 0x80000000 =20 /* Action bits */ --=20 2.43.0 From nobody Sun Feb 8 11:26:00 2026 Received: from out-170.mta0.migadu.com (out-170.mta0.migadu.com [91.218.175.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B0A6C254841 for ; Sun, 2 Nov 2025 07:32:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068745; cv=none; b=uf0/kN7We16U3QUecp3U+hJ5Y6pIwSnFdbYxhKObTkSs3BlWj5auxAv15pJC5AjBDxj7XvQm8BHzUZun9idj9FEK8I9aWGPVEpQ6p0GhMwwCYCHt53K7sy7RWIU/4gFOzpkxaQSLWpLO1/K30BPl3/depjQrGNG8KzjXrmKoyRE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068745; c=relaxed/simple; bh=Zx31GQhTf+NGlFQDldb/w2jBqmYAff62m6LXTgOKi08=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bh7EhEVjNxMY6/tfwxEeDi9OZ/z+TM+JPFT9lXNDpjHHsFMYT3+N5ZL+1NB6Hb7qjr6ATj9yGgL2m24+2a1/xORytQtobdPqtLdVlDLp1cJPABxV936Wg5+UNW2ZtvQMBv2u1RCpeUgg46hdGKOeUnU/7NvGgW3g5io0j1piUk8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=djjU7PTm; arc=none smtp.client-ip=91.218.175.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="djjU7PTm" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1762068740; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=x1PKr7dfmn1x3wo4NC3mmqZ1Avb8U3jlg6h/I/4TzkM=; b=djjU7PTmllE2QhB+q9rW6Y4yI57PWxZuZgJQxN+j2voKRnHPXwwFTWDLQn0/l9PlFohu3Q y7fZEajeOrOPxm6/8uRcJfR1GpVEaXNenvs3r1NHoXv+PyLq5zfd12kdIhzld8xa636cLN oDAix8J7tc9WojgaB0k5fSV8cd0yJ68= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org, christophe.jaillet@wanadoo.fr Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ChenXiaoSong Subject: [PATCH v5 02/14] smb: move MAX_CIFS_SMALL_BUFFER_SIZE to common/smbglob.h Date: Sun, 2 Nov 2025 15:30:47 +0800 Message-ID: <20251102073059.3681026-3-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ChenXiaoSong In order to maintain the code more easily, move duplicate definitions to common header file. By the way, add the copyright and author information for Namjae to common/smbglob.h. Signed-off-by: ChenXiaoSong --- fs/smb/client/cifspdu.h | 1 - fs/smb/common/smbglob.h | 4 ++++ fs/smb/server/smb_common.h | 2 -- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/fs/smb/client/cifspdu.h b/fs/smb/client/cifspdu.h index aba9caee8302..2fb1eb2fff41 100644 --- a/fs/smb/client/cifspdu.h +++ b/fs/smb/client/cifspdu.h @@ -86,7 +86,6 @@ #define NT_TRANSACT_GET_USER_QUOTA 0x07 #define NT_TRANSACT_SET_USER_QUOTA 0x08 =20 -#define MAX_CIFS_SMALL_BUFFER_SIZE 448 /* big enough for most */ /* future chained NTCreateXReadX bigger, but for time being NTCreateX bigg= est */ /* among the requests (NTCreateX response is bigger with wct of 34) */ #define MAX_CIFS_HDR_SIZE 0x58 /* 4 len + 32 hdr + (2*24 wct) + 2 bct + 2 = pad */ diff --git a/fs/smb/common/smbglob.h b/fs/smb/common/smbglob.h index fa3d30dc6022..7853b5771128 100644 --- a/fs/smb/common/smbglob.h +++ b/fs/smb/common/smbglob.h @@ -2,8 +2,10 @@ /* * * Copyright (C) International Business Machines Corp., 2002,2008 + * 2018 Samsung Electronics Co., Ltd. * Author(s): Steve French (sfrench@us.ibm.com) * Jeremy Allison (jra@samba.org) + * Namjae Jeon (linkinjeon@kernel.org) * */ #ifndef _COMMON_SMB_GLOB_H @@ -65,4 +67,6 @@ static inline void inc_rfc1001_len(void *buf, int count) =20 #define CIFS_DEFAULT_IOSIZE (1024 * 1024) =20 +#define MAX_CIFS_SMALL_BUFFER_SIZE 448 /* big enough for most */ + #endif /* _COMMON_SMB_GLOB_H */ diff --git a/fs/smb/server/smb_common.h b/fs/smb/server/smb_common.h index c3258a3231e4..a2c7ab994fb1 100644 --- a/fs/smb/server/smb_common.h +++ b/fs/smb/server/smb_common.h @@ -29,8 +29,6 @@ =20 #define SMB_ECHO_INTERVAL (60 * HZ) =20 -#define MAX_CIFS_SMALL_BUFFER_SIZE 448 /* big enough for most */ - #define MAX_STREAM_PROT_LEN 0x00FFFFFF =20 /* Responses when opening a file. */ --=20 2.43.0 From nobody Sun Feb 8 11:26:00 2026 Received: from out-170.mta0.migadu.com (out-170.mta0.migadu.com [91.218.175.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1CF0025A35E for ; Sun, 2 Nov 2025 07:32:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068747; cv=none; b=k+27DbEKYyMGcko3dUMFvAqd7D4uGFKmKIYFSccrLU8B2tVyBClz7PvuJNX29DzbY9tkiwJvReW3MBxbh0UT8HXbT3/gWS0F/hWJObqEorCdKBLbFNkQ0ru+nvlpQSAYe/sthdOSEVCCBQWDbHToX3HZdOgT7imyDDbl8sMz7Zo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068747; c=relaxed/simple; bh=oFcduW8EBxovJps2xM5lgpemOawzxJSoVsXhB7ssgQg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ijQVhiNz7TTFUdpHSuzkjEQg8+au3wdClbrDIbXj98WDiZYu7NsXPFQKEysJk2ZpDArRKQ3CBj2IbA0OX4+zYRQahjGPe3/VYOwmx91VyQjNNeYT7OkLWw/tCaseyFADp6KMIGv59BGPkwHEkq3XV6iBOP6gHlW5Ac83jTmteI0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=j7cgBI3e; arc=none smtp.client-ip=91.218.175.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="j7cgBI3e" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1762068743; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TBMBBXhF+iAnhKajC9o8kG0oZA2xlyraE66PEpXklMs=; b=j7cgBI3e8M7YicrLU+sHT23zY2CtM1Uj5TkyvJIglYwWu974nwU2WJ4oMKGEZ6r+7IjHGT YHNU+Adrv/PToW0yOr1wbAOftZDnzCT5o6U6r7MrF7kRSS5GoqOBon1atJFQvD6RS/pJXF tvQZLb/eG4DRQtiY1WxEDdba+uTF+rU= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org, christophe.jaillet@wanadoo.fr Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ChenXiaoSong Subject: [PATCH v5 03/14] smb: move create_durable_req_v2 to common/smb2pdu.h Date: Sun, 2 Nov 2025 15:30:48 +0800 Message-ID: <20251102073059.3681026-4-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ChenXiaoSong Modify the following places: - some fields in "struct create_durable_req_v2" -> struct durable_context_v2 - durable_context_v2 -> durable_context_v2_req - create_durable_v2 -> create_durable_req_v2 Then move duplicate definitions to common header file. Signed-off-by: ChenXiaoSong --- fs/smb/client/smb2pdu.c | 14 +++++++------- fs/smb/client/smb2pdu.h | 12 ------------ fs/smb/common/smb2pdu.h | 14 ++++++++++++++ fs/smb/server/smb2pdu.c | 8 ++++---- fs/smb/server/smb2pdu.h | 9 --------- 5 files changed, 25 insertions(+), 32 deletions(-) diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c index b0739a2661bf..c1f67864c84b 100644 --- a/fs/smb/client/smb2pdu.c +++ b/fs/smb/client/smb2pdu.c @@ -2424,21 +2424,21 @@ add_lease_context(struct TCP_Server_Info *server, return 0; } =20 -static struct create_durable_v2 * +static struct create_durable_req_v2 * create_durable_v2_buf(struct cifs_open_parms *oparms) { struct cifs_fid *pfid =3D oparms->fid; - struct create_durable_v2 *buf; + struct create_durable_req_v2 *buf; =20 - buf =3D kzalloc(sizeof(struct create_durable_v2), GFP_KERNEL); + buf =3D kzalloc(sizeof(struct create_durable_req_v2), GFP_KERNEL); if (!buf) return NULL; =20 buf->ccontext.DataOffset =3D cpu_to_le16(offsetof - (struct create_durable_v2, dcontext)); - buf->ccontext.DataLength =3D cpu_to_le32(sizeof(struct durable_context_v2= )); + (struct create_durable_req_v2, dcontext)); + buf->ccontext.DataLength =3D cpu_to_le32(sizeof(struct durable_context_v2= _req)); buf->ccontext.NameOffset =3D cpu_to_le16(offsetof - (struct create_durable_v2, Name)); + (struct create_durable_req_v2, Name)); buf->ccontext.NameLength =3D cpu_to_le16(4); =20 /* @@ -2508,7 +2508,7 @@ add_durable_v2_context(struct kvec *iov, unsigned int= *num_iovec, iov[num].iov_base =3D create_durable_v2_buf(oparms); if (iov[num].iov_base =3D=3D NULL) return -ENOMEM; - iov[num].iov_len =3D sizeof(struct create_durable_v2); + iov[num].iov_len =3D sizeof(struct create_durable_req_v2); *num_iovec =3D num + 1; return 0; } diff --git a/fs/smb/client/smb2pdu.h b/fs/smb/client/smb2pdu.h index 0ce9f93f108f..a700b404a57c 100644 --- a/fs/smb/client/smb2pdu.h +++ b/fs/smb/client/smb2pdu.h @@ -137,18 +137,6 @@ struct share_redirect_error_context_rsp { /* See MS-SMB2 2.2.13.2.11 */ /* Flags */ #define SMB2_DHANDLE_FLAG_PERSISTENT 0x00000002 -struct durable_context_v2 { - __le32 Timeout; - __le32 Flags; - __u64 Reserved; - __u8 CreateGuid[16]; -} __packed; - -struct create_durable_v2 { - struct create_context_hdr ccontext; - __u8 Name[8]; - struct durable_context_v2 dcontext; -} __packed; =20 /* See MS-SMB2 2.2.13.2.12 */ struct durable_reconnect_context_v2 { diff --git a/fs/smb/common/smb2pdu.h b/fs/smb/common/smb2pdu.h index a7ea4214d061..681855ebacc9 100644 --- a/fs/smb/common/smb2pdu.h +++ b/fs/smb/common/smb2pdu.h @@ -1290,6 +1290,20 @@ struct create_mxac_req { __le64 Timestamp; } __packed; =20 +/* See MS-SMB2 2.2.13.2.11 */ +struct durable_context_v2_req { + __le32 Timeout; + __le32 Flags; /* see SMB2_DHANDLE_FLAG_PERSISTENT */ + __u64 Reserved; + __u8 CreateGuid[16]; +} __packed; + +struct create_durable_req_v2 { + struct create_context_hdr ccontext; + __u8 Name[8]; + struct durable_context_v2_req dcontext; +} __packed; + /* See MS-SMB2 2.2.14.2.5 */ struct create_mxac_rsp { struct create_context_hdr ccontext; diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c index e50d54a3a9c5..96c6bbc9d3d3 100644 --- a/fs/smb/server/smb2pdu.c +++ b/fs/smb/server/smb2pdu.c @@ -2816,7 +2816,7 @@ static int parse_durable_handle_context(struct ksmbd_= work *work, durable_v2_blob =3D (struct create_durable_req_v2 *)context; ksmbd_debug(SMB, "Request for durable v2 open\n"); - dh_info->fp =3D ksmbd_lookup_fd_cguid(durable_v2_blob->CreateGuid); + dh_info->fp =3D ksmbd_lookup_fd_cguid(durable_v2_blob->dcontext.CreateG= uid); if (dh_info->fp) { if (!memcmp(conn->ClientGUID, dh_info->fp->client_guid, SMB2_CLIENT_GUID_SIZE)) { @@ -2834,11 +2834,11 @@ static int parse_durable_handle_context(struct ksmb= d_work *work, if ((lc && (lc->req_state & SMB2_LEASE_HANDLE_CACHING_LE)) || req_op_level =3D=3D SMB2_OPLOCK_LEVEL_BATCH) { dh_info->CreateGuid =3D - durable_v2_blob->CreateGuid; + durable_v2_blob->dcontext.CreateGuid; dh_info->persistent =3D - le32_to_cpu(durable_v2_blob->Flags); + le32_to_cpu(durable_v2_blob->dcontext.Flags); dh_info->timeout =3D - le32_to_cpu(durable_v2_blob->Timeout); + le32_to_cpu(durable_v2_blob->dcontext.Timeout); dh_info->type =3D dh_idx; } break; diff --git a/fs/smb/server/smb2pdu.h b/fs/smb/server/smb2pdu.h index 807079d19d1e..93d43da626d4 100644 --- a/fs/smb/server/smb2pdu.h +++ b/fs/smb/server/smb2pdu.h @@ -66,15 +66,6 @@ struct preauth_integrity_info { /* Apple Defined Contexts */ #define SMB2_CREATE_AAPL "AAPL" =20 -struct create_durable_req_v2 { - struct create_context_hdr ccontext; - __u8 Name[8]; - __le32 Timeout; - __le32 Flags; - __u8 Reserved[8]; - __u8 CreateGuid[16]; -} __packed; - #define DURABLE_HANDLE_MAX_TIMEOUT 300000 =20 struct create_durable_reconn_req { --=20 2.43.0 From nobody Sun Feb 8 11:26:00 2026 Received: from out-170.mta0.migadu.com (out-170.mta0.migadu.com [91.218.175.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0EF24261B78 for ; Sun, 2 Nov 2025 07:32:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068750; cv=none; b=Qq5TmAxRPt9gG5Ms3ki0qD8gt3Ctv7bH7m2xuJrGHrIWCtgbUdOyMeVum0Rr7jHhVD6MYlyEXLziWRBxM++gPwjlYwKfoxqFTwtdKikEpjXaxEcfkf1wRF9VNEJe/VD4hkTtylY4/03Wyo1TS/2lFRG/x+SeEspnHDQidMHFalI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068750; c=relaxed/simple; bh=TvI5SJAbwymCSjcBk9t23pgVUN3aK4qPyK/pJjn54L0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WKbkg3nni604USx33dzmsi1bd95xJbmu7XH8PWNRfdkYhg6DorXblM8HonVuns5WOMc62gLrCIPGKv222dfRJPpL0Wqay789WKX/WObxLbMc4Fr6A18GXjecP7f4DaLX4qpOWQjZlOPMhcXAEw8zWwjNF+JDpFsxVwokOBl+0S4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=Rqkwwgc0; arc=none smtp.client-ip=91.218.175.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="Rqkwwgc0" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1762068746; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=xYP9BMJifXO2n4KF96Zah3GQVPCj/egDrDKorHdsagw=; b=Rqkwwgc0fd7MCrfY/DTrjTOfX3MVGJoPy0XKnyNbihE3NugWRgtYVC33piaNdmlNPnA/5E k7DIz5QtvIvHoHiEpE5+gKpE6vf4gBaAp7ly3oZc5atbiomP94Elq2N7c6wWU1ILxCaEn5 0lbebV5ijgGGvfTnJHy1W/UYgRH1QVQ= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org, christophe.jaillet@wanadoo.fr Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ChenXiaoSong Subject: [PATCH v5 04/14] smb: move create_durable_handle_reconnect_v2 to common/smb2pdu.h Date: Sun, 2 Nov 2025 15:30:49 +0800 Message-ID: <20251102073059.3681026-5-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ChenXiaoSong Modify the following places: - some fields in "struct create_durable_reconn_v2_req" -> struct durable_reconnect_context_v2 - create_durable_reconn_v2_req -> create_durable_handle_reconnect_v2 Then move duplicate definitions to common header file. Signed-off-by: ChenXiaoSong --- fs/smb/client/smb2pdu.h | 17 ----------------- fs/smb/common/smb2pdu.h | 16 ++++++++++++++++ fs/smb/server/smb2pdu.c | 10 +++++----- fs/smb/server/smb2pdu.h | 11 ----------- 4 files changed, 21 insertions(+), 33 deletions(-) diff --git a/fs/smb/client/smb2pdu.h b/fs/smb/client/smb2pdu.h index a700b404a57c..741ceabc3bba 100644 --- a/fs/smb/client/smb2pdu.h +++ b/fs/smb/client/smb2pdu.h @@ -138,29 +138,12 @@ struct share_redirect_error_context_rsp { /* Flags */ #define SMB2_DHANDLE_FLAG_PERSISTENT 0x00000002 =20 -/* See MS-SMB2 2.2.13.2.12 */ -struct durable_reconnect_context_v2 { - struct { - __u64 PersistentFileId; - __u64 VolatileFileId; - } Fid; - __u8 CreateGuid[16]; - __le32 Flags; /* see above DHANDLE_FLAG_PERSISTENT */ -} __packed; - /* See MS-SMB2 2.2.14.2.12 */ struct durable_reconnect_context_v2_rsp { __le32 Timeout; __le32 Flags; /* see above DHANDLE_FLAG_PERSISTENT */ } __packed; =20 -struct create_durable_handle_reconnect_v2 { - struct create_context_hdr ccontext; - __u8 Name[8]; - struct durable_reconnect_context_v2 dcontext; - __u8 Pad[4]; -} __packed; - /* See MS-SMB2 2.2.13.2.5 */ struct crt_twarp_ctxt { struct create_context_hdr ccontext; diff --git a/fs/smb/common/smb2pdu.h b/fs/smb/common/smb2pdu.h index 681855ebacc9..77b1b8eb9c0e 100644 --- a/fs/smb/common/smb2pdu.h +++ b/fs/smb/common/smb2pdu.h @@ -1304,6 +1304,22 @@ struct create_durable_req_v2 { struct durable_context_v2_req dcontext; } __packed; =20 +/* See MS-SMB2 2.2.13.2.12 */ +struct durable_reconnect_context_v2 { + struct { + __u64 PersistentFileId; + __u64 VolatileFileId; + } Fid; + __u8 CreateGuid[16]; + __le32 Flags; /* see SMB2_DHANDLE_FLAG_PERSISTENT */ +} __packed; + +struct create_durable_handle_reconnect_v2 { + struct create_context_hdr ccontext; + __u8 Name[8]; + struct durable_reconnect_context_v2 dcontext; +} __packed; + /* See MS-SMB2 2.2.14.2.5 */ struct create_mxac_rsp { struct create_context_hdr ccontext; diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c index 96c6bbc9d3d3..c972b2dd62cd 100644 --- a/fs/smb/server/smb2pdu.c +++ b/fs/smb/server/smb2pdu.c @@ -2726,7 +2726,7 @@ static int parse_durable_handle_context(struct ksmbd_= work *work, switch (dh_idx) { case DURABLE_RECONN_V2: { - struct create_durable_reconn_v2_req *recon_v2; + struct create_durable_handle_reconnect_v2 *recon_v2; =20 if (dh_info->type =3D=3D DURABLE_RECONN || dh_info->type =3D=3D DURABLE_REQ_V2) { @@ -2736,13 +2736,13 @@ static int parse_durable_handle_context(struct ksmb= d_work *work, =20 if (le16_to_cpu(context->DataOffset) + le32_to_cpu(context->DataLength) < - sizeof(struct create_durable_reconn_v2_req)) { + sizeof(struct create_durable_handle_reconnect_v2)) { err =3D -EINVAL; goto out; } =20 - recon_v2 =3D (struct create_durable_reconn_v2_req *)context; - persistent_id =3D recon_v2->Fid.PersistentFileId; + recon_v2 =3D (struct create_durable_handle_reconnect_v2 *)context; + persistent_id =3D recon_v2->dcontext.Fid.PersistentFileId; dh_info->fp =3D ksmbd_lookup_durable_fd(persistent_id); if (!dh_info->fp) { ksmbd_debug(SMB, "Failed to get durable handle state\n"); @@ -2750,7 +2750,7 @@ static int parse_durable_handle_context(struct ksmbd_= work *work, goto out; } =20 - if (memcmp(dh_info->fp->create_guid, recon_v2->CreateGuid, + if (memcmp(dh_info->fp->create_guid, recon_v2->dcontext.CreateGuid, SMB2_CREATE_GUID_SIZE)) { err =3D -EBADF; ksmbd_put_durable_fd(dh_info->fp); diff --git a/fs/smb/server/smb2pdu.h b/fs/smb/server/smb2pdu.h index 93d43da626d4..d4026d313d67 100644 --- a/fs/smb/server/smb2pdu.h +++ b/fs/smb/server/smb2pdu.h @@ -80,17 +80,6 @@ struct create_durable_reconn_req { } Data; } __packed; =20 -struct create_durable_reconn_v2_req { - struct create_context_hdr ccontext; - __u8 Name[8]; - struct { - __u64 PersistentFileId; - __u64 VolatileFileId; - } Fid; - __u8 CreateGuid[16]; - __le32 Flags; -} __packed; - struct create_alloc_size_req { struct create_context_hdr ccontext; __u8 Name[8]; --=20 2.43.0 From nobody Sun Feb 8 11:26:00 2026 Received: from out-183.mta0.migadu.com (out-183.mta0.migadu.com [91.218.175.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6C1A0264638 for ; Sun, 2 Nov 2025 07:32:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.183 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068752; cv=none; b=bGRjDh8iRjxGbJxZezXKO8JlUhgsLtxrc86baAMBTyXoyb1caUnwAgn0EDMg9METxz1HCOvOtteN/LUtMgoCwfSn1mxkNeNT90j4NyGeai6n9f/vL7Pz38zGLXrY6kKa39oLvhj0hmzKRSxBs6JUbER+1sYEImC3hMGWuzQWZ1A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068752; c=relaxed/simple; bh=dndL03p7rRbhKx5ViGo9nW4QO3MeiGD4iWOFiG9NRq0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LbAWNM7C/fGLl5xSEyTjQJlZzQvzOHmrH3APIxmL9Je9Rr7+o8bYkw/j1PD0Y0JADmGQ5Xwfv7y2kXjoZIxo8mPE8ZTIoXzfJlAfq6L8XpZezfHhrh7yykcT9asCEq0xs3kZlr5sCIW0U730N8eg3OP1eAjZDGhIl8r28+AvN9U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=SXLAYjWi; arc=none smtp.client-ip=91.218.175.183 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="SXLAYjWi" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1762068748; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Ufdq4aNwPnUC0XnIBJYqN4y6PY/tZMqt0u26zaoa1S0=; b=SXLAYjWirfKZYgjC0sRd28OETDzhvQKoFON1GVJchOg8CiN9q0Bv5ZXzyhQd2b+XAdmUbj J/urY3aoiz3/dR6eteSNbLizRuhujOd4tnbaTBFprg+Vj/ccr5eVhus1lHEVyPQd67byG2 zd3HVVk+8ppedsYc3VwL/+gSzJv38kY= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org, christophe.jaillet@wanadoo.fr Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ChenXiaoSong Subject: [PATCH v5 05/14] smb: move create_durable_rsp_v2 to common/smb2pdu.h Date: Sun, 2 Nov 2025 15:30:50 +0800 Message-ID: <20251102073059.3681026-6-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ChenXiaoSong Modify the following places: - some fields in "struct create_durable_v2_rsp" -> struct durable_context_v2_rsp - durable_reconnect_context_v2_rsp -> durable_context_v2_rsp - create_durable_v2_rsp -> create_durable_rsp_v2 Then move them to common header file. Signed-off-by: ChenXiaoSong --- fs/smb/client/smb2pdu.h | 6 ------ fs/smb/common/smb2pdu.h | 12 ++++++++++++ fs/smb/server/oplock.c | 8 ++++---- fs/smb/server/smb2ops.c | 6 +++--- fs/smb/server/smb2pdu.h | 6 ------ 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/fs/smb/client/smb2pdu.h b/fs/smb/client/smb2pdu.h index 741ceabc3bba..32da7a4773e1 100644 --- a/fs/smb/client/smb2pdu.h +++ b/fs/smb/client/smb2pdu.h @@ -138,12 +138,6 @@ struct share_redirect_error_context_rsp { /* Flags */ #define SMB2_DHANDLE_FLAG_PERSISTENT 0x00000002 =20 -/* See MS-SMB2 2.2.14.2.12 */ -struct durable_reconnect_context_v2_rsp { - __le32 Timeout; - __le32 Flags; /* see above DHANDLE_FLAG_PERSISTENT */ -} __packed; - /* See MS-SMB2 2.2.13.2.5 */ struct crt_twarp_ctxt { struct create_context_hdr ccontext; diff --git a/fs/smb/common/smb2pdu.h b/fs/smb/common/smb2pdu.h index 77b1b8eb9c0e..4ea515732b38 100644 --- a/fs/smb/common/smb2pdu.h +++ b/fs/smb/common/smb2pdu.h @@ -1320,6 +1320,18 @@ struct create_durable_handle_reconnect_v2 { struct durable_reconnect_context_v2 dcontext; } __packed; =20 +/* See MS-SMB2 2.2.14.2.12 */ +struct durable_context_v2_rsp { + __le32 Timeout; + __le32 Flags; /* see SMB2_DHANDLE_FLAG_PERSISTENT */ +} __packed; + +struct create_durable_rsp_v2 { + struct create_context_hdr ccontext; + __u8 Name[8]; + struct durable_context_v2_rsp dcontext; +} __packed; + /* See MS-SMB2 2.2.14.2.5 */ struct create_mxac_rsp { struct create_context_hdr ccontext; diff --git a/fs/smb/server/oplock.c b/fs/smb/server/oplock.c index a04d5702820d..1f07ebf431d7 100644 --- a/fs/smb/server/oplock.c +++ b/fs/smb/server/oplock.c @@ -1617,9 +1617,9 @@ void create_durable_rsp_buf(char *cc) */ void create_durable_v2_rsp_buf(char *cc, struct ksmbd_file *fp) { - struct create_durable_v2_rsp *buf; + struct create_durable_rsp_v2 *buf; =20 - buf =3D (struct create_durable_v2_rsp *)cc; + buf =3D (struct create_durable_rsp_v2 *)cc; memset(buf, 0, sizeof(struct create_durable_rsp)); buf->ccontext.DataOffset =3D cpu_to_le16(offsetof (struct create_durable_rsp, Data)); @@ -1633,9 +1633,9 @@ void create_durable_v2_rsp_buf(char *cc, struct ksmbd= _file *fp) buf->Name[2] =3D '2'; buf->Name[3] =3D 'Q'; =20 - buf->Timeout =3D cpu_to_le32(fp->durable_timeout); + buf->dcontext.Timeout =3D cpu_to_le32(fp->durable_timeout); if (fp->is_persistent) - buf->Flags =3D cpu_to_le32(SMB2_DHANDLE_FLAG_PERSISTENT); + buf->dcontext.Flags =3D cpu_to_le32(SMB2_DHANDLE_FLAG_PERSISTENT); } =20 /** diff --git a/fs/smb/server/smb2ops.c b/fs/smb/server/smb2ops.c index bcf05caa2304..edd7eca0714a 100644 --- a/fs/smb/server/smb2ops.c +++ b/fs/smb/server/smb2ops.c @@ -59,7 +59,7 @@ static struct smb_version_values smb30_server_values =3D { .cap_large_files =3D SMB2_LARGE_FILES, .create_lease_size =3D sizeof(struct create_lease_v2), .create_durable_size =3D sizeof(struct create_durable_rsp), - .create_durable_v2_size =3D sizeof(struct create_durable_v2_rsp), + .create_durable_v2_size =3D sizeof(struct create_durable_rsp_v2), .create_mxac_size =3D sizeof(struct create_mxac_rsp), .create_disk_id_size =3D sizeof(struct create_disk_id_rsp), .create_posix_size =3D sizeof(struct create_posix_rsp), @@ -86,7 +86,7 @@ static struct smb_version_values smb302_server_values =3D= { .cap_large_files =3D SMB2_LARGE_FILES, .create_lease_size =3D sizeof(struct create_lease_v2), .create_durable_size =3D sizeof(struct create_durable_rsp), - .create_durable_v2_size =3D sizeof(struct create_durable_v2_rsp), + .create_durable_v2_size =3D sizeof(struct create_durable_rsp_v2), .create_mxac_size =3D sizeof(struct create_mxac_rsp), .create_disk_id_size =3D sizeof(struct create_disk_id_rsp), .create_posix_size =3D sizeof(struct create_posix_rsp), @@ -113,7 +113,7 @@ static struct smb_version_values smb311_server_values = =3D { .cap_large_files =3D SMB2_LARGE_FILES, .create_lease_size =3D sizeof(struct create_lease_v2), .create_durable_size =3D sizeof(struct create_durable_rsp), - .create_durable_v2_size =3D sizeof(struct create_durable_v2_rsp), + .create_durable_v2_size =3D sizeof(struct create_durable_rsp_v2), .create_mxac_size =3D sizeof(struct create_mxac_rsp), .create_disk_id_size =3D sizeof(struct create_disk_id_rsp), .create_posix_size =3D sizeof(struct create_posix_rsp), diff --git a/fs/smb/server/smb2pdu.h b/fs/smb/server/smb2pdu.h index d4026d313d67..46e14bd4f2da 100644 --- a/fs/smb/server/smb2pdu.h +++ b/fs/smb/server/smb2pdu.h @@ -98,12 +98,6 @@ struct create_durable_rsp { /* See MS-SMB2 2.2.13.2.11 */ /* Flags */ #define SMB2_DHANDLE_FLAG_PERSISTENT 0x00000002 -struct create_durable_v2_rsp { - struct create_context_hdr ccontext; - __u8 Name[8]; - __le32 Timeout; - __le32 Flags; -} __packed; =20 /* equivalent of the contents of SMB3.1.1 POSIX open context response */ struct create_posix_rsp { --=20 2.43.0 From nobody Sun Feb 8 11:26:00 2026 Received: from out-174.mta0.migadu.com (out-174.mta0.migadu.com [91.218.175.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 32412266B6F for ; Sun, 2 Nov 2025 07:32:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068754; cv=none; b=ks0xTvL/+DwYJuQzk03ikTtqBxVrVjkqijNex4svvv3diTcXpkanNDMbXGCPSRuoqEB1eW2rkd4HckPzt2qNvVpLeDKXERIUcLmS3tv7pYVpUStF8ApHub0j0Ry3OrmaX1FVIzN/2bdCG463/z32W9pfneHMeQsUR/4v3H0615c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068754; c=relaxed/simple; bh=0/6q2C6ehyRwr9T4Tp/tUTqnjpKl+as+r0wsXQQYwUA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZbIvhS/lRoYsqz7nMzYQNH7f/0/rN04UZuQIYdvbWnMhsVyS8zYN4Wl32gaoakj6w/I7AvrbRQGByZor0fnFmzOKBUy1JOObm8Rr9uQPoMG9XIPFbW3+K7rAIgNs+O9lgn80d/ldWk7xrq5UdnsyrDP8Do0ByUi+ChxfzM57YoY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=Ia633YEm; arc=none smtp.client-ip=91.218.175.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="Ia633YEm" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1762068751; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Yjl/bhHhHfCb9ypAHpnQxPBT5SeWGv+8sMRDL0lfiTc=; b=Ia633YEmt+KUaAd51bbFVQ6a1+gZUT+0SkhK6rXRPnSyWexf3JVxsq0GgLARqwJd4fssTk dzqz8wYtHw68H9tSbjux3aBREJ0/gBb5vu2Y4sOcqNH7sdy7XoIr/KZSt3+Yz/kzMpR8kw HnjuNktcYHbR+ObY/+t/IcWGgCkINIE= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org, christophe.jaillet@wanadoo.fr Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ChenXiaoSong Subject: [PATCH v5 06/14] smb/server: remove create_durable_reconn_req Date: Sun, 2 Nov 2025 15:30:51 +0800 Message-ID: <20251102073059.3681026-7-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ChenXiaoSong The fields in struct create_durable_reconn_req and struct create_durable are exactly the same. 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 We can give these two structs a uniform name: create_durable. 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. Signed-off-by: ChenXiaoSong --- 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 c972b2dd62cd..b95ca0de60c3 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; =20 if (dh_info->type =3D=3D DURABLE_RECONN_V2 || dh_info->type =3D=3D DURABLE_REQ_V2) { @@ -2776,12 +2776,12 @@ static int parse_durable_handle_context(struct ksmb= d_work *work, =20 if (le16_to_cpu(context->DataOffset) + le32_to_cpu(context->DataLength) < - sizeof(struct create_durable_reconn_req)) { + sizeof(struct create_durable)) { err =3D -EINVAL; goto out; } =20 - recon =3D (struct create_durable_reconn_req *)context; + recon =3D (struct create_durable *)context; persistent_id =3D recon->Data.Fid.PersistentFileId; dh_info->fp =3D 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 46e14bd4f2da..7758aa01034d 100644 --- a/fs/smb/server/smb2pdu.h +++ b/fs/smb/server/smb2pdu.h @@ -68,18 +68,6 @@ struct preauth_integrity_info { =20 #define DURABLE_HANDLE_MAX_TIMEOUT 300000 =20 -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]; --=20 2.43.0 From nobody Sun Feb 8 11:26:00 2026 Received: from out-179.mta0.migadu.com (out-179.mta0.migadu.com [91.218.175.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7793A25FA3B for ; Sun, 2 Nov 2025 07:32:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068761; cv=none; b=Gv9ZyR54XKCM+Srpoe4/Yo+r4nKosLKKwIoZJv+tUpKsmT82EoQlZAXaC6pxYrPl/LJvxFl7S6ykvwvwrvmywmn37QPGPhb6zJAMG5q/lCbws0kuRmJVn/lJm210ZcImU7te+SXGHi2faTF2aM1mfHYwP6wkS8p8cuLCUn2koi8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068761; c=relaxed/simple; bh=e7gZvQj9/252VQxqIxg7I2Ap0/azMNWlsGYLCGRl/Fw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eZZIPxUqHOftTzYldzznavWMMtdRGR8EPkdpE/DL79EdU9vrUWVwnW9N9lrhmleAjSfsh4/FjLiL2DyJu3YerzKnKaHi0Q4FButfPCWYq7uj1Tr4SbRwNbZ0h6l58AvfydIfArCwfrpQdsPCezPuTdGm6TikkvuNXwTZTySi2cY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=ChS3TJWA; arc=none smtp.client-ip=91.218.175.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="ChS3TJWA" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1762068756; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5Nk5l40tFcj0doHB5S2VNNKeZWdXIuRUh8rAmCOef/4=; b=ChS3TJWA54MMrERKMsnfx4Sa+V+4CWrjMR1V1KzW8JvVWSp3FQrhiiYB+O8kkZi7izNWnW GAhFBMtEpwAgNjNPlqvPOyACcXvELcyAjTXsr7sgwvSfB6k9KelWgd3QHVkCNw+QP5OSto TO9Uf325EUW2ceDVe0O06SjSKtWwq2k= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org, christophe.jaillet@wanadoo.fr Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ZhangGuoDong , ChenXiaoSong Subject: [PATCH v5 07/14] smb: move some duplicate definitions to common/smb2pdu.h Date: Sun, 2 Nov 2025 15:30:52 +0800 Message-ID: <20251102073059.3681026-8-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ZhangGuoDong In order to maintain the code more easily, move duplicate definitions to common header file. There are only 4 different definitions, the client uses cpu_to_le16() but the server does not: - RSS_CAPABLE - RDMA_CAPABLE - INTERNETWORK - INTERNETWORKV6 The other definitions are exactly the same on both client and server. The struct smb_hdr is defined in MS-CIFS and MS-SMB, but it's also used by SMB2 and SMB3, so move it to the common smb2pdu.h. Co-developed-by: ChenXiaoSong Signed-off-by: ChenXiaoSong Signed-off-by: ZhangGuoDong --- fs/smb/client/cifspdu.h | 135 +---------------------------- fs/smb/client/smb2pdu.h | 21 ----- fs/smb/common/smb2pdu.h | 172 +++++++++++++++++++++++++++++++++++-- fs/smb/server/smb2pdu.c | 8 +- fs/smb/server/smb2pdu.h | 19 ---- fs/smb/server/smb_common.h | 75 +--------------- 6 files changed, 173 insertions(+), 257 deletions(-) diff --git a/fs/smb/client/cifspdu.h b/fs/smb/client/cifspdu.h index 2fb1eb2fff41..99cdba9f68dc 100644 --- a/fs/smb/client/cifspdu.h +++ b/fs/smb/client/cifspdu.h @@ -12,6 +12,7 @@ #include #include #include "../common/smbfsctl.h" +#include "../common/smb2pdu.h" =20 #define CIFS_PROT 0 #define POSIX_PROT (CIFS_PROT+1) @@ -179,98 +180,7 @@ #define SMBFLG2_ERR_STATUS cpu_to_le16(0x4000) #define SMBFLG2_UNICODE cpu_to_le16(0x8000) =20 -/* - * These are the file access permission bits defined in CIFS for the - * NTCreateAndX as well as the level 0x107 - * TRANS2_QUERY_PATH_INFORMATION API. The level 0x107, SMB_QUERY_FILE_ALL= _INFO - * responds with the AccessFlags. - * The AccessFlags specifies the access permissions a caller has to the - * file and can have any suitable combination of the following values: - */ - -#define FILE_READ_DATA 0x00000001 /* Data can be read from the fil= e */ - /* or directory child entries can */ - /* be listed together with the */ - /* associated child attributes */ - /* (so the FILE_READ_ATTRIBUTES on */ - /* the child entry is not needed) */ -#define FILE_WRITE_DATA 0x00000002 /* Data can be written to the fi= le */ - /* or new file can be created in */ - /* the directory */ -#define FILE_APPEND_DATA 0x00000004 /* Data can be appended to the f= ile */ - /* (for non-local files over SMB it */ - /* is same as FILE_WRITE_DATA) */ - /* or new subdirectory can be */ - /* created in the directory */ -#define FILE_READ_EA 0x00000008 /* Extended attributes associate= d */ - /* with the file can be read */ -#define FILE_WRITE_EA 0x00000010 /* Extended attributes associate= d */ - /* with the file can be written */ -#define FILE_EXECUTE 0x00000020 /*Data can be read into memory f= rom */ - /* the file using system paging I/O */ - /* for executing the file / script */ - /* or right to traverse directory */ - /* (but by default all users have */ - /* directory bypass traverse */ - /* privilege and do not need this */ - /* permission on directories at all)*/ -#define FILE_DELETE_CHILD 0x00000040 /* Child entry can be deleted fr= om */ - /* the directory (so the DELETE on */ - /* the child entry is not needed) */ -#define FILE_READ_ATTRIBUTES 0x00000080 /* Attributes associated with th= e */ - /* file or directory can be read */ -#define FILE_WRITE_ATTRIBUTES 0x00000100 /* Attributes associated with th= e */ - /* file or directory can be written */ -#define DELETE 0x00010000 /* The file or dir can be delete= d */ -#define READ_CONTROL 0x00020000 /* The discretionary access cont= rol */ - /* list and ownership associated */ - /* with the file or dir can be read */ -#define WRITE_DAC 0x00040000 /* The discretionary access cont= rol */ - /* list associated with the file or */ - /* directory can be written */ -#define WRITE_OWNER 0x00080000 /* Ownership information associa= ted */ - /* with the file/dir can be written */ -#define SYNCHRONIZE 0x00100000 /* The file handle can waited on= to */ - /* synchronize with the completion */ - /* of an input/output request */ -#define SYSTEM_SECURITY 0x01000000 /* The system access control lis= t */ - /* associated with the file or */ - /* directory can be read or written */ - /* (cannot be in DACL, can in SACL) */ -#define MAXIMUM_ALLOWED 0x02000000 /* Maximal subset of GENERIC_ALL= */ - /* permissions which can be granted */ - /* (cannot be in DACL nor SACL) */ -#define GENERIC_ALL 0x10000000 /* Same as: GENERIC_EXECUTE | = */ - /* GENERIC_WRITE | */ - /* GENERIC_READ | */ - /* FILE_DELETE_CHILD | */ - /* DELETE | */ - /* WRITE_DAC | */ - /* WRITE_OWNER */ - /* So GENERIC_ALL contains all bits */ - /* mentioned above except these two */ - /* SYSTEM_SECURITY MAXIMUM_ALLOWED */ -#define GENERIC_EXECUTE 0x20000000 /* Same as: FILE_EXECUTE | = */ - /* FILE_READ_ATTRIBUTES | */ - /* READ_CONTROL | */ - /* SYNCHRONIZE */ -#define GENERIC_WRITE 0x40000000 /* Same as: FILE_WRITE_DATA | = */ - /* FILE_APPEND_DATA | */ - /* FILE_WRITE_EA | */ - /* FILE_WRITE_ATTRIBUTES | */ - /* READ_CONTROL | */ - /* SYNCHRONIZE */ -#define GENERIC_READ 0x80000000 /* Same as: FILE_READ_DATA | = */ - /* FILE_READ_EA | */ - /* FILE_READ_ATTRIBUTES | */ - /* READ_CONTROL | */ - /* SYNCHRONIZE */ - -#define FILE_READ_RIGHTS (FILE_READ_DATA | FILE_READ_EA | FILE_READ_ATTRIB= UTES) -#define FILE_WRITE_RIGHTS (FILE_WRITE_DATA | FILE_APPEND_DATA \ - | FILE_WRITE_EA | FILE_WRITE_ATTRIBUTES) -#define FILE_EXEC_RIGHTS (FILE_EXECUTE) - +/* Combinations of file access permission bits */ #define SET_FILE_READ_RIGHTS (FILE_READ_DATA | FILE_READ_EA | FILE_WRITE_E= A \ | FILE_READ_ATTRIBUTES \ | FILE_WRITE_ATTRIBUTES \ @@ -282,15 +192,6 @@ | FILE_WRITE_ATTRIBUTES \ | DELETE | READ_CONTROL | WRITE_DAC \ | WRITE_OWNER | SYNCHRONIZE) -#define SET_FILE_EXEC_RIGHTS (FILE_READ_EA | FILE_WRITE_EA | FILE_EXECUTE \ - | FILE_READ_ATTRIBUTES \ - | FILE_WRITE_ATTRIBUTES \ - | DELETE | READ_CONTROL | WRITE_DAC \ - | WRITE_OWNER | SYNCHRONIZE) - -#define SET_MINIMUM_RIGHTS (FILE_READ_EA | FILE_READ_ATTRIBUTES \ - | READ_CONTROL | SYNCHRONIZE) - =20 /* * Invalid readdir handle @@ -416,38 +317,6 @@ #define GETU16(var) (*((__u16 *)var)) /* BB check for endian issues */ #define GETU32(var) (*((__u32 *)var)) /* BB check for endian issues */ =20 -struct smb_hdr { - __be32 smb_buf_length; /* BB length is only two (rarely three) bytes, - with one or two byte "type" preceding it that will be - zero - we could mask the type byte off */ - __u8 Protocol[4]; - __u8 Command; - union { - struct { - __u8 ErrorClass; - __u8 Reserved; - __le16 Error; - } __attribute__((packed)) DosError; - __le32 CifsError; - } __attribute__((packed)) Status; - __u8 Flags; - __le16 Flags2; /* note: le */ - __le16 PidHigh; - union { - struct { - __le32 SequenceNumber; /* le */ - __u32 Reserved; /* zero */ - } __attribute__((packed)) Sequence; - __u8 SecuritySignature[8]; /* le */ - } __attribute__((packed)) Signature; - __u8 pad[2]; - __u16 Tid; - __le16 Pid; - __u16 Uid; - __le16 Mid; - __u8 WordCount; -} __attribute__((packed)); - /* given a pointer to an smb_hdr, retrieve a void pointer to the ByteCount= */ static inline void * BCC(struct smb_hdr *smb) diff --git a/fs/smb/client/smb2pdu.h b/fs/smb/client/smb2pdu.h index 32da7a4773e1..98ed7a22cd57 100644 --- a/fs/smb/client/smb2pdu.h +++ b/fs/smb/client/smb2pdu.h @@ -133,11 +133,6 @@ struct share_redirect_error_context_rsp { #define SMB2_LEASE_HANDLE_CACHING_HE 0x02 #define SMB2_LEASE_WRITE_CACHING_HE 0x04 =20 - -/* See MS-SMB2 2.2.13.2.11 */ -/* Flags */ -#define SMB2_DHANDLE_FLAG_PERSISTENT 0x00000002 - /* See MS-SMB2 2.2.13.2.5 */ struct crt_twarp_ctxt { struct create_context_hdr ccontext; @@ -198,22 +193,6 @@ struct network_resiliency_req { } __packed; /* There is no buffer for the response ie no struct network_resiliency_rsp= */ =20 -#define RSS_CAPABLE cpu_to_le32(0x00000001) -#define RDMA_CAPABLE cpu_to_le32(0x00000002) - -#define INTERNETWORK cpu_to_le16(0x0002) -#define INTERNETWORKV6 cpu_to_le16(0x0017) - -struct network_interface_info_ioctl_rsp { - __le32 Next; /* next interface. zero if this is last one */ - __le32 IfIndex; - __le32 Capability; /* RSS or RDMA Capable */ - __le32 Reserved; - __le64 LinkSpeed; - __le16 Family; - __u8 Buffer[126]; -} __packed; - #define NO_FILE_ID 0xFFFFFFFFFFFFFFFFULL /* general ioctls to srv not to f= ile */ =20 struct compress_ioctl { diff --git a/fs/smb/common/smb2pdu.h b/fs/smb/common/smb2pdu.h index 4ea515732b38..be1e652bb474 100644 --- a/fs/smb/common/smb2pdu.h +++ b/fs/smb/common/smb2pdu.h @@ -1149,12 +1149,6 @@ struct smb2_server_client_notification { #define FILE_OVERWRITE_IF_LE cpu_to_le32(0x00000005) #define FILE_CREATE_MASK_LE cpu_to_le32(0x00000007) =20 -#define FILE_READ_RIGHTS (FILE_READ_DATA | FILE_READ_EA \ - | FILE_READ_ATTRIBUTES) -#define FILE_WRITE_RIGHTS (FILE_WRITE_DATA | FILE_APPEND_DATA \ - | FILE_WRITE_EA | FILE_WRITE_ATTRIBUTES) -#define FILE_EXEC_RIGHTS (FILE_EXECUTE) - /* CreateOptions Flags */ #define FILE_DIRECTORY_FILE_LE cpu_to_le32(0x00000001) /* same as #define CREATE_NOT_FILE_LE cpu_to_le32(0x00000001) */ @@ -1290,6 +1284,14 @@ struct create_mxac_req { __le64 Timestamp; } __packed; =20 +/* + * Flags + * See MS-SMB2 2.2.13.2.11 + * MS-SMB2 2.2.13.2.12 + * MS-SMB2 2.2.14.2.12 + */ +#define SMB2_DHANDLE_FLAG_PERSISTENT 0x00000002 + /* See MS-SMB2 2.2.13.2.11 */ struct durable_context_v2_req { __le32 Timeout; @@ -1500,6 +1502,26 @@ struct smb_sockaddr_in6 { __be32 ScopeId; } __packed; =20 +/* See MS-SMB2 2.2.32.5 and MS-SMB2 2.2.32.5.1 */ +#define RSS_CAPABLE cpu_to_le32(0x00000001) +#define RDMA_CAPABLE cpu_to_le32(0x00000002) +#define INTERNETWORK cpu_to_le16(0x0002) +#define INTERNETWORKV6 cpu_to_le16(0x0017) +struct network_interface_info_ioctl_rsp { + __le32 Next; /* next interface. zero if this is last one */ + __le32 IfIndex; + __le32 Capability; /* RSS or RDMA Capable */ + __le32 Reserved; + __le64 LinkSpeed; + union { + char SockAddr_Storage[128]; + struct { + __le16 Family; + __u8 Buffer[126]; + }; + }; +} __packed; + /* this goes in the ioctl buffer when doing FSCTL_SET_ZERO_DATA */ struct file_zero_data_information { __le64 FileOffset; @@ -1989,6 +2011,144 @@ struct smb2_lease_ack { __le64 LeaseDuration; } __packed; =20 +/* + * See MS-CIFS 2.2.3.1 + * MS-SMB 2.2.3.1 + */ +struct smb_hdr { + __be32 smb_buf_length; /* BB length is only two (rarely three) bytes, + with one or two byte "type" preceding it that will be + zero - we could mask the type byte off */ + __u8 Protocol[4]; + __u8 Command; + union { + struct { + __u8 ErrorClass; + __u8 Reserved; + __le16 Error; + } __packed DosError; + __le32 CifsError; + } __packed Status; + __u8 Flags; + __le16 Flags2; /* note: le */ + __le16 PidHigh; + union { + struct { + __le32 SequenceNumber; /* le */ + __u32 Reserved; /* zero */ + } __packed Sequence; + __u8 SecuritySignature[8]; /* le */ + } __packed Signature; + __u8 pad[2]; + __u16 Tid; + __le16 Pid; + __u16 Uid; + __le16 Mid; + __u8 WordCount; +} __packed; + #define OP_BREAK_STRUCT_SIZE_20 24 #define OP_BREAK_STRUCT_SIZE_21 36 + +/* + * See MS-SMB2 2.2.13.1.1 + * MS-SMB 2.2.1.4.1 + * These are the file access permission bits defined in CIFS for the + * NTCreateAndX as well as the level 0x107 + * TRANS2_QUERY_PATH_INFORMATION API. The level 0x107, SMB_QUERY_FILE_ALL= _INFO + * responds with the AccessFlags. + * The AccessFlags specifies the access permissions a caller has to the + * file and can have any suitable combination of the following values: + */ +#define FILE_READ_DATA 0x00000001 /* Data can be read from the fil= e */ + /* or directory child entries can */ + /* be listed together with the */ + /* associated child attributes */ + /* (so the FILE_READ_ATTRIBUTES on */ + /* the child entry is not needed) */ +#define FILE_WRITE_DATA 0x00000002 /* Data can be written to the fi= le */ + /* or new file can be created in */ + /* the directory */ +#define FILE_APPEND_DATA 0x00000004 /* Data can be appended to the f= ile */ + /* (for non-local files over SMB it */ + /* is same as FILE_WRITE_DATA) */ + /* or new subdirectory can be */ + /* created in the directory */ +#define FILE_READ_EA 0x00000008 /* Extended attributes associate= d */ + /* with the file can be read */ +#define FILE_WRITE_EA 0x00000010 /* Extended attributes associate= d */ + /* with the file can be written */ +#define FILE_EXECUTE 0x00000020 /*Data can be read into memory f= rom */ + /* the file using system paging I/O */ + /* for executing the file / script */ + /* or right to traverse directory */ + /* (but by default all users have */ + /* directory bypass traverse */ + /* privilege and do not need this */ + /* permission on directories at all)*/ +#define FILE_DELETE_CHILD 0x00000040 /* Child entry can be deleted fr= om */ + /* the directory (so the DELETE on */ + /* the child entry is not needed) */ +#define FILE_READ_ATTRIBUTES 0x00000080 /* Attributes associated with th= e */ + /* file or directory can be read */ +#define FILE_WRITE_ATTRIBUTES 0x00000100 /* Attributes associated with th= e */ + /* file or directory can be written */ +#define DELETE 0x00010000 /* The file or dir can be delete= d */ +#define READ_CONTROL 0x00020000 /* The discretionary access cont= rol */ + /* list and ownership associated */ + /* with the file or dir can be read */ +#define WRITE_DAC 0x00040000 /* The discretionary access cont= rol */ + /* list associated with the file or */ + /* directory can be written */ +#define WRITE_OWNER 0x00080000 /* Ownership information associa= ted */ + /* with the file/dir can be written */ +#define SYNCHRONIZE 0x00100000 /* The file handle can waited on= to */ + /* synchronize with the completion */ + /* of an input/output request */ +#define SYSTEM_SECURITY 0x01000000 /* The system access control lis= t */ + /* associated with the file or */ + /* directory can be read or written */ + /* (cannot be in DACL, can in SACL) */ +#define MAXIMUM_ALLOWED 0x02000000 /* Maximal subset of GENERIC_ALL= */ + /* permissions which can be granted */ + /* (cannot be in DACL nor SACL) */ +#define GENERIC_ALL 0x10000000 /* Same as: GENERIC_EXECUTE | = */ + /* GENERIC_WRITE | */ + /* GENERIC_READ | */ + /* FILE_DELETE_CHILD | */ + /* DELETE | */ + /* WRITE_DAC | */ + /* WRITE_OWNER */ + /* So GENERIC_ALL contains all bits */ + /* mentioned above except these two */ + /* SYSTEM_SECURITY MAXIMUM_ALLOWED */ +#define GENERIC_EXECUTE 0x20000000 /* Same as: FILE_EXECUTE | = */ + /* FILE_READ_ATTRIBUTES | */ + /* READ_CONTROL | */ + /* SYNCHRONIZE */ +#define GENERIC_WRITE 0x40000000 /* Same as: FILE_WRITE_DATA | = */ + /* FILE_APPEND_DATA | */ + /* FILE_WRITE_EA | */ + /* FILE_WRITE_ATTRIBUTES | */ + /* READ_CONTROL | */ + /* SYNCHRONIZE */ +#define GENERIC_READ 0x80000000 /* Same as: FILE_READ_DATA | = */ + /* FILE_READ_EA | */ + /* FILE_READ_ATTRIBUTES | */ + /* READ_CONTROL | */ + /* SYNCHRONIZE */ + +/* Combinations of file access permission bits */ +#define FILE_READ_RIGHTS (FILE_READ_DATA | FILE_READ_EA | FILE_READ_ATTRIB= UTES) +#define FILE_WRITE_RIGHTS (FILE_WRITE_DATA | FILE_APPEND_DATA \ + | FILE_WRITE_EA | FILE_WRITE_ATTRIBUTES) +#define FILE_EXEC_RIGHTS (FILE_EXECUTE) +#define SET_FILE_EXEC_RIGHTS (FILE_READ_EA | FILE_WRITE_EA | FILE_EXECUTE \ + | FILE_READ_ATTRIBUTES \ + | FILE_WRITE_ATTRIBUTES \ + | DELETE | READ_CONTROL | WRITE_DAC \ + | WRITE_OWNER | SYNCHRONIZE) +#define SET_MINIMUM_RIGHTS (FILE_READ_EA | FILE_READ_ATTRIBUTES \ + | READ_CONTROL | SYNCHRONIZE) + #endif /* _COMMON_SMB2PDU_H */ diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c index b95ca0de60c3..3c2ddf0da344 100644 --- a/fs/smb/server/smb2pdu.c +++ b/fs/smb/server/smb2pdu.c @@ -7876,9 +7876,9 @@ static int fsctl_query_iface_info_ioctl(struct ksmbd_= conn *conn, =20 nii_rsp->Capability =3D 0; if (netdev->real_num_tx_queues > 1) - nii_rsp->Capability |=3D cpu_to_le32(RSS_CAPABLE); + nii_rsp->Capability |=3D RSS_CAPABLE; if (ksmbd_rdma_capable_netdev(netdev)) - nii_rsp->Capability |=3D cpu_to_le32(RDMA_CAPABLE); + nii_rsp->Capability |=3D RDMA_CAPABLE; =20 nii_rsp->Next =3D cpu_to_le32(152); nii_rsp->Reserved =3D 0; @@ -7904,7 +7904,7 @@ static int fsctl_query_iface_info_ioctl(struct ksmbd_= conn *conn, if (!ipv4_set) { struct in_device *idev; =20 - sockaddr_storage->Family =3D cpu_to_le16(INTERNETWORK); + sockaddr_storage->Family =3D INTERNETWORK; sockaddr_storage->addr4.Port =3D 0; =20 idev =3D __in_dev_get_rtnl(netdev); @@ -7920,7 +7920,7 @@ static int fsctl_query_iface_info_ioctl(struct ksmbd_= conn *conn, struct inet6_ifaddr *ifa; __u8 *ipv6_addr =3D sockaddr_storage->addr6.IPv6Address; =20 - sockaddr_storage->Family =3D cpu_to_le16(INTERNETWORKV6); + sockaddr_storage->Family =3D INTERNETWORKV6; sockaddr_storage->addr6.Port =3D 0; sockaddr_storage->addr6.FlowInfo =3D 0; =20 diff --git a/fs/smb/server/smb2pdu.h b/fs/smb/server/smb2pdu.h index 7758aa01034d..acaf5955eec1 100644 --- a/fs/smb/server/smb2pdu.h +++ b/fs/smb/server/smb2pdu.h @@ -83,10 +83,6 @@ struct create_durable_rsp { } Data; } __packed; =20 -/* See MS-SMB2 2.2.13.2.11 */ -/* Flags */ -#define SMB2_DHANDLE_FLAG_PERSISTENT 0x00000002 - /* equivalent of the contents of SMB3.1.1 POSIX open context response */ struct create_posix_rsp { struct create_context_hdr ccontext; @@ -100,9 +96,6 @@ struct create_posix_rsp { =20 #define SMB2_0_IOCTL_IS_FSCTL 0x00000001 =20 -#define INTERNETWORK 0x0002 -#define INTERNETWORKV6 0x0017 - struct sockaddr_storage_rsp { __le16 Family; union { @@ -111,18 +104,6 @@ struct sockaddr_storage_rsp { }; } __packed; =20 -#define RSS_CAPABLE 0x00000001 -#define RDMA_CAPABLE 0x00000002 - -struct network_interface_info_ioctl_rsp { - __le32 Next; /* next interface. zero if this is last one */ - __le32 IfIndex; - __le32 Capability; /* RSS or RDMA Capable */ - __le32 Reserved; - __le64 LinkSpeed; - char SockAddr_Storage[128]; -} __packed; - struct file_object_buf_type1_ioctl_rsp { __u8 ObjectId[16]; __u8 BirthVolumeId[16]; diff --git a/fs/smb/server/smb_common.h b/fs/smb/server/smb_common.h index a2c7ab994fb1..1928b66d309f 100644 --- a/fs/smb/server/smb_common.h +++ b/fs/smb/server/smb_common.h @@ -75,42 +75,7 @@ #define FILE_CASE_PRESERVED_NAMES 0x00000002 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001 =20 -#define FILE_READ_DATA 0x00000001 /* Data can be read from the fil= e */ -#define FILE_WRITE_DATA 0x00000002 /* Data can be written to the fi= le */ -#define FILE_APPEND_DATA 0x00000004 /* Data can be appended to the f= ile */ -#define FILE_READ_EA 0x00000008 /* Extended attributes associate= d */ -/* with the file can be read */ -#define FILE_WRITE_EA 0x00000010 /* Extended attributes associate= d */ -/* with the file can be written */ -#define FILE_EXECUTE 0x00000020 /*Data can be read into memory f= rom */ -/* the file using system paging I/O */ -#define FILE_DELETE_CHILD 0x00000040 -#define FILE_READ_ATTRIBUTES 0x00000080 /* Attributes associated with th= e */ -/* file can be read */ -#define FILE_WRITE_ATTRIBUTES 0x00000100 /* Attributes associated with th= e */ -/* file can be written */ -#define DELETE 0x00010000 /* The file can be deleted = */ -#define READ_CONTROL 0x00020000 /* The access control list and = */ -/* ownership associated with the */ -/* file can be read */ -#define WRITE_DAC 0x00040000 /* The access control list and = */ -/* ownership associated with the */ -/* file can be written. */ -#define WRITE_OWNER 0x00080000 /* Ownership information associa= ted */ -/* with the file can be written */ -#define SYNCHRONIZE 0x00100000 /* The file handle can waited on= to */ -/* synchronize with the completion */ -/* of an input/output request */ -#define GENERIC_ALL 0x10000000 -#define GENERIC_EXECUTE 0x20000000 -#define GENERIC_WRITE 0x40000000 -#define GENERIC_READ 0x80000000 -/* In summary - Relevant file */ -/* access flags from CIFS are */ -/* file_read_data, file_write_data */ -/* file_execute, file_read_attributes*/ -/* write_dac, and delete. */ - +/* Combinations of file access permission bits */ #define SET_FILE_READ_RIGHTS (FILE_READ_DATA | FILE_READ_EA \ | FILE_READ_ATTRIBUTES \ | DELETE | READ_CONTROL | WRITE_DAC \ @@ -121,14 +86,6 @@ | FILE_WRITE_ATTRIBUTES \ | DELETE | READ_CONTROL | WRITE_DAC \ | WRITE_OWNER | SYNCHRONIZE) -#define SET_FILE_EXEC_RIGHTS (FILE_READ_EA | FILE_WRITE_EA | FILE_EXECUTE \ - | FILE_READ_ATTRIBUTES \ - | FILE_WRITE_ATTRIBUTES \ - | DELETE | READ_CONTROL | WRITE_DAC \ - | WRITE_OWNER | SYNCHRONIZE) - -#define SET_MINIMUM_RIGHTS (FILE_READ_EA | FILE_READ_ATTRIBUTES \ - | READ_CONTROL | SYNCHRONIZE) =20 /* generic flags for file open */ #define GENERIC_READ_FLAGS (READ_CONTROL | FILE_READ_DATA | \ @@ -159,36 +116,6 @@ #define SMBFLG2_ERR_STATUS cpu_to_le16(0x4000) #define SMBFLG2_UNICODE cpu_to_le16(0x8000) =20 -struct smb_hdr { - __be32 smb_buf_length; - __u8 Protocol[4]; - __u8 Command; - union { - struct { - __u8 ErrorClass; - __u8 Reserved; - __le16 Error; - } __packed DosError; - __le32 CifsError; - } __packed Status; - __u8 Flags; - __le16 Flags2; /* note: le */ - __le16 PidHigh; - union { - struct { - __le32 SequenceNumber; /* le */ - __u32 Reserved; /* zero */ - } __packed Sequence; - __u8 SecuritySignature[8]; /* le */ - } __packed Signature; - __u8 pad[2]; - __le16 Tid; - __le16 Pid; - __le16 Uid; - __le16 Mid; - __u8 WordCount; -} __packed; - struct smb_negotiate_req { struct smb_hdr hdr; /* wct =3D 0 */ __le16 ByteCount; --=20 2.43.0 From nobody Sun Feb 8 11:26:00 2026 Received: from out-181.mta0.migadu.com (out-181.mta0.migadu.com [91.218.175.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 48B0A260566 for ; Sun, 2 Nov 2025 07:32:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068763; cv=none; b=ck/PCvdbwtZ1zO0NHdsnp+xd+tYns9Ln5N2jsC7cbx0/KxW8wPq5xqP+VWLzO3wzU5SUtifXaNRS2P5r8tB+LhuXwlQPt6F3dmQJ9lblmM4/gFiYZyU/NeDMWg1mpXMNs3k5gfR06cZWhnHN8MXi3R+UeP2zpJGy/n4BbL9x7JY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068763; c=relaxed/simple; bh=VhiuHJ+4Z1zt+EjxXBhb1ne7K2AcpYll96v0f6qnnHE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=h7OyX86rhXf4bwHHfoWB4bNgWnz5uBE7jNRIYXt27XbHoN6znXcB36t/PkXDTaeeauTJ+DGZ27pUzC6ZF6/1ygYuTcWTbMiDFQiPUj2b107izZuBcLKj+a8oD9c/iTMjaCuZcsFqdoca7OOaZjnTji/qrCAmu5jB8a2pRNKRsqo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=EoXWni7v; arc=none smtp.client-ip=91.218.175.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="EoXWni7v" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1762068759; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZflUcJpsdunBm7vBOEpuEG3ld8wGTw8JDDmFYKRo34U=; b=EoXWni7vwjyko7CkPqvj1/cVoH+Lt/FNInf8Q7qgFdjbt8VZjEPifobWrPrGe4emMQO9uy QhmP7X8n0lT3lp1+vQ8M4V2Qh7MgWOkXxySyx/6JIPzEUWRI185dcXRx3W3CwMqE9Cb2n4 1UoUXR5ypCs1wmcrOjZf4Jxv7G7vE2g= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org, christophe.jaillet@wanadoo.fr Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ChenXiaoSong Subject: [PATCH v5 08/14] smb: move SMB_NEGOTIATE_REQ to common/smb2pdu.h Date: Sun, 2 Nov 2025 15:30:53 +0800 Message-ID: <20251102073059.3681026-9-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ChenXiaoSong Modify the following places: - negotiate_req -> smb_negotiate_req - NEGOTIATE_REQ -> SMB_NEGOTIATE_REQ - negotiate_rsp -> smb_negotiate_rsp - NEGOTIATE_RSP -> SMB_NEGOTIATE_RSP Then move SMB_NEGOTIATE_REQ to common header file. Signed-off-by: ChenXiaoSong --- fs/smb/client/cifspdu.h | 12 ++++-------- fs/smb/client/cifssmb.c | 6 +++--- fs/smb/common/smb2pdu.h | 7 +++++++ fs/smb/server/smb_common.h | 7 +------ 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/fs/smb/client/cifspdu.h b/fs/smb/client/cifspdu.h index 99cdba9f68dc..1e16ef6f0ff5 100644 --- a/fs/smb/client/cifspdu.h +++ b/fs/smb/client/cifspdu.h @@ -388,19 +388,15 @@ put_bcc(__u16 count, struct smb_hdr *hdr) * */ =20 -typedef struct negotiate_req { - struct smb_hdr hdr; /* wct =3D 0 */ - __le16 ByteCount; - unsigned char DialectsArray[]; -} __attribute__((packed)) NEGOTIATE_REQ; - #define MIN_TZ_ADJ (15 * 60) /* minimum grid for timezones in seconds */ =20 #define READ_RAW_ENABLE 1 #define WRITE_RAW_ENABLE 2 #define RAW_ENABLE (READ_RAW_ENABLE | WRITE_RAW_ENABLE) #define SMB1_CLIENT_GUID_SIZE (16) -typedef struct negotiate_rsp { + +/* See MS-CIFS 2.2.4.52.2 */ +typedef struct smb_negotiate_rsp { struct smb_hdr hdr; /* wct =3D 17 */ __le16 DialectIndex; /* 0xFFFF =3D no dialect acceptable */ __u8 SecurityMode; @@ -426,7 +422,7 @@ typedef struct negotiate_rsp { unsigned char SecurityBlob[]; } __attribute__((packed)) extended_response; } __attribute__((packed)) u; -} __attribute__((packed)) NEGOTIATE_RSP; +} __packed SMB_NEGOTIATE_RSP; =20 /* SecurityMode bits */ #define SECMODE_USER 0x01 /* off indicates share level security */ diff --git a/fs/smb/client/cifssmb.c b/fs/smb/client/cifssmb.c index 703c5a8ed924..0ef1d5024998 100644 --- a/fs/smb/client/cifssmb.c +++ b/fs/smb/client/cifssmb.c @@ -361,7 +361,7 @@ static int validate_t2(struct smb_t2_rsp *pSMB) } =20 static int -decode_ext_sec_blob(struct cifs_ses *ses, NEGOTIATE_RSP *pSMBr) +decode_ext_sec_blob(struct cifs_ses *ses, SMB_NEGOTIATE_RSP *pSMBr) { int rc =3D 0; u16 count; @@ -419,8 +419,8 @@ CIFSSMBNegotiate(const unsigned int xid, struct cifs_ses *ses, struct TCP_Server_Info *server) { - NEGOTIATE_REQ *pSMB; - NEGOTIATE_RSP *pSMBr; + SMB_NEGOTIATE_REQ *pSMB; + SMB_NEGOTIATE_RSP *pSMBr; int rc =3D 0; int bytes_returned; int i; diff --git a/fs/smb/common/smb2pdu.h b/fs/smb/common/smb2pdu.h index be1e652bb474..824d27297bec 100644 --- a/fs/smb/common/smb2pdu.h +++ b/fs/smb/common/smb2pdu.h @@ -2151,4 +2151,11 @@ struct smb_hdr { #define SET_MINIMUM_RIGHTS (FILE_READ_EA | FILE_READ_ATTRIBUTES \ | READ_CONTROL | SYNCHRONIZE) =20 +/* See MS-CIFS 2.2.4.52.1 */ +typedef struct smb_negotiate_req { + struct smb_hdr hdr; /* wct =3D 0 */ + __le16 ByteCount; + unsigned char DialectsArray[]; +} __packed SMB_NEGOTIATE_REQ; + #endif /* _COMMON_SMB2PDU_H */ diff --git a/fs/smb/server/smb_common.h b/fs/smb/server/smb_common.h index 1928b66d309f..cd21756379b5 100644 --- a/fs/smb/server/smb_common.h +++ b/fs/smb/server/smb_common.h @@ -116,12 +116,7 @@ #define SMBFLG2_ERR_STATUS cpu_to_le16(0x4000) #define SMBFLG2_UNICODE cpu_to_le16(0x8000) =20 -struct smb_negotiate_req { - struct smb_hdr hdr; /* wct =3D 0 */ - __le16 ByteCount; - unsigned char DialectsArray[]; -} __packed; - +/* See MS-CIFS 2.2.4.52.2 */ struct smb_negotiate_rsp { struct smb_hdr hdr; /* wct =3D 17 */ __le16 DialectIndex; /* 0xFFFF =3D no dialect acceptable */ --=20 2.43.0 From nobody Sun Feb 8 11:26:00 2026 Received: from out-181.mta0.migadu.com (out-181.mta0.migadu.com [91.218.175.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0FD2126B95B for ; Sun, 2 Nov 2025 07:32:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068766; cv=none; b=caetbyxKUpyQd9AiRgVcbFVCZYCPHOK0UCos2egeBv2PVji0VNq18rcOMyGlU0WrWMyPNPcQOzmM4fDmroWtytVSSqe+WvTuV9t5znWlNHr3u02/EB9Li+NRPVbHk+rYldJqw8kXHA6dbMwjzf+FUoIqzlQSDR4OD8YeeVS4aBs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068766; c=relaxed/simple; bh=zYDM1VAGtIyTPtSxkZzEy99U3EqOLKAqiqCwV/ozeSE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BAefwBmt9SiPmaaK77m73PI2n52pvYMJ8kGQJ0+Pvx4XFrNiuLTIK1g9gC3xZwETgo0weNQ1QJRvRgd1LQOL7NV/hoTc3BXyIuGCBcTzI041XseKddlwKgYlFhHkIfKksf7UyicnVgN7T6su1zBCEPWVbzBZOrKDTw37F5xYCFk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=FAAtAJAV; arc=none smtp.client-ip=91.218.175.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="FAAtAJAV" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1762068762; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1YqAwYSerPicXylaH/mD/M55vhYHC2KuC7PxZC8ZrFc=; b=FAAtAJAVnB/AtAG/T/3JIDUwqpWCPAZHD2oVTPof/3fVMJ4JpT7L1PmmX3cwJ+Bn+KGO9g Sg+5GBvAqZ3BBRNcduqIGGFDjJhRMCu7XUDjM7UzFbJn2EgsD1PNKNiZr4JDUjMOVo9cxQ pVhGYqmGUDLKhswxTzq3ROsBXqD5IFs= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org, christophe.jaillet@wanadoo.fr Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ChenXiaoSong Subject: [PATCH v5 09/14] smb: move list of FileSystemAttributes to common/fscc.h Date: Sun, 2 Nov 2025 15:30:54 +0800 Message-ID: <20251102073059.3681026-10-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ChenXiaoSong These definitions are exactly the same on both client and server, so move them to new common header file. Signed-off-by: ChenXiaoSong --- fs/smb/client/cifsglob.h | 1 + fs/smb/client/cifspdu.h | 27 ------------------------ fs/smb/common/fscc.h | 42 ++++++++++++++++++++++++++++++++++++++ fs/smb/server/smb_common.h | 28 +------------------------ 4 files changed, 44 insertions(+), 54 deletions(-) create mode 100644 fs/smb/common/fscc.h diff --git a/fs/smb/client/cifsglob.h b/fs/smb/client/cifsglob.h index 4d0aca8097c1..0c76e0a31386 100644 --- a/fs/smb/client/cifsglob.h +++ b/fs/smb/client/cifsglob.h @@ -26,6 +26,7 @@ #include #include "../common/smbglob.h" #include "../common/smb2pdu.h" +#include "../common/fscc.h" #include "smb2pdu.h" #include =20 diff --git a/fs/smb/client/cifspdu.h b/fs/smb/client/cifspdu.h index 1e16ef6f0ff5..7816bd3da8d7 100644 --- a/fs/smb/client/cifspdu.h +++ b/fs/smb/client/cifspdu.h @@ -2100,33 +2100,6 @@ typedef struct { /* minimum includes first three fields, and empty FS Name */ #define MIN_FS_ATTR_INFO_SIZE 12 =20 - -/* List of FileSystemAttributes - see 2.5.1 of MS-FSCC */ -#define FILE_SUPPORTS_SPARSE_VDL 0x10000000 /* faster nonsparse extend */ -#define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000 /* allow ioctl dup exte= nts */ -#define FILE_SUPPORT_INTEGRITY_STREAMS 0x04000000 -#define FILE_SUPPORTS_USN_JOURNAL 0x02000000 -#define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000 -#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000 -#define FILE_SUPPORTS_HARD_LINKS 0x00400000 -#define FILE_SUPPORTS_TRANSACTIONS 0x00200000 -#define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000 -#define FILE_READ_ONLY_VOLUME 0x00080000 -#define FILE_NAMED_STREAMS 0x00040000 -#define FILE_SUPPORTS_ENCRYPTION 0x00020000 -#define FILE_SUPPORTS_OBJECT_IDS 0x00010000 -#define FILE_VOLUME_IS_COMPRESSED 0x00008000 -#define FILE_SUPPORTS_POSIX_UNLINK_RENAME 0x00000400 -#define FILE_RETURNS_CLEANUP_RESULT_INFO 0x00000200 -#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100 -#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080 -#define FILE_SUPPORTS_SPARSE_FILES 0x00000040 -#define FILE_VOLUME_QUOTAS 0x00000020 -#define FILE_FILE_COMPRESSION 0x00000010 -#define FILE_PERSISTENT_ACLS 0x00000008 -#define FILE_UNICODE_ON_DISK 0x00000004 -#define FILE_CASE_PRESERVED_NAMES 0x00000002 -#define FILE_CASE_SENSITIVE_SEARCH 0x00000001 typedef struct { __le32 Attributes; __le32 MaxPathNameComponentLength; diff --git a/fs/smb/common/fscc.h b/fs/smb/common/fscc.h new file mode 100644 index 000000000000..c8bfb87232ac --- /dev/null +++ b/fs/smb/common/fscc.h @@ -0,0 +1,42 @@ +/* SPDX-License-Identifier: LGPL-2.1 */ +/* + * + * Copyright (c) International Business Machines Corp., 2009, 2013 + * Etersoft, 2012 + * 2018 Samsung Electronics Co., Ltd. + * Author(s): Steve French (sfrench@us.ibm.com) + * Pavel Shilovsky (pshilovsky@samba.org) 2012 + * Namjae Jeon (linkinjeon@kernel.org) + * + */ +#ifndef _COMMON_SMB_FSCC_H +#define _COMMON_SMB_FSCC_H + +/* List of FileSystemAttributes - see MS-FSCC 2.5.1 */ +#define FILE_SUPPORTS_SPARSE_VDL 0x10000000 /* faster nonsparse extend */ +#define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000 /* allow ioctl dup exte= nts */ +#define FILE_SUPPORT_INTEGRITY_STREAMS 0x04000000 +#define FILE_SUPPORTS_USN_JOURNAL 0x02000000 +#define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000 +#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000 +#define FILE_SUPPORTS_HARD_LINKS 0x00400000 +#define FILE_SUPPORTS_TRANSACTIONS 0x00200000 +#define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000 +#define FILE_READ_ONLY_VOLUME 0x00080000 +#define FILE_NAMED_STREAMS 0x00040000 +#define FILE_SUPPORTS_ENCRYPTION 0x00020000 +#define FILE_SUPPORTS_OBJECT_IDS 0x00010000 +#define FILE_VOLUME_IS_COMPRESSED 0x00008000 +#define FILE_SUPPORTS_POSIX_UNLINK_RENAME 0x00000400 +#define FILE_RETURNS_CLEANUP_RESULT_INFO 0x00000200 +#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100 +#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080 +#define FILE_SUPPORTS_SPARSE_FILES 0x00000040 +#define FILE_VOLUME_QUOTAS 0x00000020 +#define FILE_FILE_COMPRESSION 0x00000010 +#define FILE_PERSISTENT_ACLS 0x00000008 +#define FILE_UNICODE_ON_DISK 0x00000004 +#define FILE_CASE_PRESERVED_NAMES 0x00000002 +#define FILE_CASE_SENSITIVE_SEARCH 0x00000001 + +#endif /* _COMMON_SMB_FSCC_H */ diff --git a/fs/smb/server/smb_common.h b/fs/smb/server/smb_common.h index cd21756379b5..a6004338c6c3 100644 --- a/fs/smb/server/smb_common.h +++ b/fs/smb/server/smb_common.h @@ -12,6 +12,7 @@ #include "nterr.h" #include "../common/smbglob.h" #include "../common/smb2pdu.h" +#include "../common/fscc.h" #include "smb2pdu.h" =20 /* ksmbd's Specific ERRNO */ @@ -48,33 +49,6 @@ #define ATTR_NO_BUFFERING 0x20000000 #define ATTR_WRITE_THROUGH 0x80000000 =20 -/* List of FileSystemAttributes - see 2.5.1 of MS-FSCC */ -#define FILE_SUPPORTS_SPARSE_VDL 0x10000000 /* faster nonsparse extend */ -#define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000 /* allow ioctl dup exte= nts */ -#define FILE_SUPPORT_INTEGRITY_STREAMS 0x04000000 -#define FILE_SUPPORTS_USN_JOURNAL 0x02000000 -#define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000 -#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000 -#define FILE_SUPPORTS_HARD_LINKS 0x00400000 -#define FILE_SUPPORTS_TRANSACTIONS 0x00200000 -#define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000 -#define FILE_READ_ONLY_VOLUME 0x00080000 -#define FILE_NAMED_STREAMS 0x00040000 -#define FILE_SUPPORTS_ENCRYPTION 0x00020000 -#define FILE_SUPPORTS_OBJECT_IDS 0x00010000 -#define FILE_VOLUME_IS_COMPRESSED 0x00008000 -#define FILE_SUPPORTS_POSIX_UNLINK_RENAME 0x00000400 -#define FILE_RETURNS_CLEANUP_RESULT_INFO 0x00000200 -#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100 -#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080 -#define FILE_SUPPORTS_SPARSE_FILES 0x00000040 -#define FILE_VOLUME_QUOTAS 0x00000020 -#define FILE_FILE_COMPRESSION 0x00000010 -#define FILE_PERSISTENT_ACLS 0x00000008 -#define FILE_UNICODE_ON_DISK 0x00000004 -#define FILE_CASE_PRESERVED_NAMES 0x00000002 -#define FILE_CASE_SENSITIVE_SEARCH 0x00000001 - /* Combinations of file access permission bits */ #define SET_FILE_READ_RIGHTS (FILE_READ_DATA | FILE_READ_EA \ | FILE_READ_ATTRIBUTES \ --=20 2.43.0 From nobody Sun Feb 8 11:26:00 2026 Received: from out-186.mta0.migadu.com (out-186.mta0.migadu.com [91.218.175.186]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 98C8D26E17A for ; Sun, 2 Nov 2025 07:32:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.186 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068769; cv=none; b=oSz4X+UDQf69O/idTg8oYge4cY4/x9AjqkSH+Fi/MGfyc8740AfrqKO8QM9lwFBsbCy3lBvRD3Sh3mbruYBnsaprqO1wUozEwIpRELPrO1D0lwlDsq+YI6gmldtgmkYeuzJA3Z9f/c5c8R0uD5MkdIyabxF41E3JbqelhIXZ5Vo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068769; c=relaxed/simple; bh=o+RlPZptq5KODI8OAErhAOJ/TqkXvxVDL0vf3/acYRk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lpn7gdCDFoCLiQCMEW/eI9tNy1vu5NiHdChkJQQTZdrLwOWN0xbobE/nMO3cjL8JL5djQf4P+Gk/Rj98v06kUz1GIDW2OJG3P3UxPE2fPODs7lGF1oCXirY5ZmrOsc6NkJvgnTLPVoe5KiNykK9ozZWPE025R/z2ag1wVet1NGk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=rWQ7I21l; arc=none smtp.client-ip=91.218.175.186 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="rWQ7I21l" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1762068764; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Y7/ugo/v3Xsh3P8Lkxresj8soX9mhOIhRrSKUwQsdj4=; b=rWQ7I21loCoiwTtROUmCFRe7FVSTZvlhTfOp9z2n9l3KAzFbDY/G6noY1ZI7lJ6pBLxuMZ UZwPJ/hSuaw40eET+vSZTvAMYxWb9UnAzc2o3fOPJQPLDediAg4uMDOEupJEyM/DjoOL2F EJ/lO6znnmOJ5HGDzG2TjAT3685gcJ0= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org, christophe.jaillet@wanadoo.fr Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ChenXiaoSong Subject: [PATCH v5 10/14] smb: move some duplicate struct definitions to common/fscc.h Date: Sun, 2 Nov 2025 15:30:55 +0800 Message-ID: <20251102073059.3681026-11-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ChenXiaoSong Modify the following places: - smb2_file_ntwrk_info -> smb2_file_network_open_info - struct filesystem_device_info -> FILE_SYSTEM_DEVICE_INFO - struct file_directory_info -> FILE_DIRECTORY_INFO - struct file_full_directory_info -> FILE_FULL_DIRECTORY_INFO - struct file_both_directory_info -> FILE_BOTH_DIRECTORY_INFO - struct file_id_full_dir_info -> FILE_ID_FULL_DIR_INFO - struct filesystem_posix_info -> FILE_SYSTEM_POSIX_INFO The fields of these structures are exactly the same on both client and server, so move duplicate definitions to common header file. Signed-off-by: ChenXiaoSong --- fs/smb/client/cifspdu.h | 91 ----------------------------- fs/smb/client/inode.c | 4 +- fs/smb/client/readdir.c | 2 +- fs/smb/client/smb2pdu.c | 2 +- fs/smb/client/smb2pdu.h | 13 ----- fs/smb/common/fscc.h | 115 +++++++++++++++++++++++++++++++++++++ fs/smb/server/smb2pdu.c | 72 +++++++++++------------ fs/smb/server/smb2pdu.h | 11 ---- fs/smb/server/smb_common.h | 92 ----------------------------- fs/smb/server/vfs.c | 2 +- 10 files changed, 156 insertions(+), 248 deletions(-) diff --git a/fs/smb/client/cifspdu.h b/fs/smb/client/cifspdu.h index 7816bd3da8d7..39f431051860 100644 --- a/fs/smb/client/cifspdu.h +++ b/fs/smb/client/cifspdu.h @@ -2036,28 +2036,6 @@ typedef struct { =20 #define CIFS_POSIX_EXTENSIONS 0x00000010 /* support for new QFSI= nfo */ =20 -typedef struct { - /* For undefined recommended transfer size return -1 in that field */ - __le32 OptimalTransferSize; /* bsize on some os, iosize on other os */ - __le32 BlockSize; - /* The next three fields are in terms of the block size. - (above). If block size is unknown, 4096 would be a - reasonable block size for a server to report. - Note that returning the blocks/blocksavail removes need - to make a second call (to QFSInfo level 0x103 to get this info. - UserBlockAvail is typically less than or equal to BlocksAvail, - if no distinction is made return the same value in each */ - __le64 TotalBlocks; - __le64 BlocksAvail; /* bfree */ - __le64 UserBlocksAvail; /* bavail */ - /* For undefined Node fields or FSID return -1 */ - __le64 TotalFileNodes; - __le64 FreeFileNodes; - __le64 FileSysIdentifier; /* fsid */ - /* NB Namelen comes from FILE_SYSTEM_ATTRIBUTE_INFO call */ - /* NB flags can come from FILE_SYSTEM_DEVICE_INFO call */ -} __attribute__((packed)) FILE_SYSTEM_POSIX_INFO; - /* DeviceType Flags */ #define FILE_DEVICE_CD_ROM 0x00000002 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 @@ -2092,11 +2070,6 @@ typedef struct { #define FILE_PORTABLE_DEVICE 0x00004000 #define FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL 0x00020000 =20 -typedef struct { - __le32 DeviceType; - __le32 DeviceCharacteristics; -} __attribute__((packed)) FILE_SYSTEM_DEVICE_INFO; /* device info level 0x= 104 */ - /* minimum includes first three fields, and empty FS Name */ #define MIN_FS_ATTR_INFO_SIZE 12 =20 @@ -2332,70 +2305,6 @@ typedef struct { }; } __attribute__((packed)) FILE_UNIX_INFO; /* level 0x202 */ =20 -typedef struct { - __le32 NextEntryOffset; - __u32 FileIndex; - __le64 CreationTime; - __le64 LastAccessTime; - __le64 LastWriteTime; - __le64 ChangeTime; - __le64 EndOfFile; - __le64 AllocationSize; - __le32 ExtFileAttributes; - __le32 FileNameLength; - char FileName[]; -} __attribute__((packed)) FILE_DIRECTORY_INFO; /* level 0x101 FF resp da= ta */ - -typedef struct { - __le32 NextEntryOffset; - __u32 FileIndex; - __le64 CreationTime; - __le64 LastAccessTime; - __le64 LastWriteTime; - __le64 ChangeTime; - __le64 EndOfFile; - __le64 AllocationSize; - __le32 ExtFileAttributes; - __le32 FileNameLength; - __le32 EaSize; /* length of the xattrs */ - char FileName[]; -} __attribute__((packed)) FILE_FULL_DIRECTORY_INFO; /* level 0x102 rsp dat= a */ - -typedef struct { - __le32 NextEntryOffset; - __u32 FileIndex; - __le64 CreationTime; - __le64 LastAccessTime; - __le64 LastWriteTime; - __le64 ChangeTime; - __le64 EndOfFile; - __le64 AllocationSize; - __le32 ExtFileAttributes; - __le32 FileNameLength; - __le32 EaSize; /* EA size */ - __le32 Reserved; - __le64 UniqueId; /* inode num - le since Samba puts ino in low 32 bit*/ - char FileName[]; -} __attribute__((packed)) SEARCH_ID_FULL_DIR_INFO; /* level 0x105 FF rsp d= ata */ - -typedef struct { - __le32 NextEntryOffset; - __u32 FileIndex; - __le64 CreationTime; - __le64 LastAccessTime; - __le64 LastWriteTime; - __le64 ChangeTime; - __le64 EndOfFile; - __le64 AllocationSize; - __le32 ExtFileAttributes; - __le32 FileNameLength; - __le32 EaSize; /* length of the xattrs */ - __u8 ShortNameLength; - __u8 Reserved; - __u8 ShortName[24]; - char FileName[]; -} __attribute__((packed)) FILE_BOTH_DIRECTORY_INFO; /* level 0x104 FFrsp d= ata */ - typedef struct { __u32 ResumeKey; __le16 CreationDate; /* SMB Date */ diff --git a/fs/smb/client/inode.c b/fs/smb/client/inode.c index cac355364e43..c2ac39d89df2 100644 --- a/fs/smb/client/inode.c +++ b/fs/smb/client/inode.c @@ -1328,7 +1328,7 @@ static int cifs_get_fattr(struct cifs_open_info_data = *data, /* for easier reading */ FILE_ALL_INFO *fi; FILE_DIRECTORY_INFO *fdi; - SEARCH_ID_FULL_DIR_INFO *si; + FILE_ID_FULL_DIR_INFO *si; =20 rc =3D cifs_backup_query_path_info(xid, tcon, sb, full_path, @@ -1339,7 +1339,7 @@ static int cifs_get_fattr(struct cifs_open_info_data = *data, =20 move_cifs_info_to_smb2(&data->fi, fi); fdi =3D (FILE_DIRECTORY_INFO *)fi; - si =3D (SEARCH_ID_FULL_DIR_INFO *)fi; + si =3D (FILE_ID_FULL_DIR_INFO *)fi; =20 cifs_dir_info_to_fattr(fattr, fdi, cifs_sb); fattr->cf_uniqueid =3D le64_to_cpu(si->UniqueId); diff --git a/fs/smb/client/readdir.c b/fs/smb/client/readdir.c index f0ce26622a14..2fd95c1e91ab 100644 --- a/fs/smb/client/readdir.c +++ b/fs/smb/client/readdir.c @@ -548,7 +548,7 @@ static void cifs_fill_dirent_full(struct cifs_dirent *d= e, } =20 static void cifs_fill_dirent_search(struct cifs_dirent *de, - const SEARCH_ID_FULL_DIR_INFO *info) + const FILE_ID_FULL_DIR_INFO *info) { de->name =3D &info->FileName[0]; de->namelen =3D le32_to_cpu(info->FileNameLength); diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c index c1f67864c84b..db7ea0ff4c05 100644 --- a/fs/smb/client/smb2pdu.c +++ b/fs/smb/client/smb2pdu.c @@ -5451,7 +5451,7 @@ smb2_parse_query_directory(struct cifs_tcon *tcon, info_buf_size =3D sizeof(FILE_DIRECTORY_INFO); break; case SMB_FIND_FILE_ID_FULL_DIR_INFO: - info_buf_size =3D sizeof(SEARCH_ID_FULL_DIR_INFO); + info_buf_size =3D sizeof(FILE_ID_FULL_DIR_INFO); break; case SMB_FIND_FILE_POSIX_INFO: /* note that posix payload are variable size */ diff --git a/fs/smb/client/smb2pdu.h b/fs/smb/client/smb2pdu.h index 98ed7a22cd57..78bb99f29d38 100644 --- a/fs/smb/client/smb2pdu.h +++ b/fs/smb/client/smb2pdu.h @@ -224,19 +224,6 @@ struct smb2_file_reparse_point_info { __le32 Tag; } __packed; =20 -struct smb2_file_network_open_info { - struct_group_attr(network_open_info, __packed, - __le64 CreationTime; - __le64 LastAccessTime; - __le64 LastWriteTime; - __le64 ChangeTime; - __le64 AllocationSize; - __le64 EndOfFile; - __le32 Attributes; - ); - __le32 Reserved; -} __packed; /* level 34 Query also similar returned in close rsp and open = rsp */ - /* See MS-FSCC 2.4.21 */ struct smb2_file_id_information { __le64 VolumeSerialNumber; diff --git a/fs/smb/common/fscc.h b/fs/smb/common/fscc.h index c8bfb87232ac..6fa7c65d304b 100644 --- a/fs/smb/common/fscc.h +++ b/fs/smb/common/fscc.h @@ -12,6 +12,88 @@ #ifndef _COMMON_SMB_FSCC_H #define _COMMON_SMB_FSCC_H =20 +/* See MS-FSCC 2.4.8 */ +typedef struct { + __le32 NextEntryOffset; + __u32 FileIndex; + __le64 CreationTime; + __le64 LastAccessTime; + __le64 LastWriteTime; + __le64 ChangeTime; + __le64 EndOfFile; + __le64 AllocationSize; + __le32 ExtFileAttributes; + __le32 FileNameLength; + __le32 EaSize; /* length of the xattrs */ + __u8 ShortNameLength; + __u8 Reserved; + __u8 ShortName[24]; + char FileName[]; +} __packed FILE_BOTH_DIRECTORY_INFO; /* level 0x104 FFrsp data */ + +/* See MS-FSCC 2.4.10 */ +typedef struct { + __le32 NextEntryOffset; + __u32 FileIndex; + __le64 CreationTime; + __le64 LastAccessTime; + __le64 LastWriteTime; + __le64 ChangeTime; + __le64 EndOfFile; + __le64 AllocationSize; + __le32 ExtFileAttributes; + __le32 FileNameLength; + char FileName[]; +} __packed FILE_DIRECTORY_INFO; /* level 0x101 FF resp data */ + +/* See MS-FSCC 2.4.14 */ +typedef struct { + __le32 NextEntryOffset; + __u32 FileIndex; + __le64 CreationTime; + __le64 LastAccessTime; + __le64 LastWriteTime; + __le64 ChangeTime; + __le64 EndOfFile; + __le64 AllocationSize; + __le32 ExtFileAttributes; + __le32 FileNameLength; + __le32 EaSize; /* length of the xattrs */ + char FileName[]; +} __packed FILE_FULL_DIRECTORY_INFO; /* level 0x102 rsp data */ + +/* See MS-FSCC 2.4.24 */ +typedef struct { + __le32 NextEntryOffset; + __u32 FileIndex; + __le64 CreationTime; + __le64 LastAccessTime; + __le64 LastWriteTime; + __le64 ChangeTime; + __le64 EndOfFile; + __le64 AllocationSize; + __le32 ExtFileAttributes; + __le32 FileNameLength; + __le32 EaSize; /* EA size */ + __le32 Reserved; + __le64 UniqueId; /* inode num - le since Samba puts ino in low 32 bit*/ + char FileName[]; +} __packed FILE_ID_FULL_DIR_INFO; /* level 0x105 FF rsp data */ + +/* See MS-FSCC 2.4.34 */ +struct smb2_file_network_open_info { + struct_group_attr(network_open_info, __packed, + __le64 CreationTime; + __le64 LastAccessTime; + __le64 LastWriteTime; + __le64 ChangeTime; + __le64 AllocationSize; + __le64 EndOfFile; + __le32 Attributes; + ); + __le32 Reserved; +} __packed; /* level 34 Query also similar returned in close rsp and open = rsp */ + /* List of FileSystemAttributes - see MS-FSCC 2.5.1 */ #define FILE_SUPPORTS_SPARSE_VDL 0x10000000 /* faster nonsparse extend */ #define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000 /* allow ioctl dup exte= nts */ @@ -39,4 +121,37 @@ #define FILE_CASE_PRESERVED_NAMES 0x00000002 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001 =20 +/* See MS-FSCC 2.5.10 */ +typedef struct { + __le32 DeviceType; + __le32 DeviceCharacteristics; +} __packed FILE_SYSTEM_DEVICE_INFO; /* device info level 0x104 */ + +/* + * See POSIX Extensions to MS-FSCC 2.3.2.1 + * Link: https://gitlab.com/samba-team/smb3-posix-spec/-/blob/master/fscc_= posix_extensions.md + */ +typedef struct { + /* For undefined recommended transfer size return -1 in that field */ + __le32 OptimalTransferSize; /* bsize on some os, iosize on other os */ + __le32 BlockSize; + /* The next three fields are in terms of the block size. + * (above). If block size is unknown, 4096 would be a + * reasonable block size for a server to report. + * Note that returning the blocks/blocksavail removes need + * to make a second call (to QFSInfo level 0x103 to get this info. + * UserBlockAvail is typically less than or equal to BlocksAvail, + * if no distinction is made return the same value in each + */ + __le64 TotalBlocks; + __le64 BlocksAvail; /* bfree */ + __le64 UserBlocksAvail; /* bavail */ + /* For undefined Node fields or FSID return -1 */ + __le64 TotalFileNodes; + __le64 FreeFileNodes; + __le64 FileSysIdentifier; /* fsid */ + /* NB Namelen comes from FILE_SYSTEM_ATTRIBUTE_INFO call */ + /* NB flags can come from FILE_SYSTEM_DEVICE_INFO call */ +} __packed FILE_SYSTEM_POSIX_INFO; + #endif /* _COMMON_SMB_FSCC_H */ diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c index 3c2ddf0da344..541732208c37 100644 --- a/fs/smb/server/smb2pdu.c +++ b/fs/smb/server/smb2pdu.c @@ -3796,15 +3796,15 @@ static int readdir_info_level_struct_sz(int info_le= vel) { switch (info_level) { case FILE_FULL_DIRECTORY_INFORMATION: - return sizeof(struct file_full_directory_info); + return sizeof(FILE_FULL_DIRECTORY_INFO); case FILE_BOTH_DIRECTORY_INFORMATION: - return sizeof(struct file_both_directory_info); + return sizeof(FILE_BOTH_DIRECTORY_INFO); case FILE_DIRECTORY_INFORMATION: - return sizeof(struct file_directory_info); + return sizeof(FILE_DIRECTORY_INFO); case FILE_NAMES_INFORMATION: return sizeof(struct file_names_info); case FILEID_FULL_DIRECTORY_INFORMATION: - return sizeof(struct file_id_full_dir_info); + return sizeof(FILE_ID_FULL_DIR_INFO); case FILEID_BOTH_DIRECTORY_INFORMATION: return sizeof(struct file_id_both_directory_info); case SMB_FIND_FILE_POSIX_INFO: @@ -3819,9 +3819,9 @@ static int dentry_name(struct ksmbd_dir_info *d_info,= int info_level) switch (info_level) { case FILE_FULL_DIRECTORY_INFORMATION: { - struct file_full_directory_info *ffdinfo; + FILE_FULL_DIRECTORY_INFO *ffdinfo; =20 - ffdinfo =3D (struct file_full_directory_info *)d_info->rptr; + ffdinfo =3D (FILE_FULL_DIRECTORY_INFO *)d_info->rptr; d_info->rptr +=3D le32_to_cpu(ffdinfo->NextEntryOffset); d_info->name =3D ffdinfo->FileName; d_info->name_len =3D le32_to_cpu(ffdinfo->FileNameLength); @@ -3829,9 +3829,9 @@ static int dentry_name(struct ksmbd_dir_info *d_info,= int info_level) } case FILE_BOTH_DIRECTORY_INFORMATION: { - struct file_both_directory_info *fbdinfo; + FILE_BOTH_DIRECTORY_INFO *fbdinfo; =20 - fbdinfo =3D (struct file_both_directory_info *)d_info->rptr; + fbdinfo =3D (FILE_BOTH_DIRECTORY_INFO *)d_info->rptr; d_info->rptr +=3D le32_to_cpu(fbdinfo->NextEntryOffset); d_info->name =3D fbdinfo->FileName; d_info->name_len =3D le32_to_cpu(fbdinfo->FileNameLength); @@ -3839,9 +3839,9 @@ static int dentry_name(struct ksmbd_dir_info *d_info,= int info_level) } case FILE_DIRECTORY_INFORMATION: { - struct file_directory_info *fdinfo; + FILE_DIRECTORY_INFO *fdinfo; =20 - fdinfo =3D (struct file_directory_info *)d_info->rptr; + fdinfo =3D (FILE_DIRECTORY_INFO *)d_info->rptr; d_info->rptr +=3D le32_to_cpu(fdinfo->NextEntryOffset); d_info->name =3D fdinfo->FileName; d_info->name_len =3D le32_to_cpu(fdinfo->FileNameLength); @@ -3859,9 +3859,9 @@ static int dentry_name(struct ksmbd_dir_info *d_info,= int info_level) } case FILEID_FULL_DIRECTORY_INFORMATION: { - struct file_id_full_dir_info *dinfo; + FILE_ID_FULL_DIR_INFO *dinfo; =20 - dinfo =3D (struct file_id_full_dir_info *)d_info->rptr; + dinfo =3D (FILE_ID_FULL_DIR_INFO *)d_info->rptr; d_info->rptr +=3D le32_to_cpu(dinfo->NextEntryOffset); d_info->name =3D dinfo->FileName; d_info->name_len =3D le32_to_cpu(dinfo->FileNameLength); @@ -3944,9 +3944,9 @@ static int smb2_populate_readdir_entry(struct ksmbd_c= onn *conn, int info_level, switch (info_level) { case FILE_FULL_DIRECTORY_INFORMATION: { - struct file_full_directory_info *ffdinfo; + FILE_FULL_DIRECTORY_INFO *ffdinfo; =20 - ffdinfo =3D (struct file_full_directory_info *)kstat; + ffdinfo =3D (FILE_FULL_DIRECTORY_INFO *)kstat; ffdinfo->FileNameLength =3D cpu_to_le32(conv_len); ffdinfo->EaSize =3D smb2_get_reparse_tag_special_file(ksmbd_kstat->kstat->mode); @@ -3960,9 +3960,9 @@ static int smb2_populate_readdir_entry(struct ksmbd_c= onn *conn, int info_level, } case FILE_BOTH_DIRECTORY_INFORMATION: { - struct file_both_directory_info *fbdinfo; + FILE_BOTH_DIRECTORY_INFO *fbdinfo; =20 - fbdinfo =3D (struct file_both_directory_info *)kstat; + fbdinfo =3D (FILE_BOTH_DIRECTORY_INFO *)kstat; fbdinfo->FileNameLength =3D cpu_to_le32(conv_len); fbdinfo->EaSize =3D smb2_get_reparse_tag_special_file(ksmbd_kstat->kstat->mode); @@ -3978,9 +3978,9 @@ static int smb2_populate_readdir_entry(struct ksmbd_c= onn *conn, int info_level, } case FILE_DIRECTORY_INFORMATION: { - struct file_directory_info *fdinfo; + FILE_DIRECTORY_INFO *fdinfo; =20 - fdinfo =3D (struct file_directory_info *)kstat; + fdinfo =3D (FILE_DIRECTORY_INFO *)kstat; fdinfo->FileNameLength =3D cpu_to_le32(conv_len); if (d_info->hide_dot_file && d_info->name[0] =3D=3D '.') fdinfo->ExtFileAttributes |=3D FILE_ATTRIBUTE_HIDDEN_LE; @@ -4000,9 +4000,9 @@ static int smb2_populate_readdir_entry(struct ksmbd_c= onn *conn, int info_level, } case FILEID_FULL_DIRECTORY_INFORMATION: { - struct file_id_full_dir_info *dinfo; + FILE_ID_FULL_DIR_INFO *dinfo; =20 - dinfo =3D (struct file_id_full_dir_info *)kstat; + dinfo =3D (FILE_ID_FULL_DIR_INFO *)kstat; dinfo->FileNameLength =3D cpu_to_le32(conv_len); dinfo->EaSize =3D smb2_get_reparse_tag_special_file(ksmbd_kstat->kstat->mode); @@ -4206,9 +4206,9 @@ static int reserve_populate_dentry(struct ksmbd_dir_i= nfo *d_info, switch (info_level) { case FILE_FULL_DIRECTORY_INFORMATION: { - struct file_full_directory_info *ffdinfo; + FILE_FULL_DIRECTORY_INFO *ffdinfo; =20 - ffdinfo =3D (struct file_full_directory_info *)d_info->wptr; + ffdinfo =3D (FILE_FULL_DIRECTORY_INFO *)d_info->wptr; memcpy(ffdinfo->FileName, d_info->name, d_info->name_len); ffdinfo->FileName[d_info->name_len] =3D 0x00; ffdinfo->FileNameLength =3D cpu_to_le32(d_info->name_len); @@ -4217,9 +4217,9 @@ static int reserve_populate_dentry(struct ksmbd_dir_i= nfo *d_info, } case FILE_BOTH_DIRECTORY_INFORMATION: { - struct file_both_directory_info *fbdinfo; + FILE_BOTH_DIRECTORY_INFO *fbdinfo; =20 - fbdinfo =3D (struct file_both_directory_info *)d_info->wptr; + fbdinfo =3D (FILE_BOTH_DIRECTORY_INFO *)d_info->wptr; memcpy(fbdinfo->FileName, d_info->name, d_info->name_len); fbdinfo->FileName[d_info->name_len] =3D 0x00; fbdinfo->FileNameLength =3D cpu_to_le32(d_info->name_len); @@ -4228,9 +4228,9 @@ static int reserve_populate_dentry(struct ksmbd_dir_i= nfo *d_info, } case FILE_DIRECTORY_INFORMATION: { - struct file_directory_info *fdinfo; + FILE_DIRECTORY_INFO *fdinfo; =20 - fdinfo =3D (struct file_directory_info *)d_info->wptr; + fdinfo =3D (FILE_DIRECTORY_INFO *)d_info->wptr; memcpy(fdinfo->FileName, d_info->name, d_info->name_len); fdinfo->FileName[d_info->name_len] =3D 0x00; fdinfo->FileNameLength =3D cpu_to_le32(d_info->name_len); @@ -4250,9 +4250,9 @@ static int reserve_populate_dentry(struct ksmbd_dir_i= nfo *d_info, } case FILEID_FULL_DIRECTORY_INFORMATION: { - struct file_id_full_dir_info *dinfo; + FILE_ID_FULL_DIR_INFO *dinfo; =20 - dinfo =3D (struct file_id_full_dir_info *)d_info->wptr; + dinfo =3D (FILE_ID_FULL_DIR_INFO *)d_info->wptr; memcpy(dinfo->FileName, d_info->name, d_info->name_len); dinfo->FileName[d_info->name_len] =3D 0x00; dinfo->FileNameLength =3D cpu_to_le32(d_info->name_len); @@ -4514,7 +4514,7 @@ int smb2_query_dir(struct ksmbd_work *work) goto err_out; } else { no_buf_len: - ((struct file_directory_info *) + ((FILE_DIRECTORY_INFO *) ((char *)rsp->Buffer + d_info.last_entry_offset)) ->NextEntryOffset =3D 0; if (d_info.data_count >=3D d_info.last_entry_off_align) @@ -5133,7 +5133,7 @@ static int get_file_internal_info(struct smb2_query_i= nfo_rsp *rsp, static int get_file_network_open_info(struct smb2_query_info_rsp *rsp, struct ksmbd_file *fp, void *rsp_org) { - struct smb2_file_ntwrk_info *file_info; + struct smb2_file_network_open_info *file_info; struct kstat stat; u64 time; int ret; @@ -5149,7 +5149,7 @@ static int get_file_network_open_info(struct smb2_que= ry_info_rsp *rsp, if (ret) return ret; =20 - file_info =3D (struct smb2_file_ntwrk_info *)rsp->Buffer; + file_info =3D (struct smb2_file_network_open_info *)rsp->Buffer; =20 file_info->CreationTime =3D cpu_to_le64(fp->create_time); time =3D ksmbd_UnixTimeToNT(stat.atime); @@ -5168,7 +5168,7 @@ static int get_file_network_open_info(struct smb2_que= ry_info_rsp *rsp, } file_info->Reserved =3D cpu_to_le32(0); rsp->OutputBufferLength =3D - cpu_to_le32(sizeof(struct smb2_file_ntwrk_info)); + cpu_to_le32(sizeof(struct smb2_file_network_open_info)); return 0; } =20 @@ -5476,9 +5476,9 @@ static int smb2_get_info_filesystem(struct ksmbd_work= *work, switch (fsinfoclass) { case FS_DEVICE_INFORMATION: { - struct filesystem_device_info *info; + FILE_SYSTEM_DEVICE_INFO *info; =20 - info =3D (struct filesystem_device_info *)rsp->Buffer; + info =3D (FILE_SYSTEM_DEVICE_INFO *)rsp->Buffer; =20 info->DeviceType =3D cpu_to_le32(FILE_DEVICE_DISK); info->DeviceCharacteristics =3D @@ -5633,14 +5633,14 @@ static int smb2_get_info_filesystem(struct ksmbd_wo= rk *work, } case FS_POSIX_INFORMATION: { - struct filesystem_posix_info *info; + FILE_SYSTEM_POSIX_INFO *info; =20 if (!work->tcon->posix_extensions) { pr_err("client doesn't negotiate with SMB3.1.1 POSIX Extensions\n"); path_put(&path); return -EOPNOTSUPP; } else { - info =3D (struct filesystem_posix_info *)(rsp->Buffer); + info =3D (FILE_SYSTEM_POSIX_INFO *)(rsp->Buffer); info->OptimalTransferSize =3D cpu_to_le32(stfs.f_bsize); info->BlockSize =3D cpu_to_le32(stfs.f_bsize); info->TotalBlocks =3D cpu_to_le64(stfs.f_blocks); diff --git a/fs/smb/server/smb2pdu.h b/fs/smb/server/smb2pdu.h index acaf5955eec1..66cdc8e4a648 100644 --- a/fs/smb/server/smb2pdu.h +++ b/fs/smb/server/smb2pdu.h @@ -205,17 +205,6 @@ struct smb2_file_stream_info { char StreamName[]; } __packed; =20 -struct smb2_file_ntwrk_info { - __le64 CreationTime; - __le64 LastAccessTime; - __le64 LastWriteTime; - __le64 ChangeTime; - __le64 AllocationSize; - __le64 EndOfFile; - __le32 Attributes; - __le32 Reserved; -} __packed; - struct smb2_file_standard_info { __le64 AllocationSize; __le64 EndOfFile; diff --git a/fs/smb/server/smb_common.h b/fs/smb/server/smb_common.h index a6004338c6c3..576c2ce591a5 100644 --- a/fs/smb/server/smb_common.h +++ b/fs/smb/server/smb_common.h @@ -104,11 +104,6 @@ struct filesystem_attribute_info { __le16 FileSystemName[]; /* do not have to save this - get subset? */ } __packed; =20 -struct filesystem_device_info { - __le32 DeviceType; - __le32 DeviceCharacteristics; -} __packed; /* device info level 0x104 */ - struct filesystem_vol_info { __le64 VolumeCreationTime; __le32 SerialNumber; @@ -140,20 +135,6 @@ struct object_id_info { struct fs_extended_info extended_info; } __packed; =20 -struct file_directory_info { - __le32 NextEntryOffset; - __u32 FileIndex; - __le64 CreationTime; - __le64 LastAccessTime; - __le64 LastWriteTime; - __le64 ChangeTime; - __le64 EndOfFile; - __le64 AllocationSize; - __le32 ExtFileAttributes; - __le32 FileNameLength; - char FileName[]; -} __packed; /* level 0x101 FF resp data */ - struct file_names_info { __le32 NextEntryOffset; __u32 FileIndex; @@ -161,39 +142,6 @@ struct file_names_info { char FileName[]; } __packed; /* level 0xc FF resp data */ =20 -struct file_full_directory_info { - __le32 NextEntryOffset; - __u32 FileIndex; - __le64 CreationTime; - __le64 LastAccessTime; - __le64 LastWriteTime; - __le64 ChangeTime; - __le64 EndOfFile; - __le64 AllocationSize; - __le32 ExtFileAttributes; - __le32 FileNameLength; - __le32 EaSize; - char FileName[]; -} __packed; /* level 0x102 FF resp */ - -struct file_both_directory_info { - __le32 NextEntryOffset; - __u32 FileIndex; - __le64 CreationTime; - __le64 LastAccessTime; - __le64 LastWriteTime; - __le64 ChangeTime; - __le64 EndOfFile; - __le64 AllocationSize; - __le32 ExtFileAttributes; - __le32 FileNameLength; - __le32 EaSize; /* length of the xattrs */ - __u8 ShortNameLength; - __u8 Reserved; - __u8 ShortName[24]; - char FileName[]; -} __packed; /* level 0x104 FFrsp data */ - struct file_id_both_directory_info { __le32 NextEntryOffset; __u32 FileIndex; @@ -214,46 +162,6 @@ struct file_id_both_directory_info { char FileName[]; } __packed; =20 -struct file_id_full_dir_info { - __le32 NextEntryOffset; - __u32 FileIndex; - __le64 CreationTime; - __le64 LastAccessTime; - __le64 LastWriteTime; - __le64 ChangeTime; - __le64 EndOfFile; - __le64 AllocationSize; - __le32 ExtFileAttributes; - __le32 FileNameLength; - __le32 EaSize; /* EA size */ - __le32 Reserved; - __le64 UniqueId; /* inode num - le since Samba puts ino in low 32 bit*/ - char FileName[]; -} __packed; /* level 0x105 FF rsp data */ - -struct filesystem_posix_info { - /* For undefined recommended transfer size return -1 in that field */ - __le32 OptimalTransferSize; /* bsize on some os, iosize on other os */ - __le32 BlockSize; - /* The next three fields are in terms of the block size. - * (above). If block size is unknown, 4096 would be a - * reasonable block size for a server to report. - * Note that returning the blocks/blocksavail removes need - * to make a second call (to QFSInfo level 0x103 to get this info. - * UserBlockAvail is typically less than or equal to BlocksAvail, - * if no distinction is made return the same value in each - */ - __le64 TotalBlocks; - __le64 BlocksAvail; /* bfree */ - __le64 UserBlocksAvail; /* bavail */ - /* For undefined Node fields or FSID return -1 */ - __le64 TotalFileNodes; - __le64 FreeFileNodes; - __le64 FileSysIdentifier; /* fsid */ - /* NB Namelen comes from FILE_SYSTEM_ATTRIBUTE_INFO call */ - /* NB flags can come from FILE_SYSTEM_DEVICE_INFO call */ -} __packed; - struct smb_version_ops { u16 (*get_cmd_val)(struct ksmbd_work *swork); int (*init_rsp_hdr)(struct ksmbd_work *swork); diff --git a/fs/smb/server/vfs.c b/fs/smb/server/vfs.c index 891ed2dc2b73..a8660487e4ae 100644 --- a/fs/smb/server/vfs.c +++ b/fs/smb/server/vfs.c @@ -1654,7 +1654,7 @@ int ksmbd_vfs_get_dos_attrib_xattr(struct mnt_idmap *= idmap, */ void *ksmbd_vfs_init_kstat(char **p, struct ksmbd_kstat *ksmbd_kstat) { - struct file_directory_info *info =3D (struct file_directory_info *)(*p); + FILE_DIRECTORY_INFO *info =3D (FILE_DIRECTORY_INFO *)(*p); struct kstat *kstat =3D ksmbd_kstat->kstat; u64 time; =20 --=20 2.43.0 From nobody Sun Feb 8 11:26:00 2026 Received: from out-183.mta0.migadu.com (out-183.mta0.migadu.com [91.218.175.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3C9C726ED5D for ; Sun, 2 Nov 2025 07:32:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.183 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068771; cv=none; b=K893M+9XkikhHKhZ5O/K6CWJgytfk8Mtxmg8PQ3/3I60eRiLXR0RX467eAEwqpuqLTKeXBRytykfECEjUwt4COSVavQkv0ojn4QPjI4XoyEURI98otl+BjmMvHLqdBUaUQ7HcqLMF32tQhFiPMZPYVgGsMz2vCgfl5cfxkXZPK0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068771; c=relaxed/simple; bh=0023sBdRPcprDQcpYHLMhuyqxAT6kqzzIa22A7j8YvI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NQccL9dW9LrzbheitGlz0pA5/y7xv99UQzWUuit3R2jnh4APRuKR+hxfScL8qM/+8aAkmi1cCkrbXwiaXkwRkB5tOBuWYOCJX3Y3DwAl5JEC2QuqcdcbtkdXvWH8uziEelZ3ZzxmZifRuvoLARtrDV+rwZjPJlcgykV+T1aPNA0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=m23CfcY+; arc=none smtp.client-ip=91.218.175.183 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="m23CfcY+" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1762068767; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=dPN/EJmc9aBkmsGhnAoWjGdU32TAhdREIo71qBTEZgQ=; b=m23CfcY+tRNoyOlQjarLXL38npGZ6k0AVZb2tJoDsMsssfanFIE2WU0i8j0QFXmnVZ0bvi JmmMyeDKCEqrmlauQYd+640v1VCDu0/Xob8833Uni4VrCddOeT0stu/snWomn+dHtIE+31 JxUjzsGoChA3pltNrHZb7OInN3kEjg0= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org, christophe.jaillet@wanadoo.fr Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ChenXiaoSong Subject: [PATCH v5 11/14] smb: move FILE_SYSTEM_SIZE_INFO to common/fscc.h Date: Sun, 2 Nov 2025 15:30:56 +0800 Message-ID: <20251102073059.3681026-12-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ChenXiaoSong Rename the following places: - struct filesystem_info -> FILE_SYSTEM_SIZE_INFO - FILE_SYSTEM_INFO -> FILE_SYSTEM_SIZE_INFO - FreeAllocationUnits -> AvailableAllocationUnits: consistent with MS-FSC= C 2.5.8 Then move duplicate definitions to common header file. Signed-off-by: ChenXiaoSong --- fs/smb/client/cifspdu.h | 7 ------- fs/smb/client/cifssmb.c | 6 +++--- fs/smb/common/fscc.h | 8 ++++++++ fs/smb/server/smb2pdu.c | 6 +++--- fs/smb/server/smb_common.h | 7 ------- 5 files changed, 14 insertions(+), 20 deletions(-) diff --git a/fs/smb/client/cifspdu.h b/fs/smb/client/cifspdu.h index 39f431051860..a9a853b9011f 100644 --- a/fs/smb/client/cifspdu.h +++ b/fs/smb/client/cifspdu.h @@ -1982,13 +1982,6 @@ struct aliasInfo92 { int shareNameOffset; } __attribute__((packed)); =20 -typedef struct { - __le64 TotalAllocationUnits; - __le64 FreeAllocationUnits; - __le32 SectorsPerAllocationUnit; - __le32 BytesPerSector; -} __attribute__((packed)) FILE_SYSTEM_INFO; /* size info, level 0x103 */ - typedef struct { __le32 fsid; __le32 SectorsPerAllocationUnit; diff --git a/fs/smb/client/cifssmb.c b/fs/smb/client/cifssmb.c index 0ef1d5024998..257a6beb4b7d 100644 --- a/fs/smb/client/cifssmb.c +++ b/fs/smb/client/cifssmb.c @@ -4724,7 +4724,7 @@ CIFSSMBQFSInfo(const unsigned int xid, struct cifs_tc= on *tcon, /* level 0x103 SMB_QUERY_FILE_SYSTEM_INFO */ TRANSACTION2_QFSI_REQ *pSMB =3D NULL; TRANSACTION2_QFSI_RSP *pSMBr =3D NULL; - FILE_SYSTEM_INFO *response_data; + FILE_SYSTEM_SIZE_INFO *response_data; int rc =3D 0; int bytes_returned =3D 0; __u16 params, byte_count; @@ -4772,7 +4772,7 @@ CIFSSMBQFSInfo(const unsigned int xid, struct cifs_tc= on *tcon, __u16 data_offset =3D le16_to_cpu(pSMBr->t2.DataOffset); =20 response_data =3D - (FILE_SYSTEM_INFO + (FILE_SYSTEM_SIZE_INFO *) (((char *) &pSMBr->hdr.Protocol) + data_offset); FSData->f_bsize =3D @@ -4789,7 +4789,7 @@ CIFSSMBQFSInfo(const unsigned int xid, struct cifs_tc= on *tcon, FSData->f_blocks =3D le64_to_cpu(response_data->TotalAllocationUnits); FSData->f_bfree =3D FSData->f_bavail =3D - le64_to_cpu(response_data->FreeAllocationUnits); + le64_to_cpu(response_data->AvailableAllocationUnits); cifs_dbg(FYI, "Blocks: %lld Free: %lld Block size %ld\n", (unsigned long long)FSData->f_blocks, (unsigned long long)FSData->f_bfree, diff --git a/fs/smb/common/fscc.h b/fs/smb/common/fscc.h index 6fa7c65d304b..a0580a772a41 100644 --- a/fs/smb/common/fscc.h +++ b/fs/smb/common/fscc.h @@ -121,6 +121,14 @@ struct smb2_file_network_open_info { #define FILE_CASE_PRESERVED_NAMES 0x00000002 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001 =20 +/* See MS-FSCC 2.5.8 */ +typedef struct { + __le64 TotalAllocationUnits; + __le64 AvailableAllocationUnits; + __le32 SectorsPerAllocationUnit; + __le32 BytesPerSector; +} __packed FILE_SYSTEM_SIZE_INFO; /* size info, level 0x103 */ + /* See MS-FSCC 2.5.10 */ typedef struct { __le32 DeviceType; diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c index 541732208c37..ae778ad99d30 100644 --- a/fs/smb/server/smb2pdu.c +++ b/fs/smb/server/smb2pdu.c @@ -5546,11 +5546,11 @@ static int smb2_get_info_filesystem(struct ksmbd_wo= rk *work, } case FS_SIZE_INFORMATION: { - struct filesystem_info *info; + FILE_SYSTEM_SIZE_INFO *info; =20 - info =3D (struct filesystem_info *)(rsp->Buffer); + info =3D (FILE_SYSTEM_SIZE_INFO *)(rsp->Buffer); info->TotalAllocationUnits =3D cpu_to_le64(stfs.f_blocks); - info->FreeAllocationUnits =3D cpu_to_le64(stfs.f_bfree); + info->AvailableAllocationUnits =3D cpu_to_le64(stfs.f_bfree); info->SectorsPerAllocationUnit =3D cpu_to_le32(1); info->BytesPerSector =3D cpu_to_le32(stfs.f_bsize); rsp->OutputBufferLength =3D cpu_to_le32(24); diff --git a/fs/smb/server/smb_common.h b/fs/smb/server/smb_common.h index 576c2ce591a5..e7298faa3c6a 100644 --- a/fs/smb/server/smb_common.h +++ b/fs/smb/server/smb_common.h @@ -112,13 +112,6 @@ struct filesystem_vol_info { __le16 VolumeLabel[]; } __packed; =20 -struct filesystem_info { - __le64 TotalAllocationUnits; - __le64 FreeAllocationUnits; - __le32 SectorsPerAllocationUnit; - __le32 BytesPerSector; -} __packed; /* size info, level 0x103 */ - #define EXTENDED_INFO_MAGIC 0x43667364 /* Cfsd */ #define STRING_LENGTH 28 =20 --=20 2.43.0 From nobody Sun Feb 8 11:26:00 2026 Received: from out-185.mta0.migadu.com (out-185.mta0.migadu.com [91.218.175.185]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 216D826ED5F; Sun, 2 Nov 2025 07:32:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.185 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068774; cv=none; b=W5YvyI+8jujF1l0E6XQTYUuKObbyom2gHt1QsvVJS7cQmAI7gDoXnCpUYRKWm/rfBJ/Aduzwh+2MLfHLI1I30tSM7SNNVV/YexejmcUDDf3uCub4+Q+8EXKKH1Vflo7bFQbcBCPCamERjU4fHP4pJnSl72hgWVSyZi51eudCcAo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068774; c=relaxed/simple; bh=UeZzbSHmR4lF0G+TfiRIeniaE4nzFAnDL8k8itVVLLM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=W2MNttVGqGSEombbCVN89KrhpTl5lbWD7HF7uf/tbJafAjJF9eYMrK8os/im+Q92zYY4+MLDILOSs9dSAJ4B/iMjcvbiFOvvC//k6aCfkiMAvuXAamktu4mv+7qJpAJFS9/7/64Tm1+/8p+2haXw1cX1SOcLHEHCjSBha+jz6qk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=o/MA7Hsk; arc=none smtp.client-ip=91.218.175.185 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="o/MA7Hsk" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1762068770; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=DDMjuxf9BpHp/EzTTNG2zysOA62X4HAFIHHM5OaIv5c=; b=o/MA7Hsk24UrRuaa5SyiU52aVnm1Nk87mx3VcmXtaDPhN3+N6asMSWZOI9nSW7KsdGdqak YmY6VmViML4XjLdQEruzeFFuSzomF5EWSrc+EaCeXHy8hmud03ia/PNwbdw1bcLwe5VftD BlzP/JrRXbB6St9FGlAsGqZ+nMzOLs8= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org, christophe.jaillet@wanadoo.fr Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ChenXiaoSong Subject: [PATCH v5 12/14] smb: move FILE_SYSTEM_ATTRIBUTE_INFO to common/fscc.h Date: Sun, 2 Nov 2025 15:30:57 +0800 Message-ID: <20251102073059.3681026-13-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ChenXiaoSong Rename "struct filesystem_attribute_info" to "FILE_SYSTEM_ATTRIBUTE_INFO", then move them to common header file. Calculate the minimum size of FileFsAttributeInformation using offsetof(). On the server, replace original "sizeof(struct filesystem_attribute_info)" with "MIN_FS_ATTR_INFO_SIZE". Signed-off-by: ChenXiaoSong --- fs/smb/client/cifspdu.h | 10 ---------- fs/smb/common/fscc.h | 14 ++++++++++++++ fs/smb/server/smb2pdu.c | 6 +++--- fs/smb/server/smb_common.h | 7 ------- 4 files changed, 17 insertions(+), 20 deletions(-) diff --git a/fs/smb/client/cifspdu.h b/fs/smb/client/cifspdu.h index a9a853b9011f..2c454e450dfa 100644 --- a/fs/smb/client/cifspdu.h +++ b/fs/smb/client/cifspdu.h @@ -2063,16 +2063,6 @@ typedef struct { #define FILE_PORTABLE_DEVICE 0x00004000 #define FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL 0x00020000 =20 -/* minimum includes first three fields, and empty FS Name */ -#define MIN_FS_ATTR_INFO_SIZE 12 - -typedef struct { - __le32 Attributes; - __le32 MaxPathNameComponentLength; - __le32 FileSystemNameLen; - char FileSystemName[52]; /* do not have to save this - get subset? */ -} __attribute__((packed)) FILE_SYSTEM_ATTRIBUTE_INFO; - /*************************************************************************= *****/ /* QueryFileInfo/QueryPathinfo (also for SetPath/SetFile) data buffer form= ats */ /*************************************************************************= *****/ diff --git a/fs/smb/common/fscc.h b/fs/smb/common/fscc.h index a0580a772a41..9d3ac9903357 100644 --- a/fs/smb/common/fscc.h +++ b/fs/smb/common/fscc.h @@ -94,6 +94,20 @@ struct smb2_file_network_open_info { __le32 Reserved; } __packed; /* level 34 Query also similar returned in close rsp and open = rsp */ =20 +/* See FS-FSCC 2.5.1 */ +typedef struct { + __le32 Attributes; + __le32 MaxPathNameComponentLength; + __le32 FileSystemNameLen; + __le16 FileSystemName[52]; /* do not have to save this - get subset? */ +} __packed FILE_SYSTEM_ATTRIBUTE_INFO; + +/* + * minimum size of FileFsAttributeInformation + * includes first three fields, and empty FS Name + */ +#define MIN_FS_ATTR_INFO_SIZE offsetof(FILE_SYSTEM_ATTRIBUTE_INFO, FileSys= temName) + /* List of FileSystemAttributes - see MS-FSCC 2.5.1 */ #define FILE_SUPPORTS_SPARSE_VDL 0x10000000 /* faster nonsparse extend */ #define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000 /* allow ioctl dup exte= nts */ diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c index ae778ad99d30..221e979adcef 100644 --- a/fs/smb/server/smb2pdu.c +++ b/fs/smb/server/smb2pdu.c @@ -5492,10 +5492,10 @@ static int smb2_get_info_filesystem(struct ksmbd_wo= rk *work, } case FS_ATTRIBUTE_INFORMATION: { - struct filesystem_attribute_info *info; + FILE_SYSTEM_ATTRIBUTE_INFO *info; size_t sz; =20 - info =3D (struct filesystem_attribute_info *)rsp->Buffer; + info =3D (FILE_SYSTEM_ATTRIBUTE_INFO *)rsp->Buffer; info->Attributes =3D cpu_to_le32(FILE_SUPPORTS_OBJECT_IDS | FILE_PERSISTENT_ACLS | FILE_UNICODE_ON_DISK | @@ -5514,7 +5514,7 @@ static int smb2_get_info_filesystem(struct ksmbd_work= *work, "NTFS", PATH_MAX, conn->local_nls, 0); len =3D len * 2; info->FileSystemNameLen =3D cpu_to_le32(len); - sz =3D sizeof(struct filesystem_attribute_info) + len; + sz =3D MIN_FS_ATTR_INFO_SIZE + len; rsp->OutputBufferLength =3D cpu_to_le32(sz); break; } diff --git a/fs/smb/server/smb_common.h b/fs/smb/server/smb_common.h index e7298faa3c6a..afeba063cc27 100644 --- a/fs/smb/server/smb_common.h +++ b/fs/smb/server/smb_common.h @@ -97,13 +97,6 @@ struct smb_negotiate_rsp { __le16 ByteCount; } __packed; =20 -struct filesystem_attribute_info { - __le32 Attributes; - __le32 MaxPathNameComponentLength; - __le32 FileSystemNameLen; - __le16 FileSystemName[]; /* do not have to save this - get subset? */ -} __packed; - struct filesystem_vol_info { __le64 VolumeCreationTime; __le32 SerialNumber; --=20 2.43.0 From nobody Sun Feb 8 11:26:00 2026 Received: from out-174.mta0.migadu.com (out-174.mta0.migadu.com [91.218.175.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD0B7270553 for ; Sun, 2 Nov 2025 07:32:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068776; cv=none; b=oE6pgwxi7MOv9+l3FVN9HSSXZv6bqiUKELwWseKNqq4mTxZ/u7nqoexYTZqDWfXx3yvVRQEnPMcr7QOe08HsMQ/eMk4Ma8pmVKDJFiBZ6CKKePhyJvvCEkFnD2gfSxVsLYLyfysvKuhwYfC0XpdKCklSmbqk7cZXTtDqJML25sM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068776; c=relaxed/simple; bh=ZToxbSB1MZkyOG2yrD/6qOPPKmik2SLu3xK4XhDo8Gc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fNUmnd/+WzVBDOHl2zoCv1PAMTLSv3NvnsY458K4atzUFiQ/F2cvu6tXF1lDokfvsWNJV1AQuCwpnpkD92ugPSXt5/9MCElJBB2wds1OYRgAoDT4RmbQUd8JmLgph2iLC87kUzTEDc/Qqe8H2GwNHzydimqR6RqaUi/UqQ6A2DU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=o3Xl2LNU; arc=none smtp.client-ip=91.218.175.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="o3Xl2LNU" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1762068773; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=aQYpgFdtrKR79GKUD4OULuzRB+7PaS9gHAwG2epxgaQ=; b=o3Xl2LNU6kMItIcBCRa7A0v24WB2SBUG/R1g+Z62xlZzXWNEVxd4ysA75t7LJwSZbF7EVx 68AEZq7HYmnm7CGmU8wUD0OGu6y7URF4xt8w0F1UmtYjedp6OkMdZwKZyXDIsY5ez03vmx CKQOV+lzbcUTxd2kCFXZCruoFybMnHE= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org, christophe.jaillet@wanadoo.fr Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ChenXiaoSong Subject: [PATCH v5 13/14] smb: do some cleanups Date: Sun, 2 Nov 2025 15:30:58 +0800 Message-ID: <20251102073059.3681026-14-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ChenXiaoSong Modify the following places: - Add documentation references - ATTR_REPARSE -> ATTR_REPARSE_POINT: consistent with MS-SMB 2.2.1.2.1 - Remove unused File Attribute flags from server, if the server uses them in the future, we can move the client-side definitions to common - Remove unused SMB1_CLIENT_GUID_SIZE from server Signed-off-by: ChenXiaoSong --- fs/smb/client/cifspdu.h | 51 +++++++++++++++++++++----------------- fs/smb/client/readdir.c | 10 ++++---- fs/smb/client/reparse.h | 8 +++--- fs/smb/client/smb1ops.c | 2 +- fs/smb/client/smb2inode.c | 2 +- fs/smb/server/smb_common.h | 19 +++++--------- 6 files changed, 45 insertions(+), 47 deletions(-) diff --git a/fs/smb/client/cifspdu.h b/fs/smb/client/cifspdu.h index 2c454e450dfa..37e78ec47574 100644 --- a/fs/smb/client/cifspdu.h +++ b/fs/smb/client/cifspdu.h @@ -19,6 +19,7 @@ #define BAD_PROT 0xFFFF =20 /* SMB command codes: + * See MS-CIFS 2.2.2.1 * Note some commands have minimal (wct=3D0,bcc=3D0), or uninteresting, re= sponses * (ie which include no useful data other than the SMB error code itself). * This can allow us to avoid response buffer allocations and copy in some= cases @@ -152,6 +153,7 @@ =20 /* * SMB flag definitions + * See MS-CIFS 2.2.3.1 */ #define SMBFLG_EXTD_LOCK 0x01 /* server supports lock-read write-unlock sm= b */ #define SMBFLG_RCV_POSTED 0x02 /* obsolete */ @@ -165,6 +167,8 @@ =20 /* * SMB flag2 definitions + * See MS-CIFS 2.2.3.1 + * MS-SMB 2.2.3.1 */ #define SMBFLG2_KNOWS_LONG_NAMES cpu_to_le16(1) /* can send long (non-8.3) path names in response */ @@ -225,29 +229,30 @@ /* * File Attribute flags */ -#define ATTR_READONLY 0x0001 -#define ATTR_HIDDEN 0x0002 -#define ATTR_SYSTEM 0x0004 -#define ATTR_VOLUME 0x0008 -#define ATTR_DIRECTORY 0x0010 -#define ATTR_ARCHIVE 0x0020 -#define ATTR_DEVICE 0x0040 -#define ATTR_NORMAL 0x0080 -#define ATTR_TEMPORARY 0x0100 -#define ATTR_SPARSE 0x0200 -#define ATTR_REPARSE 0x0400 -#define ATTR_COMPRESSED 0x0800 -#define ATTR_OFFLINE 0x1000 /* ie file not immediately available - - on offline storage */ -#define ATTR_NOT_CONTENT_INDEXED 0x2000 -#define ATTR_ENCRYPTED 0x4000 -#define ATTR_POSIX_SEMANTICS 0x01000000 -#define ATTR_BACKUP_SEMANTICS 0x02000000 -#define ATTR_DELETE_ON_CLOSE 0x04000000 -#define ATTR_SEQUENTIAL_SCAN 0x08000000 -#define ATTR_RANDOM_ACCESS 0x10000000 -#define ATTR_NO_BUFFERING 0x20000000 -#define ATTR_WRITE_THROUGH 0x80000000 +#define ATTR_READONLY 0x0001 /* See MS-CIFS 2.2.1.2.3 */ +#define ATTR_HIDDEN 0x0002 /* See MS-CIFS 2.2.1.2.3 */ +#define ATTR_SYSTEM 0x0004 /* See MS-CIFS 2.2.1.2.3 */ +#define ATTR_VOLUME 0x0008 +#define ATTR_DIRECTORY 0x0010 /* See MS-CIFS 2.2.1.2.3 */ +#define ATTR_ARCHIVE 0x0020 /* See MS-CIFS 2.2.1.2.3 */ +#define ATTR_DEVICE 0x0040 +#define ATTR_NORMAL 0x0080 /* See MS-CIFS 2.2.1.2.3 */ +#define ATTR_TEMPORARY 0x0100 /* See MS-CIFS 2.2.1.2.3 */ +#define ATTR_SPARSE 0x0200 /* See MS-SMB 2.2.1.2.1 */ +#define ATTR_REPARSE_POINT 0x0400 /* See MS-SMB 2.2.1.2.1 */ +#define ATTR_COMPRESSED 0x0800 /* See MS-CIFS 2.2.1.2.3 */ +#define ATTR_OFFLINE 0x1000 /* See MS-SMB 2.2.1.2.1 + ie file not immediately available - + on offline storage */ +#define ATTR_NOT_CONTENT_INDEXED 0x2000 /* See MS-SMB 2.2.1.2.1 */ +#define ATTR_ENCRYPTED 0x4000 /* See MS-SMB 2.2.1.2.1 */ +#define ATTR_POSIX_SEMANTICS 0x0100000 /* See MS-CIFS 2.2.1.2.3 */ +#define ATTR_BACKUP_SEMANTICS 0x0200000 /* See MS-CIFS 2.2.1.2.3 */ +#define ATTR_DELETE_ON_CLOSE 0x0400000 /* See MS-CIFS 2.2.1.2.3 */ +#define ATTR_SEQUENTIAL_SCAN 0x0800000 /* See MS-CIFS 2.2.1.2.3 */ +#define ATTR_RANDOM_ACCESS 0x1000000 /* See MS-CIFS 2.2.1.2.3 */ +#define ATTR_NO_BUFFERING 0x2000000 /* See MS-CIFS 2.2.1.2.3 */ +#define ATTR_WRITE_THROUGH 0x8000000 /* See MS-CIFS 2.2.1.2.3 */ =20 /* ShareAccess flags */ #define FILE_NO_SHARE 0x00000000 diff --git a/fs/smb/client/readdir.c b/fs/smb/client/readdir.c index 2fd95c1e91ab..7ff728503ed1 100644 --- a/fs/smb/client/readdir.c +++ b/fs/smb/client/readdir.c @@ -98,7 +98,7 @@ cifs_prime_dcache(struct dentry *parent, struct qstr *nam= e, default: break; } - } else if (fattr->cf_cifsattrs & ATTR_REPARSE) { + } else if (fattr->cf_cifsattrs & ATTR_REPARSE_POINT) { reparse_need_reval =3D true; } =20 @@ -138,7 +138,7 @@ cifs_prime_dcache(struct dentry *parent, struct qstr *n= ame, * reparse tag and ctime haven't changed. */ rc =3D 0; - if (fattr->cf_cifsattrs & ATTR_REPARSE) { + if (fattr->cf_cifsattrs & ATTR_REPARSE_POINT) { if (likely(reparse_inode_match(inode, fattr))) { fattr->cf_mode =3D inode->i_mode; fattr->cf_rdev =3D inode->i_rdev; @@ -190,7 +190,7 @@ cifs_fill_common_info(struct cifs_fattr *fattr, struct = cifs_sb_info *cifs_sb) * TODO: go through all documented reparse tags to see if we can * reasonably map some of them to directories vs. files vs. symlinks */ - if ((fattr->cf_cifsattrs & ATTR_REPARSE) && + if ((fattr->cf_cifsattrs & ATTR_REPARSE_POINT) && cifs_reparse_point_to_fattr(cifs_sb, fattr, &data)) goto out_reparse; =20 @@ -258,7 +258,7 @@ cifs_posix_to_fattr(struct cifs_fattr *fattr, struct sm= b2_posix_info *info, fattr->cf_nlink =3D le32_to_cpu(info->HardLinks); fattr->cf_cifsattrs =3D le32_to_cpu(info->DosAttributes); =20 - if (fattr->cf_cifsattrs & ATTR_REPARSE) + if (fattr->cf_cifsattrs & ATTR_REPARSE_POINT) fattr->cf_cifstag =3D le32_to_cpu(info->ReparseTag); =20 /* The Mode field in the response can now include the file type as well */ @@ -316,7 +316,7 @@ static void cifs_fulldir_info_to_fattr(struct cifs_fatt= r *fattr, __dir_info_to_fattr(fattr, info); =20 /* See MS-FSCC 2.4.14, 2.4.19 */ - if (fattr->cf_cifsattrs & ATTR_REPARSE) + if (fattr->cf_cifsattrs & ATTR_REPARSE_POINT) fattr->cf_cifstag =3D le32_to_cpu(di->EaSize); cifs_fill_common_info(fattr, cifs_sb); } diff --git a/fs/smb/client/reparse.h b/fs/smb/client/reparse.h index 66269c10beba..19caab2fd11e 100644 --- a/fs/smb/client/reparse.h +++ b/fs/smb/client/reparse.h @@ -93,7 +93,7 @@ static inline bool reparse_inode_match(struct inode *inod= e, if (cinode->reparse_tag !=3D IO_REPARSE_TAG_INTERNAL && cinode->reparse_tag !=3D fattr->cf_cifstag) return false; - return (cinode->cifsAttrs & ATTR_REPARSE) && + return (cinode->cifsAttrs & ATTR_REPARSE_POINT) && timespec64_equal(&ctime, &fattr->cf_ctime); } =20 @@ -107,7 +107,7 @@ static inline bool cifs_open_data_reparse(struct cifs_o= pen_info_data *data) =20 attrs =3D le32_to_cpu(fi->DosAttributes); if (data->reparse_point) { - attrs |=3D ATTR_REPARSE; + attrs |=3D ATTR_REPARSE_POINT; fi->DosAttributes =3D cpu_to_le32(attrs); } =20 @@ -116,12 +116,12 @@ static inline bool cifs_open_data_reparse(struct cifs= _open_info_data *data) =20 attrs =3D le32_to_cpu(fi->Attributes); if (data->reparse_point) { - attrs |=3D ATTR_REPARSE; + attrs |=3D ATTR_REPARSE_POINT; fi->Attributes =3D cpu_to_le32(attrs); } } =20 - ret =3D attrs & ATTR_REPARSE; + ret =3D attrs & ATTR_REPARSE_POINT; =20 return ret; } diff --git a/fs/smb/client/smb1ops.c b/fs/smb/client/smb1ops.c index ca8f3dd7ff63..a15ebd3f0d50 100644 --- a/fs/smb/client/smb1ops.c +++ b/fs/smb/client/smb1ops.c @@ -647,7 +647,7 @@ static int cifs_query_path_info(const unsigned int xid, =20 if (!rc) { move_cifs_info_to_smb2(&data->fi, &fi); - data->reparse_point =3D le32_to_cpu(fi.Attributes) & ATTR_REPARSE; + data->reparse_point =3D le32_to_cpu(fi.Attributes) & ATTR_REPARSE_POINT; } =20 #ifdef CONFIG_CIFS_XATTR diff --git a/fs/smb/client/smb2inode.c b/fs/smb/client/smb2inode.c index 09e3fc81d7cb..b5ae07734b7e 100644 --- a/fs/smb/client/smb2inode.c +++ b/fs/smb/client/smb2inode.c @@ -50,7 +50,7 @@ static inline __u32 file_create_options(struct dentry *de= ntry) =20 if (dentry) { ci =3D CIFS_I(d_inode(dentry)); - if (ci->cifsAttrs & ATTR_REPARSE) + if (ci->cifsAttrs & ATTR_REPARSE_POINT) return OPEN_REPARSE_POINT; } return 0; diff --git a/fs/smb/server/smb_common.h b/fs/smb/server/smb_common.h index afeba063cc27..6c1607b43eb3 100644 --- a/fs/smb/server/smb_common.h +++ b/fs/smb/server/smb_common.h @@ -38,17 +38,6 @@ #define F_CREATED 2 #define F_OVERWRITTEN 3 =20 -/* - * File Attribute flags - */ -#define ATTR_POSIX_SEMANTICS 0x01000000 -#define ATTR_BACKUP_SEMANTICS 0x02000000 -#define ATTR_DELETE_ON_CLOSE 0x04000000 -#define ATTR_SEQUENTIAL_SCAN 0x08000000 -#define ATTR_RANDOM_ACCESS 0x10000000 -#define ATTR_NO_BUFFERING 0x20000000 -#define ATTR_WRITE_THROUGH 0x80000000 - /* Combinations of file access permission bits */ #define SET_FILE_READ_RIGHTS (FILE_READ_DATA | FILE_READ_EA \ | FILE_READ_ATTRIBUTES \ @@ -80,11 +69,15 @@ FILE_EXECUTE | FILE_DELETE_CHILD | \ FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES) =20 -#define SMB_COM_NEGOTIATE 0x72 -#define SMB1_CLIENT_GUID_SIZE (16) +#define SMB_COM_NEGOTIATE 0x72 /* See MS-CIFS 2.2.2.1 */ =20 +/* See MS-CIFS 2.2.3.1 */ #define SMBFLG_RESPONSE 0x80 /* this PDU is a response from server */ =20 +/* + * See MS-CIFS 2.2.3.1 + * MS-SMB 2.2.3.1 + */ #define SMBFLG2_IS_LONG_NAME cpu_to_le16(0x40) #define SMBFLG2_EXT_SEC cpu_to_le16(0x800) #define SMBFLG2_ERR_STATUS cpu_to_le16(0x4000) --=20 2.43.0 From nobody Sun Feb 8 11:26:00 2026 Received: from out-182.mta0.migadu.com (out-182.mta0.migadu.com [91.218.175.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B75D0271469 for ; Sun, 2 Nov 2025 07:32:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068780; cv=none; b=fCx+AszfHGEjWKsbELIrdKHx5xd609cwQJeg49EaK1vZVDNPHXqlj9WLyAby1YKqJyXRSnKe0x48SUcD3zk6XHqxgZQ/ri9O8Gke23eyCpl/h0nX8vvOS003La1WXQvMqSDrnZwLW6eiGppGDQDDpi8xS+UMuYSKwvFQESepHUI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762068780; c=relaxed/simple; bh=wT0PpTe2z12rvP6Z9ocX8LWsGlGChGxOnPDpCjaFylo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=s6+ixoihngEapr4jF/aUNblh3YGSwuDu4RwzEAc7AFp0M4fCbEDU5HGkkatqVOSV8JAtCkY/Wsz4WZcn9WxOSmIljQJ5hlDIOTEY9FPwRi03fH2tglGrg7D0mZYYKiPj7veSQWc4JfXPZs44/tXjx1Fp4RiUDiOGxKd3C5ypSOU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=N3/i4PAC; arc=none smtp.client-ip=91.218.175.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="N3/i4PAC" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1762068776; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qB2UNV52fAw/I60yv97J92+2dNhltJxXqVwN/sDmeMw=; b=N3/i4PACG2kf1fTLWooNB7IPcgAu5UQnVsDtvgn0pSdgk9yYvca2W/3HTQqF/Ee9euuasr cb43ELRS3GWSDFD0nrB54k3If0WtTbJrJr5MSwemKSRtzrwdifM/0q90vQMBqcjTOzifC2 xJdnjL8BvB0awaQ9zW6uO6EfqOA9/OE= From: chenxiaosong.chenxiaosong@linux.dev To: sfrench@samba.org, smfrench@gmail.com, linkinjeon@kernel.org, linkinjeon@samba.org, christophe.jaillet@wanadoo.fr Cc: linux-cifs@vger.kernel.org, linux-kernel@vger.kernel.org, ChenXiaoSong Subject: [PATCH v5 14/14] smb: fix some warnings reported by scripts/checkpatch.pl Date: Sun, 2 Nov 2025 15:30:59 +0800 Message-ID: <20251102073059.3681026-15-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: ChenXiaoSong Fix the following warnings: WARNING: __always_unused or __maybe_unused is preferred over \ __attribute__((__unused__)) WARNING: Prefer __packed over __attribute__((packed)) Signed-off-by: ChenXiaoSong --- fs/smb/client/cifspdu.h | 250 ++++++++++++++++++------------------- fs/smb/client/connect.c | 4 +- fs/smb/client/ntlmssp.h | 8 +- fs/smb/client/rfc1002pdu.h | 8 +- fs/smb/common/smbacl.h | 8 +- 5 files changed, 139 insertions(+), 139 deletions(-) diff --git a/fs/smb/client/cifspdu.h b/fs/smb/client/cifspdu.h index 37e78ec47574..49f35cb3cf2e 100644 --- a/fs/smb/client/cifspdu.h +++ b/fs/smb/client/cifspdu.h @@ -425,8 +425,8 @@ typedef struct smb_negotiate_rsp { struct { unsigned char GUID[SMB1_CLIENT_GUID_SIZE]; unsigned char SecurityBlob[]; - } __attribute__((packed)) extended_response; - } __attribute__((packed)) u; + } __packed extended_response; + } __packed u; } __packed SMB_NEGOTIATE_RSP; =20 /* SecurityMode bits */ @@ -474,7 +474,7 @@ typedef union smb_com_session_setup_andx { unsigned char SecurityBlob[]; /* followed by */ /* STRING NativeOS */ /* STRING NativeLanMan */ - } __attribute__((packed)) req; /* NTLM request format (with + } __packed req; /* NTLM request format (with extended security */ =20 struct { /* request format */ @@ -497,7 +497,7 @@ typedef union smb_com_session_setup_andx { /* STRING PrimaryDomain */ /* STRING NativeOS */ /* STRING NativeLanMan */ - } __attribute__((packed)) req_no_secext; /* NTLM request format (without + } __packed req_no_secext; /* NTLM request format (without extended security */ =20 struct { /* default (NTLM) response format */ @@ -512,7 +512,7 @@ typedef union smb_com_session_setup_andx { /* unsigned char * NativeOS; */ /* unsigned char * NativeLanMan; */ /* unsigned char * PrimaryDomain; */ - } __attribute__((packed)) resp; /* NTLM response + } __packed resp; /* NTLM response (with or without extended sec) */ =20 struct { /* request format */ @@ -532,7 +532,7 @@ typedef union smb_com_session_setup_andx { /* STRING PrimaryDomain */ /* STRING NativeOS */ /* STRING NativeLanMan */ - } __attribute__((packed)) old_req; /* pre-NTLM (LANMAN2.1) req format */ + } __packed old_req; /* pre-NTLM (LANMAN2.1) req format */ =20 struct { /* default (NTLM) response format */ struct smb_hdr hdr; /* wct =3D 3 */ @@ -544,8 +544,8 @@ typedef union smb_com_session_setup_andx { unsigned char NativeOS[]; /* followed by */ /* unsigned char * NativeLanMan; */ /* unsigned char * PrimaryDomain; */ - } __attribute__((packed)) old_resp; /* pre-NTLM (LANMAN2.1) response */ -} __attribute__((packed)) SESSION_SETUP_ANDX; + } __packed old_resp; /* pre-NTLM (LANMAN2.1) response */ +} __packed SESSION_SETUP_ANDX; =20 /* format of NLTMv2 Response ie "case sensitive password" hash when NTLMv2= */ =20 @@ -559,7 +559,7 @@ struct ntlmssp2_name { __le16 type; __le16 length; __u8 data[]; -} __attribute__((packed)); +} __packed; =20 struct ntlmv2_resp { union { @@ -567,15 +567,15 @@ struct ntlmv2_resp { struct { __u8 reserved[8]; __u8 key[CIFS_SERVER_CHALLENGE_SIZE]; - } __attribute__((packed)) challenge; - } __attribute__((packed)); + } __packed challenge; + } __packed; __le32 blob_signature; __u32 reserved; __le64 time; __u64 client_chal; /* random */ __u32 reserved2; /* array of name entries could follow ending in minimum 4 byte struct */ -} __attribute__((packed)); +} __packed; =20 =20 #define CIFS_NETWORK_OPSYS "CIFS VFS Client for Linux" @@ -610,7 +610,7 @@ typedef struct smb_com_tconx_req { unsigned char Password[]; /* followed by */ /* STRING Path *//* \\server\share name */ /* STRING Service */ -} __attribute__((packed)) TCONX_REQ; +} __packed TCONX_REQ; =20 typedef struct smb_com_tconx_rsp { struct smb_hdr hdr; /* wct =3D 3 , not extended response */ @@ -621,7 +621,7 @@ typedef struct smb_com_tconx_rsp { __u16 ByteCount; unsigned char Service[]; /* always ASCII, not Unicode */ /* STRING NativeFileSystem */ -} __attribute__((packed)) TCONX_RSP; +} __packed TCONX_RSP; =20 typedef struct smb_com_tconx_rsp_ext { struct smb_hdr hdr; /* wct =3D 7, extended response */ @@ -634,7 +634,7 @@ typedef struct smb_com_tconx_rsp_ext { __u16 ByteCount; unsigned char Service[]; /* always ASCII, not Unicode */ /* STRING NativeFileSystem */ -} __attribute__((packed)) TCONX_RSP_EXT; +} __packed TCONX_RSP_EXT; =20 =20 /* tree connect Flags */ @@ -670,14 +670,14 @@ typedef struct smb_com_echo_req { __le16 EchoCount; __le16 ByteCount; char Data[]; -} __attribute__((packed)) ECHO_REQ; +} __packed ECHO_REQ; =20 typedef struct smb_com_echo_rsp { struct smb_hdr hdr; __le16 SequenceNumber; __le16 ByteCount; char Data[]; -} __attribute__((packed)) ECHO_RSP; +} __packed ECHO_RSP; =20 typedef struct smb_com_logoff_andx_req { struct smb_hdr hdr; /* wct =3D 2 */ @@ -685,7 +685,7 @@ typedef struct smb_com_logoff_andx_req { __u8 AndXReserved; __u16 AndXOffset; __u16 ByteCount; -} __attribute__((packed)) LOGOFF_ANDX_REQ; +} __packed LOGOFF_ANDX_REQ; =20 typedef struct smb_com_logoff_andx_rsp { struct smb_hdr hdr; /* wct =3D 2 */ @@ -693,7 +693,7 @@ typedef struct smb_com_logoff_andx_rsp { __u8 AndXReserved; __u16 AndXOffset; __u16 ByteCount; -} __attribute__((packed)) LOGOFF_ANDX_RSP; +} __packed LOGOFF_ANDX_RSP; =20 typedef union smb_com_tree_disconnect { /* as an alternative can use flag = on tree_connect PDU to effect disconnect */ @@ -701,36 +701,36 @@ typedef union smb_com_tree_disconnect { /* as an alte= rnative can use flag on struct { struct smb_hdr hdr; /* wct =3D 0 */ __u16 ByteCount; /* bcc =3D 0 */ - } __attribute__((packed)) req; + } __packed req; struct { struct smb_hdr hdr; /* wct =3D 0 */ __u16 ByteCount; /* bcc =3D 0 */ - } __attribute__((packed)) resp; -} __attribute__((packed)) TREE_DISCONNECT; + } __packed resp; +} __packed TREE_DISCONNECT; =20 typedef struct smb_com_close_req { struct smb_hdr hdr; /* wct =3D 3 */ __u16 FileID; __u32 LastWriteTime; /* should be zero or -1 */ __u16 ByteCount; /* 0 */ -} __attribute__((packed)) CLOSE_REQ; +} __packed CLOSE_REQ; =20 typedef struct smb_com_close_rsp { struct smb_hdr hdr; /* wct =3D 0 */ __u16 ByteCount; /* bct =3D 0 */ -} __attribute__((packed)) CLOSE_RSP; +} __packed CLOSE_RSP; =20 typedef struct smb_com_flush_req { struct smb_hdr hdr; /* wct =3D 1 */ __u16 FileID; __u16 ByteCount; /* 0 */ -} __attribute__((packed)) FLUSH_REQ; +} __packed FLUSH_REQ; =20 typedef struct smb_com_findclose_req { struct smb_hdr hdr; /* wct =3D 1 */ __u16 FileID; __u16 ByteCount; /* 0 */ -} __attribute__((packed)) FINDCLOSE_REQ; +} __packed FINDCLOSE_REQ; =20 /* OpenFlags */ #define REQ_MORE_INFO 0x00000001 /* legacy (OPEN_AND_X) only */ @@ -777,7 +777,7 @@ typedef struct smb_com_open_req { /* also handles creat= e */ __u8 SecurityFlags; __le16 ByteCount; char fileName[]; -} __attribute__((packed)) OPEN_REQ; +} __packed OPEN_REQ; =20 /* open response: oplock levels */ #define OPLOCK_NONE 0 @@ -809,7 +809,7 @@ typedef struct smb_com_open_rsp { __le16 DeviceState; __u8 DirectoryFlag; __u16 ByteCount; /* bct =3D 0 */ -} __attribute__((packed)) OPEN_RSP; +} __packed OPEN_RSP; =20 typedef struct smb_com_open_rsp_ext { struct smb_hdr hdr; /* wct =3D 42 but meaningless due to MS bug? */ @@ -834,7 +834,7 @@ typedef struct smb_com_open_rsp_ext { __le32 MaximalAccessRights; __le32 GuestMaximalAccessRights; __u16 ByteCount; /* bct =3D 0 */ -} __attribute__((packed)) OPEN_RSP_EXT; +} __packed OPEN_RSP_EXT; =20 =20 /* format of legacy open request */ @@ -854,7 +854,7 @@ typedef struct smb_com_openx_req { __le32 Reserved; __le16 ByteCount; /* file name follows */ char fileName[]; -} __attribute__((packed)) OPENX_REQ; +} __packed OPENX_REQ; =20 typedef struct smb_com_openx_rsp { struct smb_hdr hdr; /* wct =3D 15 */ @@ -872,7 +872,7 @@ typedef struct smb_com_openx_rsp { __u32 FileId; __u16 Reserved; __u16 ByteCount; -} __attribute__((packed)) OPENX_RSP; +} __packed OPENX_RSP; =20 /* For encoding of POSIX Open Request - see trans2 function 0x209 data str= uct */ =20 @@ -894,7 +894,7 @@ typedef struct smb_com_writex_req { __u8 Pad; /* BB check for whether padded to DWORD boundary and optimum performance here */ char Data[]; -} __attribute__((packed)) WRITEX_REQ; +} __packed WRITEX_REQ; =20 typedef struct smb_com_write_req { struct smb_hdr hdr; /* wct =3D 14 */ @@ -914,7 +914,7 @@ typedef struct smb_com_write_req { __u8 Pad; /* BB check for whether padded to DWORD boundary and optimum performance here */ char Data[]; -} __attribute__((packed)) WRITE_REQ; +} __packed WRITE_REQ; =20 typedef struct smb_com_write_rsp { struct smb_hdr hdr; /* wct =3D 6 */ @@ -926,7 +926,7 @@ typedef struct smb_com_write_rsp { __le16 CountHigh; __u16 Reserved; __u16 ByteCount; -} __attribute__((packed)) WRITE_RSP; +} __packed WRITE_RSP; =20 /* legacy read request for older servers */ typedef struct smb_com_readx_req { @@ -941,7 +941,7 @@ typedef struct smb_com_readx_req { __le32 Reserved; __le16 Remaining; __le16 ByteCount; -} __attribute__((packed)) READX_REQ; +} __packed READX_REQ; =20 typedef struct smb_com_read_req { struct smb_hdr hdr; /* wct =3D 12 */ @@ -956,7 +956,7 @@ typedef struct smb_com_read_req { __le16 Remaining; __le32 OffsetHigh; __le16 ByteCount; -} __attribute__((packed)) READ_REQ; +} __packed READ_REQ; =20 typedef struct smb_com_read_rsp { struct smb_hdr hdr; /* wct =3D 12 */ @@ -972,7 +972,7 @@ typedef struct smb_com_read_rsp { __u64 Reserved2; __u16 ByteCount; /* read response data immediately follows */ -} __attribute__((packed)) READ_RSP; +} __packed READ_RSP; =20 typedef struct locking_andx_range { __le16 Pid; @@ -981,7 +981,7 @@ typedef struct locking_andx_range { __le32 OffsetLow; __le32 LengthHigh; __le32 LengthLow; -} __attribute__((packed)) LOCKING_ANDX_RANGE; +} __packed LOCKING_ANDX_RANGE; =20 #define LOCKING_ANDX_SHARED_LOCK 0x01 #define LOCKING_ANDX_OPLOCK_RELEASE 0x02 @@ -1002,7 +1002,7 @@ typedef struct smb_com_lock_req { __le16 NumberOfLocks; __le16 ByteCount; LOCKING_ANDX_RANGE Locks[]; -} __attribute__((packed)) LOCK_REQ; +} __packed LOCK_REQ; =20 /* lock type */ #define CIFS_RDLCK 0 @@ -1015,7 +1015,7 @@ typedef struct cifs_posix_lock { __le64 start; __le64 length; /* BB what about additional owner info to identify network client */ -} __attribute__((packed)) CIFS_POSIX_LOCK; +} __packed CIFS_POSIX_LOCK; =20 typedef struct smb_com_lock_rsp { struct smb_hdr hdr; /* wct =3D 2 */ @@ -1023,7 +1023,7 @@ typedef struct smb_com_lock_rsp { __u8 AndXReserved; __le16 AndXOffset; __u16 ByteCount; -} __attribute__((packed)) LOCK_RSP; +} __packed LOCK_RSP; =20 typedef struct smb_com_rename_req { struct smb_hdr hdr; /* wct =3D 1 */ @@ -1033,7 +1033,7 @@ typedef struct smb_com_rename_req { unsigned char OldFileName[]; /* followed by __u8 BufferFormat2 */ /* followed by NewFileName */ -} __attribute__((packed)) RENAME_REQ; +} __packed RENAME_REQ; =20 /* copy request flags */ #define COPY_MUST_BE_FILE 0x0001 @@ -1053,7 +1053,7 @@ typedef struct smb_com_copy_req { unsigned char OldFileName[]; /* followed by __u8 BufferFormat2 */ /* followed by NewFileName string */ -} __attribute__((packed)) COPY_REQ; +} __packed COPY_REQ; =20 typedef struct smb_com_copy_rsp { struct smb_hdr hdr; /* wct =3D 1 */ @@ -1061,7 +1061,7 @@ typedef struct smb_com_copy_rsp { __u16 ByteCount; /* may be zero */ __u8 BufferFormat; /* 0x04 - only present if errored file follows */ unsigned char ErrorFileName[]; /* only present if error in copy */ -} __attribute__((packed)) COPY_RSP; +} __packed COPY_RSP; =20 #define CREATE_HARD_LINK 0x103 #define MOVEFILE_COPY_ALLOWED 0x0002 @@ -1077,12 +1077,12 @@ typedef struct smb_com_nt_rename_req { /* A5 - also= used for create hardlink */ unsigned char OldFileName[]; /* followed by __u8 BufferFormat2 */ /* followed by NewFileName */ -} __attribute__((packed)) NT_RENAME_REQ; +} __packed NT_RENAME_REQ; =20 typedef struct smb_com_rename_rsp { struct smb_hdr hdr; /* wct =3D 0 */ __u16 ByteCount; /* bct =3D 0 */ -} __attribute__((packed)) RENAME_RSP; +} __packed RENAME_RSP; =20 typedef struct smb_com_delete_file_req { struct smb_hdr hdr; /* wct =3D 1 */ @@ -1090,43 +1090,43 @@ typedef struct smb_com_delete_file_req { __le16 ByteCount; __u8 BufferFormat; /* 4 =3D ASCII */ unsigned char fileName[]; -} __attribute__((packed)) DELETE_FILE_REQ; +} __packed DELETE_FILE_REQ; =20 typedef struct smb_com_delete_file_rsp { struct smb_hdr hdr; /* wct =3D 0 */ __u16 ByteCount; /* bct =3D 0 */ -} __attribute__((packed)) DELETE_FILE_RSP; +} __packed DELETE_FILE_RSP; =20 typedef struct smb_com_delete_directory_req { struct smb_hdr hdr; /* wct =3D 0 */ __le16 ByteCount; __u8 BufferFormat; /* 4 =3D ASCII */ unsigned char DirName[]; -} __attribute__((packed)) DELETE_DIRECTORY_REQ; +} __packed DELETE_DIRECTORY_REQ; =20 typedef struct smb_com_delete_directory_rsp { struct smb_hdr hdr; /* wct =3D 0 */ __u16 ByteCount; /* bct =3D 0 */ -} __attribute__((packed)) DELETE_DIRECTORY_RSP; +} __packed DELETE_DIRECTORY_RSP; =20 typedef struct smb_com_create_directory_req { struct smb_hdr hdr; /* wct =3D 0 */ __le16 ByteCount; __u8 BufferFormat; /* 4 =3D ASCII */ unsigned char DirName[]; -} __attribute__((packed)) CREATE_DIRECTORY_REQ; +} __packed CREATE_DIRECTORY_REQ; =20 typedef struct smb_com_create_directory_rsp { struct smb_hdr hdr; /* wct =3D 0 */ __u16 ByteCount; /* bct =3D 0 */ -} __attribute__((packed)) CREATE_DIRECTORY_RSP; +} __packed CREATE_DIRECTORY_RSP; =20 typedef struct smb_com_query_information_req { struct smb_hdr hdr; /* wct =3D 0 */ __le16 ByteCount; /* 1 + namelen + 1 */ __u8 BufferFormat; /* 4 =3D ASCII */ unsigned char FileName[]; -} __attribute__((packed)) QUERY_INFORMATION_REQ; +} __packed QUERY_INFORMATION_REQ; =20 typedef struct smb_com_query_information_rsp { struct smb_hdr hdr; /* wct =3D 10 */ @@ -1135,7 +1135,7 @@ typedef struct smb_com_query_information_rsp { __le32 size; __u16 reserved[5]; __le16 ByteCount; /* bcc =3D 0 */ -} __attribute__((packed)) QUERY_INFORMATION_RSP; +} __packed QUERY_INFORMATION_RSP; =20 typedef struct smb_com_setattr_req { struct smb_hdr hdr; /* wct =3D 8 */ @@ -1145,12 +1145,12 @@ typedef struct smb_com_setattr_req { __le16 ByteCount; __u8 BufferFormat; /* 4 =3D ASCII */ unsigned char fileName[]; -} __attribute__((packed)) SETATTR_REQ; +} __packed SETATTR_REQ; =20 typedef struct smb_com_setattr_rsp { struct smb_hdr hdr; /* wct =3D 0 */ __u16 ByteCount; /* bct =3D 0 */ -} __attribute__((packed)) SETATTR_RSP; +} __packed SETATTR_RSP; =20 /* empty wct response to setattr */ =20 @@ -1178,7 +1178,7 @@ typedef struct smb_com_ntransact_req { __le16 ByteCount; __u8 Pad[3]; __u8 Parms[]; -} __attribute__((packed)) NTRANSACT_REQ; +} __packed NTRANSACT_REQ; =20 typedef struct smb_com_ntransact_rsp { struct smb_hdr hdr; /* wct =3D 18 */ @@ -1195,7 +1195,7 @@ typedef struct smb_com_ntransact_rsp { __u16 ByteCount; /* __u8 Pad[3]; */ /* parms and data follow */ -} __attribute__((packed)) NTRANSACT_RSP; +} __packed NTRANSACT_RSP; =20 typedef struct smb_com_transaction_ioctl_req { struct smb_hdr hdr; /* wct =3D 23 */ @@ -1219,7 +1219,7 @@ typedef struct smb_com_transaction_ioctl_req { __le16 ByteCount; __u8 Pad[3]; __u8 Data[]; -} __attribute__((packed)) TRANSACT_IOCTL_REQ; +} __packed TRANSACT_IOCTL_REQ; =20 typedef struct smb_com_transaction_compr_ioctl_req { struct smb_hdr hdr; /* wct =3D 23 */ @@ -1243,7 +1243,7 @@ typedef struct smb_com_transaction_compr_ioctl_req { __le16 ByteCount; __u8 Pad[3]; __le16 compression_state; /* See below for valid flags */ -} __attribute__((packed)) TRANSACT_COMPR_IOCTL_REQ; +} __packed TRANSACT_COMPR_IOCTL_REQ; =20 /* compression state flags */ #define COMPRESSION_FORMAT_NONE 0x0000 @@ -1264,7 +1264,7 @@ typedef struct smb_com_transaction_ioctl_rsp { __u8 SetupCount; /* 1 */ __le16 ReturnedDataLen; __le16 ByteCount; -} __attribute__((packed)) TRANSACT_IOCTL_RSP; +} __packed TRANSACT_IOCTL_RSP; =20 #define CIFS_ACL_OWNER 1 #define CIFS_ACL_GROUP 2 @@ -1291,7 +1291,7 @@ typedef struct smb_com_transaction_qsec_req { __u16 Fid; __u16 Reserved2; __le32 AclFlags; -} __attribute__((packed)) QUERY_SEC_DESC_REQ; +} __packed QUERY_SEC_DESC_REQ; =20 =20 typedef struct smb_com_transaction_ssec_req { @@ -1314,7 +1314,7 @@ typedef struct smb_com_transaction_ssec_req { __u16 Fid; __u16 Reserved2; __le32 AclFlags; -} __attribute__((packed)) SET_SEC_DESC_REQ; +} __packed SET_SEC_DESC_REQ; =20 typedef struct smb_com_transaction_change_notify_req { struct smb_hdr hdr; /* wct =3D 23 */ @@ -1338,7 +1338,7 @@ typedef struct smb_com_transaction_change_notify_req { __le16 ByteCount; /* __u8 Pad[3];*/ /* __u8 Data[];*/ -} __attribute__((packed)) TRANSACT_CHANGE_NOTIFY_REQ; +} __packed TRANSACT_CHANGE_NOTIFY_REQ; =20 /* BB eventually change to use generic ntransact rsp struct and validation routine */ @@ -1356,7 +1356,7 @@ typedef struct smb_com_transaction_change_notify_rsp { __u8 SetupCount; /* 0 */ __u16 ByteCount; /* __u8 Pad[3]; */ -} __attribute__((packed)) TRANSACT_CHANGE_NOTIFY_RSP; +} __packed TRANSACT_CHANGE_NOTIFY_RSP; /* Completion Filter flags for Notify */ #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002 @@ -1387,7 +1387,7 @@ struct file_notify_information { __le32 Action; __le32 FileNameLength; __u8 FileName[]; -} __attribute__((packed)); +} __packed; =20 struct cifs_quota_data { __u32 rsrvd1; /* 0 */ @@ -1397,7 +1397,7 @@ struct cifs_quota_data { __u64 soft_limit; __u64 hard_limit; char sid[]; /* variable size? */ -} __attribute__((packed)); +} __packed; =20 /* quota sub commands */ #define QUOTA_LIST_CONTINUE 0 @@ -1423,12 +1423,12 @@ struct trans2_req { __u8 Reserved3; __le16 SubCommand; /* 1st setup word - SetupCount words follow */ __le16 ByteCount; -} __attribute__((packed)); +} __packed; =20 struct smb_t2_req { struct smb_hdr hdr; struct trans2_req t2_req; -} __attribute__((packed)); +} __packed; =20 struct trans2_resp { /* struct smb_hdr hdr precedes. Note wct =3D 10 + setup count */ @@ -1447,12 +1447,12 @@ struct trans2_resp { __u16 ByteCount; __u16 Reserved2;*/ /* data area follows */ -} __attribute__((packed)); +} __packed; =20 struct smb_t2_rsp { struct smb_hdr hdr; struct trans2_resp t2_rsp; -} __attribute__((packed)); +} __packed; =20 /* PathInfo/FileInfo infolevels */ #define SMB_INFO_STANDARD 1 @@ -1549,14 +1549,14 @@ typedef struct smb_com_transaction2_qpi_req { __le16 InformationLevel; __u32 Reserved4; char FileName[]; -} __attribute__((packed)) TRANSACTION2_QPI_REQ; +} __packed TRANSACTION2_QPI_REQ; =20 typedef struct smb_com_transaction2_qpi_rsp { struct smb_hdr hdr; /* wct =3D 10 + SetupCount */ struct trans2_resp t2; __u16 ByteCount; __u16 Reserved2; /* parameter word is present for infolevels > 100 */ -} __attribute__((packed)) TRANSACTION2_QPI_RSP; +} __packed TRANSACTION2_QPI_RSP; =20 typedef struct smb_com_transaction2_spi_req { struct smb_hdr hdr; /* wct =3D 15 */ @@ -1582,21 +1582,21 @@ typedef struct smb_com_transaction2_spi_req { __le16 InformationLevel; __u32 Reserved4; char FileName[]; -} __attribute__((packed)) TRANSACTION2_SPI_REQ; +} __packed TRANSACTION2_SPI_REQ; =20 typedef struct smb_com_transaction2_spi_rsp { struct smb_hdr hdr; /* wct =3D 10 + SetupCount */ struct trans2_resp t2; __u16 ByteCount; __u16 Reserved2; /* parameter word is present for infolevels > 100 */ -} __attribute__((packed)) TRANSACTION2_SPI_RSP; +} __packed TRANSACTION2_SPI_RSP; =20 struct set_file_rename { __le32 overwrite; /* 1 =3D overwrite dest */ __u32 root_fid; /* zero */ __le32 target_name_len; char target_name[]; /* Must be unicode */ -} __attribute__((packed)); +} __packed; =20 struct smb_com_transaction2_sfi_req { struct smb_hdr hdr; /* wct =3D 15 */ @@ -1623,14 +1623,14 @@ struct smb_com_transaction2_sfi_req { __le16 InformationLevel; __u16 Reserved4; __u8 payload[]; -} __attribute__((packed)); +} __packed; =20 struct smb_com_transaction2_sfi_rsp { struct smb_hdr hdr; /* wct =3D 10 + SetupCount */ struct trans2_resp t2; __u16 ByteCount; __u16 Reserved2; /* parameter word reserved - present for infolevels > 10= 0 */ -} __attribute__((packed)); +} __packed; =20 struct smb_t2_qfi_req { struct smb_hdr hdr; @@ -1638,14 +1638,14 @@ struct smb_t2_qfi_req { __u8 Pad; __u16 Fid; __le16 InformationLevel; -} __attribute__((packed)); +} __packed; =20 struct smb_t2_qfi_rsp { struct smb_hdr hdr; /* wct =3D 10 + SetupCount */ struct trans2_resp t2; __u16 ByteCount; __u16 Reserved2; /* parameter word reserved - present for infolevels > 10= 0 */ -} __attribute__((packed)); +} __packed; =20 /* * Flags on T2 FINDFIRST and FINDNEXT @@ -1687,13 +1687,13 @@ typedef struct smb_com_transaction2_ffirst_req { __le16 InformationLevel; __le32 SearchStorageType; char FileName[]; -} __attribute__((packed)) TRANSACTION2_FFIRST_REQ; +} __packed TRANSACTION2_FFIRST_REQ; =20 typedef struct smb_com_transaction2_ffirst_rsp { struct smb_hdr hdr; /* wct =3D 10 */ struct trans2_resp t2; __u16 ByteCount; -} __attribute__((packed)) TRANSACTION2_FFIRST_RSP; +} __packed TRANSACTION2_FFIRST_RSP; =20 typedef struct smb_com_transaction2_ffirst_rsp_parms { __u16 SearchHandle; @@ -1701,7 +1701,7 @@ typedef struct smb_com_transaction2_ffirst_rsp_parms { __le16 EndofSearch; __le16 EAErrorOffset; __le16 LastNameOffset; -} __attribute__((packed)) T2_FFIRST_RSP_PARMS; +} __packed T2_FFIRST_RSP_PARMS; =20 typedef struct smb_com_transaction2_fnext_req { struct smb_hdr hdr; /* wct =3D 15 */ @@ -1729,20 +1729,20 @@ typedef struct smb_com_transaction2_fnext_req { __u32 ResumeKey; __le16 SearchFlags; char ResumeFileName[]; -} __attribute__((packed)) TRANSACTION2_FNEXT_REQ; +} __packed TRANSACTION2_FNEXT_REQ; =20 typedef struct smb_com_transaction2_fnext_rsp { struct smb_hdr hdr; /* wct =3D 10 */ struct trans2_resp t2; __u16 ByteCount; -} __attribute__((packed)) TRANSACTION2_FNEXT_RSP; +} __packed TRANSACTION2_FNEXT_RSP; =20 typedef struct smb_com_transaction2_fnext_rsp_parms { __le16 SearchCount; __le16 EndofSearch; __le16 EAErrorOffset; __le16 LastNameOffset; -} __attribute__((packed)) T2_FNEXT_RSP_PARMS; +} __packed T2_FNEXT_RSP_PARMS; =20 /* QFSInfo Levels */ #define SMB_INFO_ALLOCATION 1 @@ -1786,14 +1786,14 @@ typedef struct smb_com_transaction2_qfsi_req { __le16 ByteCount; __u8 Pad; __le16 InformationLevel; -} __attribute__((packed)) TRANSACTION2_QFSI_REQ; +} __packed TRANSACTION2_QFSI_REQ; =20 typedef struct smb_com_transaction_qfsi_rsp { struct smb_hdr hdr; /* wct =3D 10 + SetupCount */ struct trans2_resp t2; __u16 ByteCount; __u8 Pad; /* may be three bytes? *//* followed by data area */ -} __attribute__((packed)) TRANSACTION2_QFSI_RSP; +} __packed TRANSACTION2_QFSI_RSP; =20 typedef struct whoami_rsp_data { /* Query level 0x202 */ __u32 flags; /* 0 =3D Authenticated user 1 =3D GUEST */ @@ -1806,7 +1806,7 @@ typedef struct whoami_rsp_data { /* Query level 0x202= */ __u32 pad; /* reserved - MBZ */ /* __u64 gid_array[0]; */ /* may be empty */ /* __u8 * psid_list */ /* may be empty */ -} __attribute__((packed)) WHOAMI_RSP_DATA; +} __packed WHOAMI_RSP_DATA; =20 /* SETFSInfo Levels */ #define SMB_SET_CIFS_UNIX_INFO 0x200 @@ -1839,7 +1839,7 @@ typedef struct smb_com_transaction2_setfsi_req { __le16 ClientUnixMajor; /* Data start. */ __le16 ClientUnixMinor; __le64 ClientUnixCap; /* Data end */ -} __attribute__((packed)) TRANSACTION2_SETFSI_REQ; +} __packed TRANSACTION2_SETFSI_REQ; =20 /* level 0x203 request structure follows */ typedef struct smb_com_transaction2_setfs_enc_req { @@ -1865,14 +1865,14 @@ typedef struct smb_com_transaction2_setfs_enc_req { __u16 Reserved4; /* Parameters start. */ __le16 InformationLevel;/* Parameters end. */ /* NTLMSSP Blob, Data start. */ -} __attribute__((packed)) TRANSACTION2_SETFSI_ENC_REQ; +} __packed TRANSACTION2_SETFSI_ENC_REQ; =20 /* response for setfsinfo levels 0x200 and 0x203 */ typedef struct smb_com_transaction2_setfsi_rsp { struct smb_hdr hdr; /* wct =3D 10 */ struct trans2_resp t2; __u16 ByteCount; -} __attribute__((packed)) TRANSACTION2_SETFSI_RSP; +} __packed TRANSACTION2_SETFSI_RSP; =20 typedef struct smb_com_transaction2_get_dfs_refer_req { struct smb_hdr hdr; /* wct =3D 15 */ @@ -1898,7 +1898,7 @@ typedef struct smb_com_transaction2_get_dfs_refer_req= { seem to matter though */ __le16 MaxReferralLevel; char RequestFileName[]; -} __attribute__((packed)) TRANSACTION2_GET_DFS_REFER_REQ; +} __packed TRANSACTION2_GET_DFS_REFER_REQ; =20 #define DFS_VERSION cpu_to_le16(0x0003) =20 @@ -1920,7 +1920,7 @@ typedef struct dfs_referral_level_3 { /* version 4 is= same, + one flag bit */ __le16 DfsAlternatePathOffset; __le16 NetworkAddressOffset; /* offset of the link target */ __u8 ServiceSiteGuid[16]; /* MBZ, ignored */ -} __attribute__((packed)) REFERRAL3; +} __packed REFERRAL3; =20 struct get_dfs_referral_rsp { __le16 PathConsumed; @@ -1960,7 +1960,7 @@ struct serverInfo { unsigned char versionMinor; unsigned long type; unsigned int commentOffset; -} __attribute__((packed)); +} __packed; =20 /* * The following structure is the format of the data returned on a NetShar= eEnum @@ -1972,20 +1972,20 @@ struct shareInfo { char pad; unsigned short type; unsigned int commentOffset; -} __attribute__((packed)); +} __packed; =20 struct aliasInfo { char aliasName[9]; char pad; unsigned int commentOffset; unsigned char type[2]; -} __attribute__((packed)); +} __packed; =20 struct aliasInfo92 { int aliasNameOffset; int serverNameOffset; int shareNameOffset; -} __attribute__((packed)); +} __packed; =20 typedef struct { __le32 fsid; @@ -1993,13 +1993,13 @@ typedef struct { __le32 TotalAllocationUnits; __le32 FreeAllocationUnits; __le16 BytesPerSector; -} __attribute__((packed)) FILE_SYSTEM_ALLOC_INFO; +} __packed FILE_SYSTEM_ALLOC_INFO; =20 typedef struct { __le16 MajorVersionNumber; __le16 MinorVersionNumber; __le64 Capability; -} __attribute__((packed)) FILE_SYSTEM_UNIX_INFO; /* Unix extension level 0= x200*/ +} __packed FILE_SYSTEM_UNIX_INFO; /* Unix extension level 0x200*/ =20 /* Version numbers for CIFS UNIX major and minor. */ #define CIFS_UNIX_MAJOR_VERSION 1 @@ -2092,7 +2092,7 @@ typedef struct { /* data block encoding of response t= o level 263 QPathInfo */ char __pad; DECLARE_FLEX_ARRAY(char, FileName); }; -} __attribute__((packed)) FILE_ALL_INFO; /* level 0x107 QPathInfo */ +} __packed FILE_ALL_INFO; /* level 0x107 QPathInfo */ =20 typedef struct { __le64 AllocationSize; @@ -2101,7 +2101,7 @@ typedef struct { __u8 DeletePending; __u8 Directory; __u16 Pad; -} __attribute__((packed)) FILE_STANDARD_INFO; /* level 0x102 QPathInfo */ +} __packed FILE_STANDARD_INFO; /* level 0x102 QPathInfo */ =20 =20 /* defines for enumerating possible values of the Unix type field below */ @@ -2126,11 +2126,11 @@ typedef struct { __le64 UniqueId; __le64 Permissions; __le64 Nlinks; -} __attribute__((packed)) FILE_UNIX_BASIC_INFO; /* level 0x200 QPathInfo */ +} __packed FILE_UNIX_BASIC_INFO; /* level 0x200 QPathInfo */ =20 typedef struct { DECLARE_FLEX_ARRAY(char, LinkDest); -} __attribute__((packed)) FILE_UNIX_LINK_INFO; /* level 0x201 QPathInfo */ +} __packed FILE_UNIX_LINK_INFO; /* level 0x201 QPathInfo */ =20 /* The following three structures are needed only for setting time to NT4 and some older servers via @@ -2139,13 +2139,13 @@ typedef struct { __u16 Day:5; __u16 Month:4; __u16 Year:7; -} __attribute__((packed)) SMB_DATE; +} __packed SMB_DATE; =20 typedef struct { __u16 TwoSeconds:5; __u16 Minutes:6; __u16 Hours:5; -} __attribute__((packed)) SMB_TIME; +} __packed SMB_TIME; =20 typedef struct { __le16 CreationDate; /* SMB Date see above */ @@ -2158,7 +2158,7 @@ typedef struct { __le32 AllocationSize; __le16 Attributes; /* verify not u32 */ __le32 EASize; -} __attribute__((packed)) FILE_INFO_STANDARD; /* level 1 SetPath/FileInfo= */ +} __packed FILE_INFO_STANDARD; /* level 1 SetPath/FileInfo */ =20 typedef struct { __le64 CreationTime; @@ -2167,7 +2167,7 @@ typedef struct { __le64 ChangeTime; __le32 Attributes; __u32 Pad; -} __attribute__((packed)) FILE_BASIC_INFO; /* size info, level 0x101 */ +} __packed FILE_BASIC_INFO; /* size info, level 0x101 */ =20 struct file_allocation_info { __le64 AllocationSize; /* Note old Samba srvr rounds this up too much */ @@ -2175,11 +2175,11 @@ struct file_allocation_info { =20 struct file_end_of_file_info { __le64 FileSize; /* offset to end of file */ -} __attribute__((packed)); /* size info, level 0x104 for set, 0x106 for qu= ery */ +} __packed; /* size info, level 0x104 for set, 0x106 for query */ =20 struct file_alt_name_info { DECLARE_FLEX_ARRAY(__u8, alt_name); -} __attribute__((packed)); /* level 0x0108 */ +} __packed; /* level 0x0108 */ =20 struct file_stream_info { __le32 number_of_streams; /* BB check sizes and verify location */ @@ -2196,7 +2196,7 @@ struct file_compression_info { __u8 ch_shift; __u8 cl_shift; __u8 pad[3]; -} __attribute__((packed)); /* level 0x10b */ +} __packed; /* level 0x10b */ =20 /* POSIX ACL set/query path info structures */ #define CIFS_ACL_VERSION 1 @@ -2204,7 +2204,7 @@ struct cifs_posix_ace { /* access control entry (ACE)= */ __u8 cifs_e_tag; __u8 cifs_e_perm; __le64 cifs_uid; /* or gid */ -} __attribute__((packed)); +} __packed; =20 struct cifs_posix_acl { /* access control list (ACL) */ __le16 version; @@ -2212,7 +2212,7 @@ struct cifs_posix_acl { /* access control list (ACL)= */ __le16 default_entry_count; /* default ACL - count of entries */ struct cifs_posix_ace ace_array[]; /* followed by struct cifs_posix_ace default_ace_array[] */ -} __attribute__((packed)); /* level 0x204 */ +} __packed; /* level 0x204 */ =20 /* types of access control entries already defined in posix_acl.h */ /* #define CIFS_POSIX_ACL_USER_OBJ 0x01 @@ -2247,7 +2247,7 @@ typedef struct { __le32 PosixOpenFlags; __le64 Permissions; __le16 Level; /* reply level requested (see QPathInfo levels) */ -} __attribute__((packed)) OPEN_PSX_REQ; /* level 0x209 SetPathInfo data */ +} __packed OPEN_PSX_REQ; /* level 0x209 SetPathInfo data */ =20 typedef struct { __le16 OplockFlags; @@ -2256,27 +2256,27 @@ typedef struct { __le16 ReturnedLevel; __le16 Pad; /* struct following varies based on requested level */ -} __attribute__((packed)) OPEN_PSX_RSP; /* level 0x209 SetPathInfo data */ +} __packed OPEN_PSX_RSP; /* level 0x209 SetPathInfo data */ =20 #define SMB_POSIX_UNLINK_FILE_TARGET 0 #define SMB_POSIX_UNLINK_DIRECTORY_TARGET 1 =20 struct unlink_psx_rq { /* level 0x20a SetPathInfo */ __le16 type; -} __attribute__((packed)); +} __packed; =20 struct file_internal_info { __le64 UniqueId; /* inode number */ -} __attribute__((packed)); /* level 0x3ee */ +} __packed; /* level 0x3ee */ =20 struct file_mode_info { __le32 Mode; -} __attribute__((packed)); /* level 0x3f8 */ +} __packed; /* level 0x3f8 */ =20 struct file_attrib_tag { __le32 Attribute; __le32 ReparseTag; -} __attribute__((packed)); /* level 0x40b */ +} __packed; /* level 0x40b */ =20 =20 /********************************************************/ @@ -2291,7 +2291,7 @@ typedef struct { char __pad; DECLARE_FLEX_ARRAY(char, FileName); }; -} __attribute__((packed)) FILE_UNIX_INFO; /* level 0x202 */ +} __packed FILE_UNIX_INFO; /* level 0x202 */ =20 typedef struct { __u32 ResumeKey; @@ -2306,7 +2306,7 @@ typedef struct { __le16 Attributes; /* verify not u32 */ __u8 FileNameLength; char FileName[]; -} __attribute__((packed)) FIND_FILE_STANDARD_INFO; /* level 0x1 FF resp da= ta */ +} __packed FIND_FILE_STANDARD_INFO; /* level 0x1 FF resp data */ =20 =20 struct fea { @@ -2315,21 +2315,21 @@ struct fea { __le16 value_len; char name[]; /* optionally followed by value */ -} __attribute__((packed)); +} __packed; /* flags for _FEA.fEA */ #define FEA_NEEDEA 0x80 /* need EA bit */ =20 struct fealist { __le32 list_len; struct fea list; -} __attribute__((packed)); +} __packed; =20 /* used to hold an arbitrary blob of data */ struct data_blob { __u8 *data; size_t length; void (*free) (struct data_blob *data_blob); -} __attribute__((packed)); +} __packed; =20 =20 #ifdef CONFIG_CIFS_POSIX @@ -2432,7 +2432,7 @@ struct xsymlink { char cr2; /* \n */ /* if room left, then end with \n then 0x20s by convention but not require= d */ char path[1024]; -} __attribute__((packed)); +} __packed; =20 typedef struct file_xattr_info { /* BB do we need another field for flags? BB */ diff --git a/fs/smb/client/connect.c b/fs/smb/client/connect.c index 22f37ae7a66a..786303b799ba 100644 --- a/fs/smb/client/connect.c +++ b/fs/smb/client/connect.c @@ -2326,8 +2326,8 @@ cifs_set_cifscreds(struct smb3_fs_context *ctx, struc= t cifs_ses *ses) } #else /* ! CONFIG_KEYS */ static inline int -cifs_set_cifscreds(struct smb3_fs_context *ctx __attribute__((unused)), - struct cifs_ses *ses __attribute__((unused))) +cifs_set_cifscreds(struct smb3_fs_context *ctx __maybe_unused, + struct cifs_ses *ses __maybe_unused) { return -ENOSYS; } diff --git a/fs/smb/client/ntlmssp.h b/fs/smb/client/ntlmssp.h index 875de43b72de..a11fddc321f6 100644 --- a/fs/smb/client/ntlmssp.h +++ b/fs/smb/client/ntlmssp.h @@ -73,7 +73,7 @@ typedef struct _SECURITY_BUFFER { __le16 Length; __le16 MaximumLength; __le32 BufferOffset; /* offset to buffer */ -} __attribute__((packed)) SECURITY_BUFFER; +} __packed SECURITY_BUFFER; =20 typedef struct _NEGOTIATE_MESSAGE { __u8 Signature[sizeof(NTLMSSP_SIGNATURE)]; @@ -85,7 +85,7 @@ typedef struct _NEGOTIATE_MESSAGE { do not set the version is present flag */ char DomainString[]; /* followed by WorkstationString */ -} __attribute__((packed)) NEGOTIATE_MESSAGE, *PNEGOTIATE_MESSAGE; +} __packed NEGOTIATE_MESSAGE, *PNEGOTIATE_MESSAGE; =20 #define NTLMSSP_REVISION_W2K3 0x0F =20 @@ -121,7 +121,7 @@ typedef struct _CHALLENGE_MESSAGE { SECURITY_BUFFER TargetInfoArray; /* SECURITY_BUFFER for version info not present since we do not set the version is present flag */ -} __attribute__((packed)) CHALLENGE_MESSAGE, *PCHALLENGE_MESSAGE; +} __packed CHALLENGE_MESSAGE, *PCHALLENGE_MESSAGE; =20 typedef struct _AUTHENTICATE_MESSAGE { __u8 Signature[sizeof(NTLMSSP_SIGNATURE)]; @@ -136,7 +136,7 @@ typedef struct _AUTHENTICATE_MESSAGE { struct ntlmssp_version Version; /* SECURITY_BUFFER */ char UserString[]; -} __attribute__((packed)) AUTHENTICATE_MESSAGE, *PAUTHENTICATE_MESSAGE; +} __packed AUTHENTICATE_MESSAGE, *PAUTHENTICATE_MESSAGE; =20 /* * Size of the session key (crypto key encrypted with the password diff --git a/fs/smb/client/rfc1002pdu.h b/fs/smb/client/rfc1002pdu.h index ac82c2f3a4a2..f5b143088b90 100644 --- a/fs/smb/client/rfc1002pdu.h +++ b/fs/smb/client/rfc1002pdu.h @@ -33,17 +33,17 @@ struct rfc1002_session_packet { __u8 calling_len; __u8 calling_name[32]; __u8 scope2; /* null */ - } __attribute__((packed)) session_req; + } __packed session_req; struct { __be32 retarget_ip_addr; __be16 port; - } __attribute__((packed)) retarget_resp; + } __packed retarget_resp; __u8 neg_ses_resp_error_code; /* POSITIVE_SESSION_RESPONSE packet does not include trailer. SESSION_KEEP_ALIVE packet also does not include a trailer. Trailer for the SESSION_MESSAGE packet is SMB/CIFS header */ - } __attribute__((packed)) trailer; -} __attribute__((packed)); + } __packed trailer; +} __packed; =20 /* Negative Session Response error codes */ #define RFC1002_NOT_LISTENING_CALLED 0x80 /* not listening on called name= */ diff --git a/fs/smb/common/smbacl.h b/fs/smb/common/smbacl.h index a624ec9e4a14..70bba5ff7fc1 100644 --- a/fs/smb/common/smbacl.h +++ b/fs/smb/common/smbacl.h @@ -92,14 +92,14 @@ struct smb_ntsd { __le32 gsidoffset; __le32 sacloffset; __le32 dacloffset; -} __attribute__((packed)); +} __packed; =20 struct smb_sid { __u8 revision; /* revision level */ __u8 num_subauth; __u8 authority[NUM_AUTHS]; __le32 sub_auth[SID_MAX_SUB_AUTHORITIES]; /* sub_auth[num_subauth] */ -} __attribute__((packed)); +} __packed; =20 /* size of a struct smb_sid, sans sub_auth array */ #define CIFS_SID_BASE_SIZE (1 + 1 + NUM_AUTHS) @@ -109,7 +109,7 @@ struct smb_acl { __le16 size; __le16 num_aces; __le16 reserved; -} __attribute__((packed)); +} __packed; =20 struct smb_ace { __u8 type; /* see above and MS-DTYP 2.4.4.1 */ @@ -117,6 +117,6 @@ struct smb_ace { __le16 size; __le32 access_req; struct smb_sid sid; /* ie UUID of user or group who gets these perms */ -} __attribute__((packed)); +} __packed; =20 #endif /* _COMMON_SMBACL_H */ --=20 2.43.0