From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from fout-b5-smtp.messagingengine.com (fout-b5-smtp.messagingengine.com [202.12.124.148]) (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 C052C361DC3 for ; Mon, 13 Jul 2026 06:23:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.148 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783923797; cv=none; b=GjayVYbztbUlAS16KThC3PYA/hn3WtbaRdgpRhsSJAuTC/9O/GV2zC7L/m6MI4Wo1Uy0iOqTkD1Z5dtL2CL5NDyE+e03Gv1J6ou7azdRi5fOq7jLnFy+0Vt4nZDLCY2KOH4/SefEtYZvLOrTnfXAWCqklk0Hy1H8qoADJ9Vv7iU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783923797; c=relaxed/simple; bh=QVh4yw88URVf6DIa6SAd9c1IIUgnCWIuWtdaC3jkrCI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dSF4/YTJx/7uH9ymcUrron9PTfOc8sYOCINSiwNPPUwu46MIDraj9L+i8Yv/40rBJvh28RXtro0efwdvyWCbYPxqsYqUZsxU4A4AscJnMgXOhfKwZLpEJZVAuR66BoxG7f9uI+LEI8IfViU5aER3VzV+TQra5cjyNg2CHniOWWs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ownmail.net; spf=pass smtp.mailfrom=ownmail.net; dkim=pass (2048-bit key) header.d=ownmail.net header.i=@ownmail.net header.b=bAe17O3B; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=mAMcPsjU; arc=none smtp.client-ip=202.12.124.148 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ownmail.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ownmail.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ownmail.net header.i=@ownmail.net header.b="bAe17O3B"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="mAMcPsjU" Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfout.stl.internal (Postfix) with ESMTP id 3A9B61D00056; Mon, 13 Jul 2026 02:23:15 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-02.internal (MEProxy); Mon, 13 Jul 2026 02:23:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ownmail.net; h= cc:cc:content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:reply-to:subject:subject:to:to; s=fm2; t=1783923795; x=1784010195; bh=rNOOiY7792MdWTphiyu/Z7cdlpVdkgweARt4fbbWkVA=; b= bAe17O3B90UrikH4dKamERH4W474kyGLObL9cQnYlO4cIHlc4+l8yn2oU5skAZed ABnCUoFd1yOavDBzKMzQn1NKQnO2/VqaizvSJzaFOKvqNx0fkOwJlw4VPkamU3Dc SIM+mIQ4JDL70niBMJyiFbiBaAeZ826ej7yc4rwu1th0nlwX73Mmtg1ELVeDTJRg ugmYUQmiQwO8ftg/zZOZxp6rtZwBbZx6UaLVDoVORY5090OSZQS1lBeQBnH46vjl YZ9s/PZm/KtWMN1lY8oNdqkOd4vewnCi0sL+8H/aOQQZVEwp4Aop4KpxIXwEW9km AGNLW+/4qwqu2zVD7XxhLw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1783923795; x=1784010195; bh=r NOOiY7792MdWTphiyu/Z7cdlpVdkgweARt4fbbWkVA=; b=mAMcPsjUu7NN/K5qY Ryd5YCycrEQKtIR5xR4R7EYGzE3DjU+YQkeiHyjpLGahzlI/ahnt3IPVUYmqTMRz aNRlhC1utxEbrkKY2W2Q33hLz3GdAkt+afweDiEz3N36CDSSvOeRFcqivKR8iyH2 ABU3p0gFRfl8LlxUyvvb08nc/cqd1P7tlomvkGcjB8BAMOXxhG/8d+sP+lBPNWYC 92bfjWMWDr8eg688cfZ3jXJT0kj2bNtnc+suToR4Q3TOK8W0V8DYG19TmPGb8MO5 IMBahaffErQtOx+xkZygqgdQtJNDQkXfzt+2Th9rDgL4REdvEycF0McYUE+So4A7 TuuGg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTFfIeczxMyuVCuGJGpAVwQh0zZkbaIeOkLaWK7ryTOVtlJ/6pjps0fHW8awC4AtOE ibA9cJp3YfD4rECMNgH3UEcFeYIV9RiwoJPXCSJPficUXiZ3kx6j+xoVOfF/pjyAazIJfq 4qIe5Dh0SS9ayBH/GbR8unfi9PobUSUVm2+zivY/3iIyghi3JSOCnHxybSBgxtc7kv7Fv2 6meQ6+c4fJ8plU+oi/L+xxftvyA1H7EMfGykjoiDfYJxKmmKPVJNDF/B6BNwq6jmHq1VTM 3syOeuoJTUYvPV1MvMCVGru8xGzpu5HrLRyRj0g5ngPOJNIxiicgEEdmhQcKZa6/fp7dRy v2ENQRwDAz28daHN12KUsRZlijkm8Nc0F4gDFmKke24oC7JVzjaSPocDNaU+8jjyNd39vQ 3YIkkDJKCatQzWSa+HmHjUlG7pC2Mp4Q+bm5gx13cT8fnpcQ53o2aic5kkeU3tB21tdB26 izQUsrI6VdLE1emzvzndra2Vs727711nNVJN5A8kGtFuq8+BkOiSlNwKa13hUkRNTKyrN5 XZme4BhRm/ae7weEUWDASmaBzZ9KOz5f/QxrQNjuS//2U9s7K1CeEKP+PonT5FNVMUhTLm 0gLkSmQ77GuQePGZtHRec6c2X4wHfwCEdvdnjD6m8geyWbM+X1Gp9dh2ppQA X-ME-Proxy: Feedback-ID: i9d664b8f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 Jul 2026 02:23:13 -0400 (EDT) From: NeilBrown To: Chuck Lever , Jeff Layton Cc: Olga Kornievskaia , Dai Ngo , Tom Talpey , linux-nfs@vger.kernel.org Subject: [PATCH v3 08/17] nfsd: nfsd4_create_file(): Move NFSD_MAY_CREATE check earlier Date: Mon, 13 Jul 2026 16:15:31 +1000 Message-ID: <20260713062219.6399-9-neilb@ownmail.net> X-Mailer: git-send-email 2.50.0.107.gf914562f5916.dirty In-Reply-To: <20260713062219.6399-1-neilb@ownmail.net> References: <20260713062219.6399-1-neilb@ownmail.net> Reply-To: NeilBrown Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: NeilBrown We only need NFS_MAY_CREATE check if the file doesn't exist, but it is nfsd-specific code as it needs to check NFSEXP_READONLY and I want that to be separate from vfs-specific code, which eventually all be provided by the VFS. So move that check earlier, but hold the error status until needed. The if/else chain here looks a bit clumsy, but it will make a later patch cleaner. Reviewed-by: Jeff Layton Signed-off-by: NeilBrown --- fs/nfsd/nfs4proc.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index 83ad690a4948..33c112eda4c4 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c @@ -260,7 +260,7 @@ nfsd4_create_file(struct svc_rqst *rqstp, struct svc_fh *fhp, struct dentry *parent, *child = ERR_PTR(-EINVAL); __u32 v_mtime, v_atime; struct inode *inode; - __be32 status; + __be32 status, create_status; int host_err; if (name_is_dot_dotdot(open->op_fname, open->op_fnamelen)) @@ -349,6 +349,8 @@ nfsd4_create_file(struct svc_rqst *rqstp, struct svc_fh *fhp, iap->ia_atime.tv_nsec = 0; } + create_status = fh_verify(rqstp, fhp, S_IFDIR, NFSD_MAY_CREATE); + host_err = fh_want_write(fhp); if (host_err) { status = nfserrno(host_err); @@ -362,16 +364,17 @@ nfsd4_create_file(struct svc_rqst *rqstp, struct svc_fh *fhp, goto out; } - if (d_really_is_negative(child)) { - status = fh_verify(rqstp, fhp, S_IFDIR, NFSD_MAY_CREATE); - if (status != nfs_ok) - goto out; - + if (d_really_is_positive(child)) { + /* No creation needed */ + } else if (create_status) { + status = create_status; + } else { status = nfsd4_vfs_create(fhp, &child, open); - if (status != nfs_ok) - goto out; - open->op_created = open->op_filp->f_mode & FMODE_CREATED; + if (status == nfs_ok) + open->op_created = open->op_filp->f_mode & FMODE_CREATED; } + if (status != nfs_ok) + goto out; status = fh_compose(resfhp, fhp->fh_export, child, fhp); if (status != nfs_ok) -- 2.50.0.107.gf914562f5916.dirty