summaryrefslogtreecommitdiffstats
path: root/xlators/nfs/lib/src/rpcsvc.h
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/nfs/lib/src/rpcsvc.h')
-rw-r--r--xlators/nfs/lib/src/rpcsvc.h12
1 files changed, 7 insertions, 5 deletions
diff --git a/xlators/nfs/lib/src/rpcsvc.h b/xlators/nfs/lib/src/rpcsvc.h
index 5a669cf83df..300111de5e0 100644
--- a/xlators/nfs/lib/src/rpcsvc.h
+++ b/xlators/nfs/lib/src/rpcsvc.h
@@ -244,9 +244,6 @@ typedef struct rpc_conn_state {
pthread_mutex_t connlock;
int connstate;
- /* The program that is listening for requests on this connection. */
- rpcsvc_program_t *program;
-
/* List of buffers awaiting transmission */
/* Accesses to txbufs between multiple threads calling
* rpcsvc_submit is synced through connlock. Prefer spinlock over
@@ -365,10 +362,12 @@ struct rpcsvc_request {
*/
void *private;
+ /* To save a ref to the program for which this request is. */
+ rpcsvc_program_t *program;
};
-#define nfs_rpcsvc_request_program(req) ((rpcsvc_program_t *)((req)->conn->program))
-#define nfs_rpcsvc_request_program_private(req) (((rpcsvc_program_t *)((req)->conn->program))->private)
+#define nfs_rpcsvc_request_program(req) ((rpcsvc_program_t *)((req)->program))
+#define nfs_rpcsvc_request_program_private(req) ((req)->program->private)
#define nfs_rpcsvc_request_conn(req) (req)->conn
#define nfs_rpcsvc_program_xlator(prg) ((prg)->actorxl)
#define nfs_rpcsvc_request_actorxl(rq) (nfs_rpcsvc_request_program(rq))->actorxl
@@ -453,6 +452,7 @@ typedef struct rpc_svc_actor_desc {
* Never changed ever by any thread so no need for a lock.
*/
struct rpc_svc_program {
+ struct list_head proglist;
char progname[RPCSVC_NAME_MAX];
int prognum;
int progver;
@@ -522,6 +522,8 @@ typedef struct rpc_svc_state {
glusterfs_ctx_t *ctx;
gf_boolean_t register_portmap;
+
+ struct list_head allprograms;
} rpcsvc_t;