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:
parent
0bee545e91
commit
02216cbf28
4 changed files with 258 additions and 65 deletions
|
|
@ -82,9 +82,11 @@ typedef struct __nfs41_server {
|
|||
|
||||
typedef struct __nfs41_delegation_state {
|
||||
open_delegation4 state;
|
||||
nfs41_fh fh;
|
||||
nfs41_abs_path path;
|
||||
nfs41_path_fh file;
|
||||
struct list_entry client_entry; /* entry in nfs41_client.delegations */
|
||||
LONG ref_count;
|
||||
SRWLOCK lock;
|
||||
} nfs41_delegation_state;
|
||||
|
||||
typedef struct __nfs41_lock_state {
|
||||
|
|
@ -119,6 +121,8 @@ typedef struct __nfs41_open_state {
|
|||
|
||||
struct {
|
||||
nfs41_delegation_state *state;
|
||||
bool_t reclaim;
|
||||
CONDITION_VARIABLE cond;
|
||||
} delegation;
|
||||
|
||||
struct { /* list of open lock state for recovery */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue