mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 05:49:47 -04:00
nfsd: add fh_want_write() for early-verified SETATTR in nfsd_proc_setattr()
The BOTH_TIME_SET branch calls fh_verify() early so setattr_prepare()
can inspect the dentry. This causes nfsd_setattr() to skip
fh_want_write(), so notify_change() runs without a mount write
reference.
Add the missing fh_want_write() call after the early fh_verify().
Fixes: cc265089ce ("nfsd: Disable NFSv2 timestamp workaround for NFSv3+")
Cc: stable@vger.kernel.org
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Link: https://patch.msgid.link/20260611-nfsd-testing-v2-11-5b90e276f2d9@kernel.org
Signed-off-by: Chuck Lever <cel@kernel.org>
This commit is contained in:
@@ -82,6 +82,7 @@ nfsd_proc_setattr(struct svc_rqst *rqstp)
|
||||
.na_iattr = iap,
|
||||
};
|
||||
struct svc_fh *fhp;
|
||||
int hosterr;
|
||||
|
||||
dprintk("nfsd: SETATTR %s, valid=%x, size=%ld\n",
|
||||
SVCFH_fmt(&argp->fh),
|
||||
@@ -117,6 +118,12 @@ nfsd_proc_setattr(struct svc_rqst *rqstp)
|
||||
if (resp->status != nfs_ok)
|
||||
goto out;
|
||||
|
||||
hosterr = fh_want_write(fhp);
|
||||
if (hosterr) {
|
||||
resp->status = nfserrno(hosterr);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (delta < 0)
|
||||
delta = -delta;
|
||||
if (delta < MAX_TOUCH_TIME_ERROR &&
|
||||
|
||||
Reference in New Issue
Block a user