Skip to content

Commit bd8fdb6

Browse files
committed
NFSD: Modernize nfsd4_release_lockowner()
Refactor: Use existing helpers that other lock operations use. This change removes several automatic variables, so re-organize the variable declarations for readability. Signed-off-by: Chuck Lever <[email protected]>
1 parent ce3c4ad commit bd8fdb6

File tree

1 file changed

+11
-25
lines changed

1 file changed

+11
-25
lines changed

fs/nfsd/nfs4state.c

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7530,47 +7530,33 @@ nfsd4_release_lockowner(struct svc_rqst *rqstp,
75307530
union nfsd4_op_u *u)
75317531
{
75327532
struct nfsd4_release_lockowner *rlockowner = &u->release_lockowner;
7533+
struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
75337534
clientid_t *clid = &rlockowner->rl_clientid;
7534-
struct nfs4_stateowner *sop;
7535-
struct nfs4_lockowner *lo = NULL;
75367535
struct nfs4_ol_stateid *stp;
7537-
struct xdr_netobj *owner = &rlockowner->rl_owner;
7538-
unsigned int hashval = ownerstr_hashval(owner);
7539-
__be32 status;
7540-
struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
7536+
struct nfs4_lockowner *lo;
75417537
struct nfs4_client *clp;
7542-
LIST_HEAD (reaplist);
7538+
LIST_HEAD(reaplist);
7539+
__be32 status;
75437540

75447541
dprintk("nfsd4_release_lockowner clientid: (%08x/%08x):\n",
75457542
clid->cl_boot, clid->cl_id);
75467543

75477544
status = set_client(clid, cstate, nn);
75487545
if (status)
75497546
return status;
7550-
75517547
clp = cstate->clp;
7552-
/* Find the matching lock stateowner */
7553-
spin_lock(&clp->cl_lock);
7554-
list_for_each_entry(sop, &clp->cl_ownerstr_hashtbl[hashval],
7555-
so_strhash) {
75567548

7557-
if (sop->so_is_open_owner || !same_owner_str(sop, owner))
7558-
continue;
7559-
7560-
if (atomic_read(&sop->so_count) != 1) {
7561-
spin_unlock(&clp->cl_lock);
7562-
return nfserr_locks_held;
7563-
}
7564-
7565-
lo = lockowner(sop);
7566-
nfs4_get_stateowner(sop);
7567-
break;
7568-
}
7549+
spin_lock(&clp->cl_lock);
7550+
lo = find_lockowner_str_locked(clp, &rlockowner->rl_owner);
75697551
if (!lo) {
75707552
spin_unlock(&clp->cl_lock);
75717553
return status;
75727554
}
7573-
7555+
if (atomic_read(&lo->lo_owner.so_count) != 2) {
7556+
spin_unlock(&clp->cl_lock);
7557+
nfs4_put_stateowner(&lo->lo_owner);
7558+
return nfserr_locks_held;
7559+
}
75747560
unhash_lockowner_locked(lo);
75757561
while (!list_empty(&lo->lo_owner.so_stateids)) {
75767562
stp = list_first_entry(&lo->lo_owner.so_stateids,

0 commit comments

Comments
 (0)