[PATCH v4 0/7] smb: client: make more mount options take effect on remount
From: rajasimandalos
Date: Tue Jun 16 2026 - 01:54:48 EST
From: Rajasi Mandal <rajasimandal@xxxxxxxxxxxxx>
Several mount options are accepted by the remount (reconfigure) path but
silently have no effect: the new value is stored in cifs_sb->ctx but never
propagated to the live server/tcon structures, or the option is simply
ignored. This is confusing -- the user passes an option on
'mount -o remount' and nothing changes, with no error.
This series makes the reconfigure path honest:
- It first establishes a correct baseline for comparing old vs new
options on remount by duplicating the live context (with runtime
state synced in) instead of rebuilding from init defaults.
- Options that are genuinely reconfigurable (retrans, rasize, nolease)
are now applied to the running mount.
- Options that are connection-tied and cannot take effect without
tearing down the connection (seal, sign, vers, ip, srcaddr, rdma,
cache=ro/singleclient, etc.) are now explicitly rejected with a clear
error message instead of being silently dropped.
Patch 1 is preparatory plumbing (duplicate live ctx + sync runtime
state) that makes the simple != comparisons in the rejection checks
sound. Patches 2 and 4 add the rejection checks. Patches 3, 5 and 7
apply the reconfigurable options. Patch 6 is a small no-functional-change
move of struct tcon_list so the nolease patch can reuse it.
Changes since v3:
- nolease: moved tcon->no_lease out of the bitfield word into a plain
bool, so propagating it on remount cannot race (via a bitfield
read-modify-write) with the lockless need_reconnect/need_reopen_files
writers on the reconnect/reopen paths.
- srcaddr remount check now uses cifs_match_ipaddr() instead of a raw
memcmp over sockaddr_storage, matching the adjacent ip check and
avoiding port/padding fragility.
Rajasi Mandal (7):
smb: client: sync runtime state into ctx on reconfigure
smb: client: block non-reconfigurable option changes on remount
smb: client: sync retrans on remount
smb: client: block cache=ro and cache=singleclient on remount
smb: client: apply rasize on remount
smb: client: move struct tcon_list to cifsglob.h
smb: client: allow nolease option to be reconfigured on remount
fs/smb/client/cached_dir.c | 44 +++++
fs/smb/client/cached_dir.h | 1 +
fs/smb/client/cifs_swn.h | 14 +-
fs/smb/client/cifsglob.h | 7 +-
fs/smb/client/fs_context.c | 332 ++++++++++++++++++++++++++++++++++++-
fs/smb/client/misc.c | 5 -
fs/smb/client/smb1ops.c | 7 +-
fs/smb/client/smb2pdu.c | 11 +-
fs/smb/client/trace.h | 2 +
9 files changed, 411 insertions(+), 12 deletions(-)
base-commit: 0eb17dea51eff940230b5e562df29ce457124d41
--
2.43.0