3 /* main mpeer structs */
6 struct xseg_request *req;
18 uint32_t defer_portno;
19 struct thread *thread;
20 struct peer_req *peer_reqs;
24 void (*interactive_func)(void);
27 enum dispatch_reason {
33 void fail(struct peerd *peer, struct peer_req *pr);
34 void complete(struct peerd *peer, struct peer_req *pr);
35 void defer_request(struct peerd *peer, struct peer_req *pr);
36 void pending(struct peerd *peer, struct peer_req *req);
37 void log_pr(char *msg, struct peer_req *pr);
38 int canDefer(struct peerd *peer);
39 int submit_peer_req(struct peerd *peer, struct peer_req *pr);
40 struct peer_req *alloc_peer_req(struct peerd *peer);
41 void free_peer_req(struct peerd *peer, struct peer_req *pr);
42 int thread_execute(struct peerd *peer, void (*func)(void *arg), void *arg);
43 void get_submits_stats();
44 void get_responds_stats();
46 static inline struct peerd * __get_peerd(void * custom_peerd)
48 return (struct peerd *) ((unsigned long) custom_peerd - offsetof(struct peerd, priv));
51 /********************************
52 * mandatory peer functions *
53 ********************************/
55 /* peer main function */
56 int custom_peer_init(struct peerd *peer, int argc, char *argv[]);
58 /* dispatch function that cannot block
59 * defers blocking calls to helper threads
61 int dispatch(struct peerd *peer, struct peer_req *pr, struct xseg_request *xseg,
62 enum dispatch_reason reason);