int nfs4_op_reclaim_complete(struct nfs_argop4 *op, compound_data_t *data,
			     struct nfs_resop4 *resp)
{
	RECLAIM_COMPLETE4args * const arg_RECLAIM_COMPLETE4
	    __attribute__ ((unused))
	    = &op->nfs_argop4_u.opreclaim_complete;
	RECLAIM_COMPLETE4res * const res_RECLAIM_COMPLETE4 =
	    &resp->nfs_resop4_u.opreclaim_complete;
	nfs_client_id_t	*clientid = data->session->clientid_record;

	resp->resop = NFS4_OP_RECLAIM_COMPLETE;

	res_RECLAIM_COMPLETE4->rcr_status = NFS4_OK;

	if (data->minorversion == 0) {
		res_RECLAIM_COMPLETE4->rcr_status = NFS4ERR_INVAL;
		return res_RECLAIM_COMPLETE4->rcr_status;
	}

	if (data->session == NULL) {
		res_RECLAIM_COMPLETE4->rcr_status = NFS4ERR_OP_NOT_IN_SESSION;
		return res_RECLAIM_COMPLETE4->rcr_status;
	}

	/* For now, we don't handle rca_one_fs, so we won't complain about
	 * complete already for it.
	 */
	if (clientid->cid_cb.v41.cid_reclaim_complete &&
	    !arg_RECLAIM_COMPLETE4->rca_one_fs) {
		res_RECLAIM_COMPLETE4->rcr_status = NFS4ERR_COMPLETE_ALREADY;
		return res_RECLAIM_COMPLETE4->rcr_status;
	}

	if (!arg_RECLAIM_COMPLETE4->rca_one_fs) {
		clientid->cid_cb.v41.cid_reclaim_complete = true;
		if (clientid->cid_allow_reclaim)
			atomic_inc_int32_t(&reclaim_completes);
	}

	return res_RECLAIM_COMPLETE4->rcr_status;
}				/* nfs41_op_reclaim_complete */
int32_t inc_session_ref(nfs41_session_t *session)
{
    int32_t refcnt = atomic_inc_int32_t(&session->refcount);
    return refcnt;
}
Example #3
0
void inc_nlm_client_ref(state_nlm_client_t *pclient)
{
  atomic_inc_int32_t(&pclient->slc_refcount);
}
Example #4
0
/**
 * @brief Take a reference on NSM client
 *
 * @param[in] client The client to ref
 */
void inc_nsm_client_ref(state_nsm_client_t *client)
{
	atomic_inc_int32_t(&client->ssc_refcount);
}
Example #5
0
/**
 * @brief Take a reference on an NLM client
 *
 * @param[in] client Client to reference
 */
void inc_nlm_client_ref(state_nlm_client_t *client)
{
	(void) atomic_inc_int32_t(&client->slc_refcount);
}