From nobody Sun Feb 8 04:11:59 2026 Received: from out-170.mta1.migadu.com (out-170.mta1.migadu.com [95.215.58.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 8CCFB2DCBEC for ; Mon, 27 Oct 2025 07:15:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761549329; cv=none; b=lUqDBSbUTANd/jbGqlT8BJEYCLirBt+tODCPZ95Z+8qYUSmq8ufkiB50sTuJMkThkRMtTkQQYdwqw4g7Dl24FEbs8DL5G0d3ePIMdNd5/nTLEfDZxuVAkKI4JLR61CqB6KNPpfo2lPaHDt/+3M9AQYvvZsFmXUuwHn3+wtpCIFE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761549329; c=relaxed/simple; bh=ikhOI17FZheUk2ACTmJwSE1faWAmEqY0h9MT0SkkjR0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cFc55Ug/AUG77zWO5N26weDigEpdYCDdw4R0aPjyaqCrkmF+XHhOqUYewx57bgpgzOt95uJN/y2FsVdf/HrlDUYV8v/GhetG/YAnQ+Fou+4E5DNESGDBPsBEZYKjfmTOHN2o25n10hNt/o4a1ZzXir+hIogPqoCDdlmk1S+5naE= 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=c+E94c/d; arc=none smtp.client-ip=95.215.58.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="c+E94c/d" 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=1761549325; 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=xMyh505oqjZAWI90qrrrUNcVCrcJTNuZ0Q/7mQk4hUY=; b=c+E94c/dacWg6U0DbVrGrcn6rGcfSGweoN4NRkfXCMe3hjC3OVP0tUzdqo1ACDkq5TFLN6 l4ooXETZ1Z53Pfvcx0UZK304EozNbLEI/EDVuF1LzARwwp8Xvv4lDN6fkIEeVJknunzGhw ho2lS7UakJVEkYykPwYT6o2LiPa+wTM= 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 v4 02/24] smb: move smb_version_values to common/smbglob.h Date: Mon, 27 Oct 2025 15:12:54 +0800 Message-ID: <20251027071316.3468472-3-chenxiaosong.chenxiaosong@linux.dev> In-Reply-To: <20251027071316.3468472-1-chenxiaosong.chenxiaosong@linux.dev> References: <20251027071316.3468472-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 Merge the struct members of the server and the client: - req_capabilities: from client - header_preamble_size: from client - cap_unicode: from client - capabilities: from server, rename to req_capabilities - max_read_size: from server - max_write_size: from server - max_trans_size: from server - max_credits: from server - create_durable_size: from server - create_durable_v2_size: from server - create_mxac_size: from server - create_disk_id_size: from server - create_posix_size: from server Then move duplicate definitions to common header file. Co-developed-by: ChenXiaoSong Signed-off-by: ChenXiaoSong Signed-off-by: ZhangGuoDong --- fs/smb/client/cifsglob.h | 22 ---------------------- fs/smb/common/smbglob.h | 31 +++++++++++++++++++++++++++++++ fs/smb/server/smb2misc.c | 2 +- fs/smb/server/smb2ops.c | 32 ++++++++++++++++---------------- fs/smb/server/smb2pdu.c | 10 +++++----- fs/smb/server/smb_common.h | 29 ----------------------------- 6 files changed, 53 insertions(+), 73 deletions(-) diff --git a/fs/smb/client/cifsglob.h b/fs/smb/client/cifsglob.h index 8fd9aa7e2009..accca43f7af5 100644 --- a/fs/smb/client/cifsglob.h +++ b/fs/smb/client/cifsglob.h @@ -633,28 +633,6 @@ struct smb_version_operations { struct kvec *xattr_iov); }; =20 -struct smb_version_values { - char *version_string; - __u16 protocol_id; - __u32 req_capabilities; - __u32 large_lock_type; - __u32 exclusive_lock_type; - __u32 shared_lock_type; - __u32 unlock_lock_type; - size_t header_preamble_size; - size_t header_size; - size_t max_header_size; - size_t read_rsp_size; - __le16 lock_cmd; - unsigned int cap_unix; - unsigned int cap_nt_find; - unsigned int cap_large_files; - unsigned int cap_unicode; - __u16 signing_enabled; - __u16 signing_required; - size_t create_lease_size; -}; - #define HEADER_SIZE(server) (server->vals->header_size) #define MAX_HEADER_SIZE(server) (server->vals->max_header_size) #define HEADER_PREAMBLE_SIZE(server) (server->vals->header_preamble_size) diff --git a/fs/smb/common/smbglob.h b/fs/smb/common/smbglob.h index c51d227977c4..84aa6826c3ea 100644 --- a/fs/smb/common/smbglob.h +++ b/fs/smb/common/smbglob.h @@ -9,6 +9,37 @@ #ifndef _COMMON_SMB_GLOB_H #define _COMMON_SMB_GLOB_H =20 +struct smb_version_values { + char *version_string; + __u16 protocol_id; + __le16 lock_cmd; + __u32 req_capabilities; + __u32 max_read_size; + __u32 max_write_size; + __u32 max_trans_size; + __u32 max_credits; + __u32 large_lock_type; + __u32 exclusive_lock_type; + __u32 shared_lock_type; + __u32 unlock_lock_type; + size_t header_preamble_size; + size_t header_size; + size_t max_header_size; + size_t read_rsp_size; + unsigned int cap_unix; + unsigned int cap_nt_find; + unsigned int cap_large_files; + unsigned int cap_unicode; + __u16 signing_enabled; + __u16 signing_required; + size_t create_lease_size; + size_t create_durable_size; + size_t create_durable_v2_size; + size_t create_mxac_size; + size_t create_disk_id_size; + size_t create_posix_size; +}; + static inline void inc_rfc1001_len(void *buf, int count) { be32_add_cpu((__be32 *)buf, count); diff --git a/fs/smb/server/smb2misc.c b/fs/smb/server/smb2misc.c index ae501024665e..67a2d7a793f6 100644 --- a/fs/smb/server/smb2misc.c +++ b/fs/smb/server/smb2misc.c @@ -460,7 +460,7 @@ int ksmbd_smb2_check_message(struct ksmbd_work *work) } =20 validate_credit: - if ((work->conn->vals->capabilities & SMB2_GLOBAL_CAP_LARGE_MTU) && + if ((work->conn->vals->req_capabilities & SMB2_GLOBAL_CAP_LARGE_MTU) && smb2_validate_credit_charge(work->conn, hdr)) return 1; =20 diff --git a/fs/smb/server/smb2ops.c b/fs/smb/server/smb2ops.c index 606aa3c5189a..bcf05caa2304 100644 --- a/fs/smb/server/smb2ops.c +++ b/fs/smb/server/smb2ops.c @@ -15,7 +15,7 @@ static struct smb_version_values smb21_server_values =3D { .version_string =3D SMB21_VERSION_STRING, .protocol_id =3D SMB21_PROT_ID, - .capabilities =3D SMB2_GLOBAL_CAP_LARGE_MTU, + .req_capabilities =3D SMB2_GLOBAL_CAP_LARGE_MTU, .max_read_size =3D SMB21_DEFAULT_IOSIZE, .max_write_size =3D SMB21_DEFAULT_IOSIZE, .max_trans_size =3D SMB21_DEFAULT_IOSIZE, @@ -41,7 +41,7 @@ static struct smb_version_values smb21_server_values =3D { static struct smb_version_values smb30_server_values =3D { .version_string =3D SMB30_VERSION_STRING, .protocol_id =3D SMB30_PROT_ID, - .capabilities =3D SMB2_GLOBAL_CAP_LARGE_MTU, + .req_capabilities =3D SMB2_GLOBAL_CAP_LARGE_MTU, .max_read_size =3D SMB3_DEFAULT_IOSIZE, .max_write_size =3D SMB3_DEFAULT_IOSIZE, .max_trans_size =3D SMB3_DEFAULT_TRANS_SIZE, @@ -68,7 +68,7 @@ static struct smb_version_values smb30_server_values =3D { static struct smb_version_values smb302_server_values =3D { .version_string =3D SMB302_VERSION_STRING, .protocol_id =3D SMB302_PROT_ID, - .capabilities =3D SMB2_GLOBAL_CAP_LARGE_MTU, + .req_capabilities =3D SMB2_GLOBAL_CAP_LARGE_MTU, .max_read_size =3D SMB3_DEFAULT_IOSIZE, .max_write_size =3D SMB3_DEFAULT_IOSIZE, .max_trans_size =3D SMB3_DEFAULT_TRANS_SIZE, @@ -95,7 +95,7 @@ static struct smb_version_values smb302_server_values =3D= { static struct smb_version_values smb311_server_values =3D { .version_string =3D SMB311_VERSION_STRING, .protocol_id =3D SMB311_PROT_ID, - .capabilities =3D SMB2_GLOBAL_CAP_LARGE_MTU, + .req_capabilities =3D SMB2_GLOBAL_CAP_LARGE_MTU, .max_read_size =3D SMB3_DEFAULT_IOSIZE, .max_write_size =3D SMB3_DEFAULT_IOSIZE, .max_trans_size =3D SMB3_DEFAULT_TRANS_SIZE, @@ -204,7 +204,7 @@ void init_smb2_1_server(struct ksmbd_conn *conn) conn->signing_algorithm =3D SIGNING_ALG_HMAC_SHA256_LE; =20 if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_LEASES) - conn->vals->capabilities |=3D SMB2_GLOBAL_CAP_LEASING; + conn->vals->req_capabilities |=3D SMB2_GLOBAL_CAP_LEASING; } =20 /** @@ -221,20 +221,20 @@ void init_smb3_0_server(struct ksmbd_conn *conn) conn->signing_algorithm =3D SIGNING_ALG_AES_CMAC_LE; =20 if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_LEASES) - conn->vals->capabilities |=3D SMB2_GLOBAL_CAP_LEASING | + conn->vals->req_capabilities |=3D SMB2_GLOBAL_CAP_LEASING | SMB2_GLOBAL_CAP_DIRECTORY_LEASING; =20 if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION && conn->cli_cap & SMB2_GLOBAL_CAP_ENCRYPTION) - conn->vals->capabilities |=3D SMB2_GLOBAL_CAP_ENCRYPTION; + conn->vals->req_capabilities |=3D SMB2_GLOBAL_CAP_ENCRYPTION; =20 if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION || (!(server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION_OFF) && conn->cli_cap & SMB2_GLOBAL_CAP_ENCRYPTION)) - conn->vals->capabilities |=3D SMB2_GLOBAL_CAP_ENCRYPTION; + conn->vals->req_capabilities |=3D SMB2_GLOBAL_CAP_ENCRYPTION; =20 if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB3_MULTICHANNEL) - conn->vals->capabilities |=3D SMB2_GLOBAL_CAP_MULTI_CHANNEL; + conn->vals->req_capabilities |=3D SMB2_GLOBAL_CAP_MULTI_CHANNEL; } =20 /** @@ -251,19 +251,19 @@ void init_smb3_02_server(struct ksmbd_conn *conn) conn->signing_algorithm =3D SIGNING_ALG_AES_CMAC_LE; =20 if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_LEASES) - conn->vals->capabilities |=3D SMB2_GLOBAL_CAP_LEASING | + conn->vals->req_capabilities |=3D SMB2_GLOBAL_CAP_LEASING | SMB2_GLOBAL_CAP_DIRECTORY_LEASING; =20 if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION || (!(server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION_OFF) && conn->cli_cap & SMB2_GLOBAL_CAP_ENCRYPTION)) - conn->vals->capabilities |=3D SMB2_GLOBAL_CAP_ENCRYPTION; + conn->vals->req_capabilities |=3D SMB2_GLOBAL_CAP_ENCRYPTION; =20 if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB3_MULTICHANNEL) - conn->vals->capabilities |=3D SMB2_GLOBAL_CAP_MULTI_CHANNEL; + conn->vals->req_capabilities |=3D SMB2_GLOBAL_CAP_MULTI_CHANNEL; =20 if (server_conf.flags & KSMBD_GLOBAL_FLAG_DURABLE_HANDLE) - conn->vals->capabilities |=3D SMB2_GLOBAL_CAP_PERSISTENT_HANDLES; + conn->vals->req_capabilities |=3D SMB2_GLOBAL_CAP_PERSISTENT_HANDLES; } =20 /** @@ -280,14 +280,14 @@ int init_smb3_11_server(struct ksmbd_conn *conn) conn->signing_algorithm =3D SIGNING_ALG_AES_CMAC_LE; =20 if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_LEASES) - conn->vals->capabilities |=3D SMB2_GLOBAL_CAP_LEASING | + conn->vals->req_capabilities |=3D SMB2_GLOBAL_CAP_LEASING | SMB2_GLOBAL_CAP_DIRECTORY_LEASING; =20 if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB3_MULTICHANNEL) - conn->vals->capabilities |=3D SMB2_GLOBAL_CAP_MULTI_CHANNEL; + conn->vals->req_capabilities |=3D SMB2_GLOBAL_CAP_MULTI_CHANNEL; =20 if (server_conf.flags & KSMBD_GLOBAL_FLAG_DURABLE_HANDLE) - conn->vals->capabilities |=3D SMB2_GLOBAL_CAP_PERSISTENT_HANDLES; + conn->vals->req_capabilities |=3D SMB2_GLOBAL_CAP_PERSISTENT_HANDLES; =20 INIT_LIST_HEAD(&conn->preauth_sess_table); return 0; diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c index f901ae18e68a..2c435836e005 100644 --- a/fs/smb/server/smb2pdu.c +++ b/fs/smb/server/smb2pdu.c @@ -282,7 +282,7 @@ int init_smb2_neg_rsp(struct ksmbd_work *work) /* Not setting conn guid rsp->ServerGUID, as it * not used by client for identifying connection */ - rsp->Capabilities =3D cpu_to_le32(conn->vals->capabilities); + rsp->Capabilities =3D cpu_to_le32(conn->vals->req_capabilities); /* Default Max Message Size till SMB2.0, 64K*/ rsp->MaxTransactSize =3D cpu_to_le32(conn->vals->max_trans_size); rsp->MaxReadSize =3D cpu_to_le32(conn->vals->max_read_size); @@ -956,7 +956,7 @@ bool smb3_encryption_negotiated(struct ksmbd_conn *conn) * SMB 3.0 and 3.0.2 dialects use the SMB2_GLOBAL_CAP_ENCRYPTION flag. * SMB 3.1.1 uses the cipher_type field. */ - return (conn->vals->capabilities & SMB2_GLOBAL_CAP_ENCRYPTION) || + return (conn->vals->req_capabilities & SMB2_GLOBAL_CAP_ENCRYPTION) || conn->cipher_type; } =20 @@ -1210,7 +1210,7 @@ int smb2_handle_negotiate(struct ksmbd_work *work) rc =3D -EINVAL; goto err_out; } - rsp->Capabilities =3D cpu_to_le32(conn->vals->capabilities); + rsp->Capabilities =3D cpu_to_le32(conn->vals->req_capabilities); =20 /* For stats */ conn->connection_type =3D conn->dialect; @@ -3474,7 +3474,7 @@ int smb2_open(struct ksmbd_work *work) share_ret =3D ksmbd_smb_check_shared_mode(fp->filp, fp); if (!test_share_config_flag(work->tcon->share_conf, KSMBD_SHARE_FLAG_OPLO= CKS) || (req_op_level =3D=3D SMB2_OPLOCK_LEVEL_LEASE && - !(conn->vals->capabilities & SMB2_GLOBAL_CAP_LEASING))) { + !(conn->vals->req_capabilities & SMB2_GLOBAL_CAP_LEASING))) { if (share_ret < 0 && !S_ISDIR(file_inode(fp->filp)->i_mode)) { rc =3D share_ret; goto err_out1; @@ -7984,7 +7984,7 @@ static int fsctl_validate_negotiate_info(struct ksmbd= _conn *conn, goto err_out; } =20 - neg_rsp->Capabilities =3D cpu_to_le32(conn->vals->capabilities); + neg_rsp->Capabilities =3D cpu_to_le32(conn->vals->req_capabilities); memset(neg_rsp->Guid, 0, SMB2_CLIENT_GUID_SIZE); neg_rsp->SecurityMode =3D cpu_to_le16(conn->srv_sec_mode); neg_rsp->Dialect =3D cpu_to_le16(conn->dialect); diff --git a/fs/smb/server/smb_common.h b/fs/smb/server/smb_common.h index 910b9c3bd244..50235c7cca57 100644 --- a/fs/smb/server/smb_common.h +++ b/fs/smb/server/smb_common.h @@ -338,35 +338,6 @@ struct file_id_full_dir_info { char FileName[]; } __packed; /* level 0x105 FF rsp data */ =20 -struct smb_version_values { - char *version_string; - __u16 protocol_id; - __le16 lock_cmd; - __u32 capabilities; - __u32 max_read_size; - __u32 max_write_size; - __u32 max_trans_size; - __u32 max_credits; - __u32 large_lock_type; - __u32 exclusive_lock_type; - __u32 shared_lock_type; - __u32 unlock_lock_type; - size_t header_size; - size_t max_header_size; - size_t read_rsp_size; - unsigned int cap_unix; - unsigned int cap_nt_find; - unsigned int cap_large_files; - __u16 signing_enabled; - __u16 signing_required; - size_t create_lease_size; - size_t create_durable_size; - size_t create_durable_v2_size; - size_t create_mxac_size; - size_t create_disk_id_size; - size_t create_posix_size; -}; - struct filesystem_posix_info { /* For undefined recommended transfer size return -1 in that field */ __le32 OptimalTransferSize; /* bsize on some os, iosize on other os */ --=20 2.43.0