nfsd4: allow restarting callbacks
If we lose the backchannel and then the client repairs the problem, resend any callbacks. We use a new cb_done flag to track whether there is still work to be done for the callback or whether it can be destroyed with the rpc. Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
@@ -68,10 +68,12 @@ typedef struct {
|
||||
struct nfsd4_callback {
|
||||
void *cb_op;
|
||||
struct nfs4_client *cb_clp;
|
||||
struct list_head cb_per_client;
|
||||
u32 cb_minorversion;
|
||||
struct rpc_message cb_msg;
|
||||
const struct rpc_call_ops *cb_ops;
|
||||
struct work_struct cb_work;
|
||||
bool cb_done;
|
||||
};
|
||||
|
||||
struct nfs4_delegation {
|
||||
@@ -248,6 +250,7 @@ struct nfs4_client {
|
||||
int cl_cb_state;
|
||||
struct nfsd4_callback cl_cb_null;
|
||||
struct nfsd4_session *cl_cb_session;
|
||||
struct list_head cl_callbacks; /* list of in-progress callbacks */
|
||||
|
||||
/* for all client information that callback code might need: */
|
||||
spinlock_t cl_lock;
|
||||
|
Reference in New Issue
Block a user