Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

nfsd: adapt to breakup of struct file_lock

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 <jlayton@kernel.org>
Link: https://lore.kernel.org/r/20240131-flsplit-v3-42-c6129007ee8d@kernel.org
Reviewed-by: NeilBrown <neilb@suse.de>
Signed-off-by: Christian Brauner <brauner@kernel.org>

authored by

Jeff Layton and committed by
Christian Brauner
05580bbf dd1fac6a

+46 -45
+2 -2
fs/nfsd/filecache.c
··· 662 662 struct file_lock *fl = data; 663 663 664 664 /* Only close files for F_SETLEASE leases */ 665 - if (fl->fl_flags & FL_LEASE) 666 - nfsd_file_close_inode(file_inode(fl->fl_file)); 665 + if (fl->c.flc_flags & FL_LEASE) 666 + nfsd_file_close_inode(file_inode(fl->c.flc_file)); 667 667 return 0; 668 668 } 669 669
-1
fs/nfsd/netns.h
··· 10 10 11 11 #include <net/net_namespace.h> 12 12 #include <net/netns/generic.h> 13 - #define _NEED_FILE_LOCK_FIELD_MACROS 14 13 #include <linux/filelock.h> 15 14 #include <linux/percpu_counter.h> 16 15 #include <linux/siphash.h>
+1 -1
fs/nfsd/nfs4callback.c
··· 674 674 const struct nfsd4_callback *cb = data; 675 675 const struct nfsd4_blocked_lock *nbl = 676 676 container_of(cb, struct nfsd4_blocked_lock, nbl_cb); 677 - struct nfs4_lockowner *lo = (struct nfs4_lockowner *)nbl->nbl_lock.fl_owner; 677 + struct nfs4_lockowner *lo = (struct nfs4_lockowner *)nbl->nbl_lock.c.flc_owner; 678 678 struct nfs4_cb_compound_hdr hdr = { 679 679 .ident = 0, 680 680 .minorversion = cb->cb_clp->cl_minorversion,
+8 -7
fs/nfsd/nfs4layouts.c
··· 193 193 return -ENOMEM; 194 194 locks_init_lock(fl); 195 195 fl->fl_lmops = &nfsd4_layouts_lm_ops; 196 - fl->fl_flags = FL_LAYOUT; 197 - fl->fl_type = F_RDLCK; 196 + fl->c.flc_flags = FL_LAYOUT; 197 + fl->c.flc_type = F_RDLCK; 198 198 fl->fl_end = OFFSET_MAX; 199 - fl->fl_owner = ls; 200 - fl->fl_pid = current->tgid; 201 - fl->fl_file = ls->ls_file->nf_file; 199 + fl->c.flc_owner = ls; 200 + fl->c.flc_pid = current->tgid; 201 + fl->c.flc_file = ls->ls_file->nf_file; 202 202 203 - status = vfs_setlease(fl->fl_file, fl->fl_type, &fl, NULL); 203 + status = vfs_setlease(fl->c.flc_file, fl->c.flc_type, &fl, 204 + NULL); 204 205 if (status) { 205 206 locks_free_lock(fl); 206 207 return status; ··· 732 731 * in time: 733 732 */ 734 733 fl->fl_break_time = 0; 735 - nfsd4_recall_file_layout(fl->fl_owner); 734 + nfsd4_recall_file_layout(fl->c.flc_owner); 736 735 return false; 737 736 } 738 737
+35 -34
fs/nfsd/nfs4state.c
··· 4924 4924 static bool 4925 4925 nfsd_break_deleg_cb(struct file_lock *fl) 4926 4926 { 4927 - struct nfs4_delegation *dp = (struct nfs4_delegation *)fl->fl_owner; 4927 + struct nfs4_delegation *dp = (struct nfs4_delegation *) fl->c.flc_owner; 4928 4928 struct nfs4_file *fp = dp->dl_stid.sc_file; 4929 4929 struct nfs4_client *clp = dp->dl_stid.sc_client; 4930 4930 struct nfsd_net *nn; ··· 4962 4962 */ 4963 4963 static bool nfsd_breaker_owns_lease(struct file_lock *fl) 4964 4964 { 4965 - struct nfs4_delegation *dl = fl->fl_owner; 4965 + struct nfs4_delegation *dl = fl->c.flc_owner; 4966 4966 struct svc_rqst *rqst; 4967 4967 struct nfs4_client *clp; 4968 4968 ··· 4980 4980 nfsd_change_deleg_cb(struct file_lock *onlist, int arg, 4981 4981 struct list_head *dispose) 4982 4982 { 4983 - struct nfs4_delegation *dp = (struct nfs4_delegation *)onlist->fl_owner; 4983 + struct nfs4_delegation *dp = (struct nfs4_delegation *) onlist->c.flc_owner; 4984 4984 struct nfs4_client *clp = dp->dl_stid.sc_client; 4985 4985 4986 4986 if (arg & F_UNLCK) { ··· 5340 5340 if (!fl) 5341 5341 return NULL; 5342 5342 fl->fl_lmops = &nfsd_lease_mng_ops; 5343 - fl->fl_flags = FL_DELEG; 5344 - fl->fl_type = flag == NFS4_OPEN_DELEGATE_READ? F_RDLCK: F_WRLCK; 5343 + fl->c.flc_flags = FL_DELEG; 5344 + fl->c.flc_type = flag == NFS4_OPEN_DELEGATE_READ? F_RDLCK: F_WRLCK; 5345 5345 fl->fl_end = OFFSET_MAX; 5346 - fl->fl_owner = (fl_owner_t)dp; 5347 - fl->fl_pid = current->tgid; 5348 - fl->fl_file = dp->dl_stid.sc_file->fi_deleg_file->nf_file; 5346 + fl->c.flc_owner = (fl_owner_t)dp; 5347 + fl->c.flc_pid = current->tgid; 5348 + fl->c.flc_file = dp->dl_stid.sc_file->fi_deleg_file->nf_file; 5349 5349 return fl; 5350 5350 } 5351 5351 ··· 5533 5533 if (!fl) 5534 5534 goto out_clnt_odstate; 5535 5535 5536 - status = vfs_setlease(fp->fi_deleg_file->nf_file, fl->fl_type, &fl, NULL); 5536 + status = vfs_setlease(fp->fi_deleg_file->nf_file, 5537 + fl->c.flc_type, &fl, NULL); 5537 5538 if (fl) 5538 5539 locks_free_lock(fl); 5539 5540 if (status) ··· 7150 7149 static bool 7151 7150 nfsd4_lm_lock_expirable(struct file_lock *cfl) 7152 7151 { 7153 - struct nfs4_lockowner *lo = (struct nfs4_lockowner *)cfl->fl_owner; 7152 + struct nfs4_lockowner *lo = (struct nfs4_lockowner *) cfl->c.flc_owner; 7154 7153 struct nfs4_client *clp = lo->lo_owner.so_client; 7155 7154 struct nfsd_net *nn; 7156 7155 ··· 7172 7171 static void 7173 7172 nfsd4_lm_notify(struct file_lock *fl) 7174 7173 { 7175 - struct nfs4_lockowner *lo = (struct nfs4_lockowner *)fl->fl_owner; 7174 + struct nfs4_lockowner *lo = (struct nfs4_lockowner *) fl->c.flc_owner; 7176 7175 struct net *net = lo->lo_owner.so_client->net; 7177 7176 struct nfsd_net *nn = net_generic(net, nfsd_net_id); 7178 7177 struct nfsd4_blocked_lock *nbl = container_of(fl, ··· 7209 7208 struct nfs4_lockowner *lo; 7210 7209 7211 7210 if (fl->fl_lmops == &nfsd_posix_mng_ops) { 7212 - lo = (struct nfs4_lockowner *) fl->fl_owner; 7211 + lo = (struct nfs4_lockowner *) fl->c.flc_owner; 7213 7212 xdr_netobj_dup(&deny->ld_owner, &lo->lo_owner.so_owner, 7214 7213 GFP_KERNEL); 7215 7214 if (!deny->ld_owner.data) ··· 7228 7227 if (fl->fl_end != NFS4_MAX_UINT64) 7229 7228 deny->ld_length = fl->fl_end - fl->fl_start + 1; 7230 7229 deny->ld_type = NFS4_READ_LT; 7231 - if (fl->fl_type != F_RDLCK) 7230 + if (fl->c.flc_type != F_RDLCK) 7232 7231 deny->ld_type = NFS4_WRITE_LT; 7233 7232 } 7234 7233 ··· 7616 7615 } 7617 7616 7618 7617 file_lock = &nbl->nbl_lock; 7619 - file_lock->fl_type = type; 7620 - file_lock->fl_owner = (fl_owner_t)lockowner(nfs4_get_stateowner(&lock_sop->lo_owner)); 7621 - file_lock->fl_pid = current->tgid; 7622 - file_lock->fl_file = nf->nf_file; 7623 - file_lock->fl_flags = flags; 7618 + file_lock->c.flc_type = type; 7619 + file_lock->c.flc_owner = (fl_owner_t)lockowner(nfs4_get_stateowner(&lock_sop->lo_owner)); 7620 + file_lock->c.flc_pid = current->tgid; 7621 + file_lock->c.flc_file = nf->nf_file; 7622 + file_lock->c.flc_flags = flags; 7624 7623 file_lock->fl_lmops = &nfsd_posix_mng_ops; 7625 7624 file_lock->fl_start = lock->lk_offset; 7626 7625 file_lock->fl_end = last_byte_offset(lock->lk_offset, lock->lk_length); ··· 7738 7737 err = nfserrno(nfsd_open_break_lease(inode, NFSD_MAY_READ)); 7739 7738 if (err) 7740 7739 goto out; 7741 - lock->fl_file = nf->nf_file; 7740 + lock->c.flc_file = nf->nf_file; 7742 7741 err = nfserrno(vfs_test_lock(nf->nf_file, lock)); 7743 - lock->fl_file = NULL; 7742 + lock->c.flc_file = NULL; 7744 7743 out: 7745 7744 inode_unlock(inode); 7746 7745 nfsd_file_put(nf); ··· 7785 7784 switch (lockt->lt_type) { 7786 7785 case NFS4_READ_LT: 7787 7786 case NFS4_READW_LT: 7788 - file_lock->fl_type = F_RDLCK; 7787 + file_lock->c.flc_type = F_RDLCK; 7789 7788 break; 7790 7789 case NFS4_WRITE_LT: 7791 7790 case NFS4_WRITEW_LT: 7792 - file_lock->fl_type = F_WRLCK; 7791 + file_lock->c.flc_type = F_WRLCK; 7793 7792 break; 7794 7793 default: 7795 7794 dprintk("NFSD: nfs4_lockt: bad lock type!\n"); ··· 7799 7798 7800 7799 lo = find_lockowner_str(cstate->clp, &lockt->lt_owner); 7801 7800 if (lo) 7802 - file_lock->fl_owner = (fl_owner_t)lo; 7803 - file_lock->fl_pid = current->tgid; 7804 - file_lock->fl_flags = FL_POSIX; 7801 + file_lock->c.flc_owner = (fl_owner_t)lo; 7802 + file_lock->c.flc_pid = current->tgid; 7803 + file_lock->c.flc_flags = FL_POSIX; 7805 7804 7806 7805 file_lock->fl_start = lockt->lt_offset; 7807 7806 file_lock->fl_end = last_byte_offset(lockt->lt_offset, lockt->lt_length); ··· 7812 7811 if (status) 7813 7812 goto out; 7814 7813 7815 - if (file_lock->fl_type != F_UNLCK) { 7814 + if (file_lock->c.flc_type != F_UNLCK) { 7816 7815 status = nfserr_denied; 7817 7816 nfs4_set_lock_denied(file_lock, &lockt->lt_denied); 7818 7817 } ··· 7868 7867 goto put_file; 7869 7868 } 7870 7869 7871 - file_lock->fl_type = F_UNLCK; 7872 - file_lock->fl_owner = (fl_owner_t)lockowner(nfs4_get_stateowner(stp->st_stateowner)); 7873 - file_lock->fl_pid = current->tgid; 7874 - file_lock->fl_file = nf->nf_file; 7875 - file_lock->fl_flags = FL_POSIX; 7870 + file_lock->c.flc_type = F_UNLCK; 7871 + file_lock->c.flc_owner = (fl_owner_t)lockowner(nfs4_get_stateowner(stp->st_stateowner)); 7872 + file_lock->c.flc_pid = current->tgid; 7873 + file_lock->c.flc_file = nf->nf_file; 7874 + file_lock->c.flc_flags = FL_POSIX; 7876 7875 file_lock->fl_lmops = &nfsd_posix_mng_ops; 7877 7876 file_lock->fl_start = locku->lu_offset; 7878 7877 ··· 7928 7927 if (flctx && !list_empty_careful(&flctx->flc_posix)) { 7929 7928 spin_lock(&flctx->flc_lock); 7930 7929 for_each_file_lock(fl, &flctx->flc_posix) { 7931 - if (fl->fl_owner == (fl_owner_t)lowner) { 7930 + if (fl->c.flc_owner == (fl_owner_t)lowner) { 7932 7931 status = true; 7933 7932 break; 7934 7933 } ··· 8457 8456 return 0; 8458 8457 spin_lock(&ctx->flc_lock); 8459 8458 for_each_file_lock(fl, &ctx->flc_lease) { 8460 - if (fl->fl_flags == FL_LAYOUT) 8459 + if (fl->c.flc_flags == FL_LAYOUT) 8461 8460 continue; 8462 8461 if (fl->fl_lmops != &nfsd_lease_mng_ops) { 8463 8462 /* ··· 8470 8469 goto break_lease; 8471 8470 } 8472 8471 if (lock_is_write(fl)) { 8473 - dp = fl->fl_owner; 8472 + dp = fl->c.flc_owner; 8474 8473 if (dp->dl_recall.cb_clp == *(rqstp->rq_lease_breaker)) { 8475 8474 spin_unlock(&ctx->flc_lock); 8476 8475 return 0;