From nobody Tue Dec 16 16:20:31 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 ACDDA67756; Thu, 25 Jan 2024 10:45:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706179533; cv=none; b=jqMrVxomvpFZPlpN3yD3dr6VzBW0kK2iWJrAcQYUHRRgFnGhyel0j+D7V/WRcL9NZZ9Y1HZ/pB+NPqv6Hg97N1zXCddley1GY3R43EvY2+n6Gti882gD4kV9ThC4rrEYf0sEMBpTE3TtTivFVMKg5y+TdOj9JBt5Zeoqhloc1zE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706179533; c=relaxed/simple; bh=KEGIhG1M9cVNuxbLTEMHAkQB/+mlSZpkhInSOcaicFg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=m9woY5t4WYy6xaX8Pj0ICG2mcss09w+zgYynSgetuPpe4Ga6mX9lG3sz9g4ThT98vyKQSi8rgPKlEnuZ8t49sTN7Yy+uFdsPAE2lXbrHB6H8qShwwJ7iSYllkNXQRTYyzWIapnMglOE/B0b5nib9K/cftxPsgADA+m2l3k7Av5g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bk0lBzeg; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="bk0lBzeg" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 959C3C43142; Thu, 25 Jan 2024 10:45:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1706179533; bh=KEGIhG1M9cVNuxbLTEMHAkQB/+mlSZpkhInSOcaicFg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=bk0lBzeg2OP7ynFxKyDDSfnNppzMbVPTmpIChVI8GFGAjchcQ89GxyzImjj8w2T5r 7JXvIIAt3+3RCYlVOzK26ExNKyjOtbUBbt43I8cEyY3rQvp4mMwSxGru9sRb9ErjEx Bhtt6EsiuKBX0ey0qlKqUrmgKdYVOhrOvg806PweNnvLbBlHAWiq9mVTjpxYc8StO1 TEiMMpdDpoRJRXesXcQMtcB3TPU2t/0YPQPavIHKNbcrXhUmKsPzx3GpxwGooL8QBL 5FjxnfEoPUl+WpRzQlMogtWQh5HQZI8/ZeuY1YGJ51EGzx8fbrBm7jy12Vrj7iPwIK Gl4BCxHzgr5bA== From: Jeff Layton Date: Thu, 25 Jan 2024 05:43:17 -0500 Subject: [PATCH v2 36/41] nfsd: adapt to breakup of struct file_lock Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240125-flsplit-v2-36-7485322b62c7@kernel.org> References: <20240125-flsplit-v2-0-7485322b62c7@kernel.org> In-Reply-To: <20240125-flsplit-v2-0-7485322b62c7@kernel.org> To: Christian Brauner , Alexander Viro , Eric Van Hensbergen , Latchesar Ionkov , Dominique Martinet , Christian Schoenebeck , David Howells , Marc Dionne , Xiubo Li , Ilya Dryomov , Alexander Aring , David Teigland , Miklos Szeredi , Andreas Gruenbacher , Trond Myklebust , Anna Schumaker , Chuck Lever , Neil Brown , Olga Kornievskaia , Dai Ngo , Tom Talpey , Jan Kara , Mark Fasheh , Joel Becker , Joseph Qi , Steve French , Paulo Alcantara , Shyam Prasad N , Namjae Jeon , Sergey Senozhatsky , Steven Rostedt , Masami Hiramatsu , Mathieu Desnoyers , Ronnie Sahlberg Cc: linux-kernel@vger.kernel.org, v9fs@lists.linux.dev, linux-afs@lists.infradead.org, ceph-devel@vger.kernel.org, gfs2@lists.linux.dev, linux-fsdevel@vger.kernel.org, linux-nfs@vger.kernel.org, ocfs2-devel@lists.linux.dev, linux-cifs@vger.kernel.org, linux-trace-kernel@vger.kernel.org, Jeff Layton X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=11733; i=jlayton@kernel.org; h=from:subject:message-id; bh=KEGIhG1M9cVNuxbLTEMHAkQB/+mlSZpkhInSOcaicFg=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBlsjs+wNVTxC3ISSGsT3NEhTs2nH5RzWe4hl7yu Szn8iuPy7uJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZbI7PgAKCRAADmhBGVaC FUm2EACXCXZ22xHzrZYtUU1tpf3IKgt5T6xB5FtLJ7r28Q352NFn9cpeGv7r2jXD3/22pXKbpoH rNLGd1GQLEFTmt81qCEswsogz3xDhEXQZ3Gq8nt4533/OCIB4AGUhx09AX+h3o1Jnen72aUFrK8 qAJSoXJVUmg9msNBTTVPwc6hp+J3bFWvwCuOAr1+yfO6mm+/v25GHmbsyMLFv2JdGRJil3txLdu hmhooueWVaDX8dlefzwosHVhOZ9tBvyvW6J2kyOFGpJZIRVHWs+tIlm5e90SGUCK1oqohrLLTl9 GU8byV/hpGn15Ed1ilPtWkYglAebG4xH6lsUB/fNDpCQliMJSrYrratKt3AJnkPynMvSLQaA0Wa yW1J0Nd2smjq2t1YQaLka0dExupOlnKjDOn7I/3ecWb4PgQ8UW/kpBITfcuKNArsF8p4mABL6u/ rkF50v1OpErveFxSVSpGmKuzTn/swvTKCKG5ZqXkSxt3add6u4FgG1mJVrGqN2rnfT0fK+Gtsxv y9MWlsKICLPxMJGZ7aMMeLdiEvKqQF1kac36SjV0stb3FoWCAQuCutDJJH4n3nZJKgBY57fDSzb YILM1A9sXnHtlt3ffIVOvedxR/U3cdE2nJ6/QGfCyX+MDgj8dUAkCtpjg0sECFk4SjjKDstYUYn Ddnl2mxLdhKuqMQ== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 Most of the existing APIs have remained the same, but subsystems that access file_lock fields directly need to reach into struct file_lock_core now. Signed-off-by: Jeff Layton --- fs/nfsd/filecache.c | 4 +-- fs/nfsd/netns.h | 1 - fs/nfsd/nfs4callback.c | 2 +- fs/nfsd/nfs4layouts.c | 15 +++++----- fs/nfsd/nfs4state.c | 77 +++++++++++++++++++++++++---------------------= ---- 5 files changed, 50 insertions(+), 49 deletions(-) diff --git a/fs/nfsd/filecache.c b/fs/nfsd/filecache.c index 9cb7f0c33df5..cdd36758c692 100644 --- a/fs/nfsd/filecache.c +++ b/fs/nfsd/filecache.c @@ -662,8 +662,8 @@ nfsd_file_lease_notifier_call(struct notifier_block *nb= , unsigned long arg, struct file_lock *fl =3D data; =20 /* Only close files for F_SETLEASE leases */ - if (fl->fl_flags & FL_LEASE) - nfsd_file_close_inode(file_inode(fl->fl_file)); + if (fl->fl_core.flc_flags & FL_LEASE) + nfsd_file_close_inode(file_inode(fl->fl_core.flc_file)); return 0; } =20 diff --git a/fs/nfsd/netns.h b/fs/nfsd/netns.h index fd91125208be..74b4360779a1 100644 --- a/fs/nfsd/netns.h +++ b/fs/nfsd/netns.h @@ -10,7 +10,6 @@ =20 #include #include -#define _NEED_FILE_LOCK_FIELD_MACROS #include #include #include diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index 926c29879c6a..3513c94481b4 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -674,7 +674,7 @@ static void nfs4_xdr_enc_cb_notify_lock(struct rpc_rqst= *req, const struct nfsd4_callback *cb =3D data; const struct nfsd4_blocked_lock *nbl =3D container_of(cb, struct nfsd4_blocked_lock, nbl_cb); - struct nfs4_lockowner *lo =3D (struct nfs4_lockowner *)nbl->nbl_lock.fl_o= wner; + struct nfs4_lockowner *lo =3D (struct nfs4_lockowner *)nbl->nbl_lock.fl_c= ore.flc_owner; struct nfs4_cb_compound_hdr hdr =3D { .ident =3D 0, .minorversion =3D cb->cb_clp->cl_minorversion, diff --git a/fs/nfsd/nfs4layouts.c b/fs/nfsd/nfs4layouts.c index 5e8096bc5eaa..ddf221d31acf 100644 --- a/fs/nfsd/nfs4layouts.c +++ b/fs/nfsd/nfs4layouts.c @@ -193,14 +193,15 @@ nfsd4_layout_setlease(struct nfs4_layout_stateid *ls) return -ENOMEM; locks_init_lock(fl); fl->fl_lmops =3D &nfsd4_layouts_lm_ops; - fl->fl_flags =3D FL_LAYOUT; - fl->fl_type =3D F_RDLCK; + fl->fl_core.flc_flags =3D FL_LAYOUT; + fl->fl_core.flc_type =3D F_RDLCK; fl->fl_end =3D OFFSET_MAX; - fl->fl_owner =3D ls; - fl->fl_pid =3D current->tgid; - fl->fl_file =3D ls->ls_file->nf_file; + fl->fl_core.flc_owner =3D ls; + fl->fl_core.flc_pid =3D current->tgid; + fl->fl_core.flc_file =3D ls->ls_file->nf_file; =20 - status =3D vfs_setlease(fl->fl_file, fl->fl_type, &fl, NULL); + status =3D vfs_setlease(fl->fl_core.flc_file, fl->fl_core.flc_type, &fl, + NULL); if (status) { locks_free_lock(fl); return status; @@ -731,7 +732,7 @@ nfsd4_layout_lm_break(struct file_lock *fl) * in time: */ fl->fl_break_time =3D 0; - nfsd4_recall_file_layout(fl->fl_owner); + nfsd4_recall_file_layout(fl->fl_core.flc_owner); return false; } =20 diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index f66e67394157..5899e5778fe7 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -4924,7 +4924,7 @@ static void nfsd_break_one_deleg(struct nfs4_delegati= on *dp) static bool nfsd_break_deleg_cb(struct file_lock *fl) { - struct nfs4_delegation *dp =3D (struct nfs4_delegation *)fl->fl_owner; + struct nfs4_delegation *dp =3D (struct nfs4_delegation *) fl->fl_core.flc= _owner; struct nfs4_file *fp =3D dp->dl_stid.sc_file; struct nfs4_client *clp =3D dp->dl_stid.sc_client; struct nfsd_net *nn; @@ -4962,7 +4962,7 @@ nfsd_break_deleg_cb(struct file_lock *fl) */ static bool nfsd_breaker_owns_lease(struct file_lock *fl) { - struct nfs4_delegation *dl =3D fl->fl_owner; + struct nfs4_delegation *dl =3D fl->fl_core.flc_owner; struct svc_rqst *rqst; struct nfs4_client *clp; =20 @@ -4980,7 +4980,7 @@ static int nfsd_change_deleg_cb(struct file_lock *onlist, int arg, struct list_head *dispose) { - struct nfs4_delegation *dp =3D (struct nfs4_delegation *)onlist->fl_owner; + struct nfs4_delegation *dp =3D (struct nfs4_delegation *) onlist->fl_core= .flc_owner; struct nfs4_client *clp =3D dp->dl_stid.sc_client; =20 if (arg & F_UNLCK) { @@ -5340,12 +5340,12 @@ static struct file_lock *nfs4_alloc_init_lease(stru= ct nfs4_delegation *dp, if (!fl) return NULL; fl->fl_lmops =3D &nfsd_lease_mng_ops; - fl->fl_flags =3D FL_DELEG; - fl->fl_type =3D flag =3D=3D NFS4_OPEN_DELEGATE_READ? F_RDLCK: F_WRLCK; + fl->fl_core.flc_flags =3D FL_DELEG; + fl->fl_core.flc_type =3D flag =3D=3D NFS4_OPEN_DELEGATE_READ? F_RDLCK: F_= WRLCK; fl->fl_end =3D OFFSET_MAX; - fl->fl_owner =3D (fl_owner_t)dp; - fl->fl_pid =3D current->tgid; - fl->fl_file =3D dp->dl_stid.sc_file->fi_deleg_file->nf_file; + fl->fl_core.flc_owner =3D (fl_owner_t)dp; + fl->fl_core.flc_pid =3D current->tgid; + fl->fl_core.flc_file =3D dp->dl_stid.sc_file->fi_deleg_file->nf_file; return fl; } =20 @@ -5533,7 +5533,8 @@ nfs4_set_delegation(struct nfsd4_open *open, struct n= fs4_ol_stateid *stp, if (!fl) goto out_clnt_odstate; =20 - status =3D vfs_setlease(fp->fi_deleg_file->nf_file, fl->fl_type, &fl, NUL= L); + status =3D vfs_setlease(fp->fi_deleg_file->nf_file, + fl->fl_core.flc_type, &fl, NULL); if (fl) locks_free_lock(fl); if (status) @@ -7149,7 +7150,7 @@ nfsd4_lm_put_owner(fl_owner_t owner) static bool nfsd4_lm_lock_expirable(struct file_lock *cfl) { - struct nfs4_lockowner *lo =3D (struct nfs4_lockowner *)cfl->fl_owner; + struct nfs4_lockowner *lo =3D (struct nfs4_lockowner *) cfl->fl_core.flc_= owner; struct nfs4_client *clp =3D lo->lo_owner.so_client; struct nfsd_net *nn; =20 @@ -7171,7 +7172,7 @@ nfsd4_lm_expire_lock(void) static void nfsd4_lm_notify(struct file_lock *fl) { - struct nfs4_lockowner *lo =3D (struct nfs4_lockowner *)fl->fl_owner; + struct nfs4_lockowner *lo =3D (struct nfs4_lockowner *) fl->fl_core.flc_= owner; struct net *net =3D lo->lo_owner.so_client->net; struct nfsd_net *nn =3D net_generic(net, nfsd_net_id); struct nfsd4_blocked_lock *nbl =3D container_of(fl, @@ -7208,7 +7209,7 @@ nfs4_set_lock_denied(struct file_lock *fl, struct nfs= d4_lock_denied *deny) struct nfs4_lockowner *lo; =20 if (fl->fl_lmops =3D=3D &nfsd_posix_mng_ops) { - lo =3D (struct nfs4_lockowner *) fl->fl_owner; + lo =3D (struct nfs4_lockowner *) fl->fl_core.flc_owner; xdr_netobj_dup(&deny->ld_owner, &lo->lo_owner.so_owner, GFP_KERNEL); if (!deny->ld_owner.data) @@ -7227,7 +7228,7 @@ nfs4_set_lock_denied(struct file_lock *fl, struct nfs= d4_lock_denied *deny) if (fl->fl_end !=3D NFS4_MAX_UINT64) deny->ld_length =3D fl->fl_end - fl->fl_start + 1; =20 deny->ld_type =3D NFS4_READ_LT; - if (fl->fl_type !=3D F_RDLCK) + if (fl->fl_core.flc_type !=3D F_RDLCK) deny->ld_type =3D NFS4_WRITE_LT; } =20 @@ -7615,11 +7616,11 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_com= pound_state *cstate, } =20 file_lock =3D &nbl->nbl_lock; - file_lock->fl_type =3D type; - file_lock->fl_owner =3D (fl_owner_t)lockowner(nfs4_get_stateowner(&lock_s= op->lo_owner)); - file_lock->fl_pid =3D current->tgid; - file_lock->fl_file =3D nf->nf_file; - file_lock->fl_flags =3D flags; + file_lock->fl_core.flc_type =3D type; + file_lock->fl_core.flc_owner =3D (fl_owner_t)lockowner(nfs4_get_stateowne= r(&lock_sop->lo_owner)); + file_lock->fl_core.flc_pid =3D current->tgid; + file_lock->fl_core.flc_file =3D nf->nf_file; + file_lock->fl_core.flc_flags =3D flags; file_lock->fl_lmops =3D &nfsd_posix_mng_ops; file_lock->fl_start =3D lock->lk_offset; file_lock->fl_end =3D last_byte_offset(lock->lk_offset, lock->lk_length); @@ -7737,9 +7738,9 @@ static __be32 nfsd_test_lock(struct svc_rqst *rqstp, = struct svc_fh *fhp, struct err =3D nfserrno(nfsd_open_break_lease(inode, NFSD_MAY_READ)); if (err) goto out; - lock->fl_file =3D nf->nf_file; + lock->fl_core.flc_file =3D nf->nf_file; err =3D nfserrno(vfs_test_lock(nf->nf_file, lock)); - lock->fl_file =3D NULL; + lock->fl_core.flc_file =3D NULL; out: inode_unlock(inode); nfsd_file_put(nf); @@ -7784,11 +7785,11 @@ nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_co= mpound_state *cstate, switch (lockt->lt_type) { case NFS4_READ_LT: case NFS4_READW_LT: - file_lock->fl_type =3D F_RDLCK; + file_lock->fl_core.flc_type =3D F_RDLCK; break; case NFS4_WRITE_LT: case NFS4_WRITEW_LT: - file_lock->fl_type =3D F_WRLCK; + file_lock->fl_core.flc_type =3D F_WRLCK; break; default: dprintk("NFSD: nfs4_lockt: bad lock type!\n"); @@ -7798,9 +7799,9 @@ nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_comp= ound_state *cstate, =20 lo =3D find_lockowner_str(cstate->clp, &lockt->lt_owner); if (lo) - file_lock->fl_owner =3D (fl_owner_t)lo; - file_lock->fl_pid =3D current->tgid; - file_lock->fl_flags =3D FL_POSIX; + file_lock->fl_core.flc_owner =3D (fl_owner_t)lo; + file_lock->fl_core.flc_pid =3D current->tgid; + file_lock->fl_core.flc_flags =3D FL_POSIX; =20 file_lock->fl_start =3D lockt->lt_offset; file_lock->fl_end =3D last_byte_offset(lockt->lt_offset, lockt->lt_length= ); @@ -7811,7 +7812,7 @@ nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_comp= ound_state *cstate, if (status) goto out; =20 - if (file_lock->fl_type !=3D F_UNLCK) { + if (file_lock->fl_core.flc_type !=3D F_UNLCK) { status =3D nfserr_denied; nfs4_set_lock_denied(file_lock, &lockt->lt_denied); } @@ -7867,11 +7868,11 @@ nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_co= mpound_state *cstate, goto put_file; } =20 - file_lock->fl_type =3D F_UNLCK; - file_lock->fl_owner =3D (fl_owner_t)lockowner(nfs4_get_stateowner(stp->st= _stateowner)); - file_lock->fl_pid =3D current->tgid; - file_lock->fl_file =3D nf->nf_file; - file_lock->fl_flags =3D FL_POSIX; + file_lock->fl_core.flc_type =3D F_UNLCK; + file_lock->fl_core.flc_owner =3D (fl_owner_t)lockowner(nfs4_get_stateowne= r(stp->st_stateowner)); + file_lock->fl_core.flc_pid =3D current->tgid; + file_lock->fl_core.flc_file =3D nf->nf_file; + file_lock->fl_core.flc_flags =3D FL_POSIX; file_lock->fl_lmops =3D &nfsd_posix_mng_ops; file_lock->fl_start =3D locku->lu_offset; =20 @@ -7926,8 +7927,8 @@ check_for_locks(struct nfs4_file *fp, struct nfs4_loc= kowner *lowner) =20 if (flctx && !list_empty_careful(&flctx->flc_posix)) { spin_lock(&flctx->flc_lock); - list_for_each_entry(fl, &flctx->flc_posix, fl_list) { - if (fl->fl_owner =3D=3D (fl_owner_t)lowner) { + list_for_each_entry(fl, &flctx->flc_posix, fl_core.flc_list) { + if (fl->fl_core.flc_owner =3D=3D (fl_owner_t)lowner) { status =3D true; break; } @@ -8455,8 +8456,8 @@ nfsd4_deleg_getattr_conflict(struct svc_rqst *rqstp, = struct inode *inode) if (!ctx) return 0; spin_lock(&ctx->flc_lock); - list_for_each_entry(fl, &ctx->flc_lease, fl_list) { - if (fl->fl_flags =3D=3D FL_LAYOUT) + list_for_each_entry(fl, &ctx->flc_lease, fl_core.flc_list) { + if (fl->fl_core.flc_flags =3D=3D FL_LAYOUT) continue; if (fl->fl_lmops !=3D &nfsd_lease_mng_ops) { /* @@ -8464,12 +8465,12 @@ nfsd4_deleg_getattr_conflict(struct svc_rqst *rqstp= , struct inode *inode) * we are done; there isn't any write delegation * on this inode */ - if (fl->fl_type =3D=3D F_RDLCK) + if (fl->fl_core.flc_type =3D=3D F_RDLCK) break; goto break_lease; } - if (fl->fl_type =3D=3D F_WRLCK) { - dp =3D fl->fl_owner; + if (fl->fl_core.flc_type =3D=3D F_WRLCK) { + dp =3D fl->fl_core.flc_owner; if (dp->dl_recall.cb_clp =3D=3D *(rqstp->rq_lease_breaker)) { spin_unlock(&ctx->flc_lock); return 0; --=20 2.43.0