Commit 043862b0 authored by Chuck Lever's avatar Chuck Lever
Browse files

NFSD: Add documenting comment for nfsd4_release_lockowner()



And return explicit nfserr values that match what is documented in the
new comment / API contract.

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent bd8fdb6e
Loading
Loading
Loading
Loading
+20 −3
Original line number Diff line number Diff line
@@ -7524,6 +7524,23 @@ check_for_locks(struct nfs4_file *fp, struct nfs4_lockowner *lowner)
	return status;
}

/**
 * nfsd4_release_lockowner - process NFSv4.0 RELEASE_LOCKOWNER operations
 * @rqstp: RPC transaction
 * @cstate: NFSv4 COMPOUND state
 * @u: RELEASE_LOCKOWNER arguments
 *
 * The lockowner's so_count is bumped when a lock record is added
 * or when copying a conflicting lock. The latter case is brief,
 * but can lead to fleeting false positives when looking for
 * locks-in-use.
 *
 * Return values:
 *   %nfs_ok: lockowner released or not found
 *   %nfserr_locks_held: lockowner still in use
 *   %nfserr_stale_clientid: clientid no longer active
 *   %nfserr_expired: clientid not recognized
 */
__be32
nfsd4_release_lockowner(struct svc_rqst *rqstp,
			struct nfsd4_compound_state *cstate,
@@ -7550,7 +7567,7 @@ nfsd4_release_lockowner(struct svc_rqst *rqstp,
	lo = find_lockowner_str_locked(clp, &rlockowner->rl_owner);
	if (!lo) {
		spin_unlock(&clp->cl_lock);
		return status;
		return nfs_ok;
	}
	if (atomic_read(&lo->lo_owner.so_count) != 2) {
		spin_unlock(&clp->cl_lock);
@@ -7566,11 +7583,11 @@ nfsd4_release_lockowner(struct svc_rqst *rqstp,
		put_ol_stateid_locked(stp, &reaplist);
	}
	spin_unlock(&clp->cl_lock);

	free_ol_stateid_reaplist(&reaplist);
	remove_blocked_locks(lo);
	nfs4_put_stateowner(&lo->lo_owner);

	return status;
	return nfs_ok;
}

static inline struct nfs4_client_reclaim *