{
struct nfs4_state *state = calldata->state;
struct nfs4_state_owner *sp = state->owner;
- struct nfs_server *server = NFS_SERVER(calldata->inode);
nfs4_put_open_state(calldata->state);
nfs_free_seqid(calldata->arg.seqid);
nfs4_put_state_owner(sp);
- up_read(&server->nfs4_state->cl_sem);
kfree(calldata);
}
{
struct inode *inode = state->inode;
struct nfs_server *server = NFS_SERVER(inode);
- struct nfs4_client *clp = server->nfs4_state;
struct nfs_lockargs arg = {
.fh = NFS_FH(inode),
.type = nfs4_lck_type(cmd, request),
struct nfs_locku_opargs luargs;
int status;
- down_read(&clp->cl_sem);
status = nfs4_set_lock_state(state, request);
if (status != 0)
goto out;
out:
if (status == 0)
do_vfs_lock(request->fl_file, request);
- up_read(&clp->cl_sem);
return status;
}
}
/*
- * Beware! Caller must be holding no references to clp->cl_sem!
+ * Close the current file.
*/
void nfs4_close_state(struct nfs4_state *state, mode_t mode)
{
struct inode *inode = state->inode;
struct nfs4_state_owner *owner = state->owner;
- struct nfs4_client *clp = owner->so_client;
int newstate;
atomic_inc(&owner->so_count);
- down_read(&clp->cl_sem);
/* Protect against nfs4_find_state() */
spin_lock(&inode->i_lock);
if (mode & FMODE_READ)
out:
nfs4_put_open_state(state);
nfs4_put_state_owner(owner);
- up_read(&clp->cl_sem);
}
/*
}
/*
- * Called with clp->cl_sem held.
- *
* Increment the seqid if the OPEN/OPEN_DOWNGRADE/CLOSE succeeded, or
* failed with a seqid incrementing error -
* see comments nfs_fs.h:seqid_mutating_error()
}
/*
- * Called with clp->cl_sem held.
- *
* Increment the seqid if the LOCK/LOCKU succeeded, or
* failed with a seqid incrementing error -
* see comments nfs_fs.h:seqid_mutating_error()