blob: b9e8ab0b3aa37661cff02469155547ac0caa0c90 [file] [log] [blame]
/*
* Copyright IBM Corporation, 2010
* Contributor: Aneesh Kumar K.v <aneesh.kumar@linux.vnet.ibm.com>
*
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* ---------------------------------------
*
*
*/
#ifndef NLM_UTIL_H
#define NLM_UTIL_H
#include "gsh_list.h"
#include "nlm4.h"
#include "sal_data.h"
extern const char *lock_result_str(int rc);
extern void copy_netobj(netobj *dst, netobj *src);
extern void netobj_free(netobj *obj);
extern void netobj_to_string(netobj *obj, char *buffer, int maxlen);
/**
* process_nlm_parameters: Process NLM parameters
*
* Returns -1 for a request that needs processing, otherwise returns an NLM
* status
*
* preq: passed in so interface doesn't need to change when NLM Client
* uses IP address
* exclusive: TRUE if lock is a write lock
* alock: nlm4_lock request structure
* plock: cache_lock_desc_t to fill in from alock
* ppobj: FSAL obj pointer to fill in
* pexport: the export of interest
* pclient: cache inode client
* care: TRUE if this caller cares if an owner is found (otherwise
* return NLM4_GRANTED
* because the caller will have nothing to do)
* ppnlm_client: NLM Client to fill in, returns a reference to the client
* ppowner: NLM Owner to fill in, returns a reference to the owner
* ppblock_data: Data required to make a call back to the client to grant a
* blocked lock
*/
int nlm_process_parameters(struct svc_req *req, bool exclusive,
nlm4_lock *alock, fsal_lock_param_t *plock,
struct fsal_obj_handle **ppobj,
care_t care, state_nsm_client_t **ppnsm_client,
state_nlm_client_t **ppnlm_client,
state_owner_t **ppowner,
state_block_data_t **block_data,
bool nsm_state_applies,
int32_t nsm_state,
state_t **state);
int nlm_process_share_parms(struct svc_req *req, nlm4_share *share,
struct fsal_export *exp_hdl,
struct fsal_obj_handle **ppobj, care_t care,
state_nsm_client_t **ppnsm_client,
state_nlm_client_t **ppnlm_client,
state_owner_t **ppowner,
state_t **state);
void nlm_process_conflict(nlm4_holder *nlm_holder, state_owner_t *holder,
fsal_lock_param_t *conflict);
nlm4_stats nlm_convert_state_error(state_status_t status);
state_status_t nlm_granted_callback(struct fsal_obj_handle *obj,
state_lock_entry_t *lock_entry);
#endif /* NLM_UTIL_H */