deleg: return delegation on CB_RECALL

moved thread creation from callback_server.c to nfs41_delegation_recall() in delegation.c

nfs41_delegation_recall() first searches for the delegation, and returns NFS4ERR_BADHANDLE if not found.  otherwise, it spawns a thread to handle the recall and returns NFS4_OK

delegation_return() calls nfs41_delegation_to_open() for each nfs41_open_state associated with the delegation

nfs41_delegation_to_open() sends OPEN with CLAIM_DELEGATE_CUR to reclaim an open stateid, and uses a condition variable in nfs41_open_state to prevent multiple threads from attempting reclaim

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
This commit is contained in:
Casey Bodley 2011-07-06 13:41:59 -04:00 committed by unknown
parent 0bee545e91
commit 02216cbf28
4 changed files with 258 additions and 65 deletions

View file

@ -54,4 +54,16 @@ int nfs41_delegate_open(
OUT nfs41_delegation_state **deleg_out,
OUT nfs41_file_info *info);
int nfs41_delegation_to_open(
IN nfs41_open_state *open,
IN bool_t try_recovery);
/* asynchronous delegation recall */
int nfs41_delegation_recall(
IN nfs41_client *client,
IN nfs41_fh *fh,
IN const stateid4 *stateid,
IN bool_t truncate);
#endif /* DELEGATION_H */