Signed-off-by: Christoph Hellwig <hch at lst.de> --- sheep/group.c | 2 +- sheep/sdnet.c | 16 ++++++---------- sheep/sheep_priv.h | 5 ++--- 3 files changed, 9 insertions(+), 14 deletions(-) Index: sheepdog/sheep/group.c =================================================================== --- sheepdog.orig/sheep/group.c 2012-04-26 18:03:55.660555635 +0200 +++ sheepdog/sheep/group.c 2012-04-26 18:04:45.224556904 +0200 @@ -627,7 +627,7 @@ static void __sd_notify_done(struct even if (has_process_main(req->op)) memcpy(req->data, msg->data, msg->rsp.data_length); memcpy(&req->rp, &msg->rsp, sizeof(req->rp)); - req->done(req); + req_done(req); } void sd_notify_handler(struct sd_node *sender, void *msg, size_t msg_len) Index: sheepdog/sheep/sdnet.c =================================================================== --- sheepdog.orig/sheep/sdnet.c 2012-04-26 18:03:55.660555635 +0200 +++ sheepdog/sheep/sdnet.c 2012-04-26 18:04:45.224556904 +0200 @@ -149,7 +149,7 @@ static void io_op_done(struct work *work resume_pending_requests(); resume_recovery_work(); - req->done(req); + req_done(req); return; retry: @@ -173,7 +173,7 @@ static void local_op_done(struct work *w &req->rp, req->data); } - req->done(req); + req_done(req); } static void cluster_op_done(struct work *work) @@ -261,8 +261,7 @@ static void queue_request(struct request if (!req->op) { eprintf("invalid opcode %d\n", hdr->opcode); rsp->result = SD_RES_INVALID_PARMS; - req->done(req); - return; + goto done; } dprintf("%x\n", hdr->opcode); @@ -305,8 +304,7 @@ static void queue_request(struct request } else { eprintf("unknown operation %d\n", hdr->opcode); rsp->result = SD_RES_SYSTEM_ERROR; - req->done(req); - return; + goto done; } /* * we set epoch for non direct requests here. Note that we @@ -330,7 +328,7 @@ static void queue_request(struct request process_request_event_queues(); return; done: - req->done(req); + req_done(req); } static void client_incref(struct client_info *ci); @@ -375,7 +373,7 @@ static void free_request(struct request free(req); } -static void req_done(struct request *req) +void req_done(struct request *req) { int dead = 0; struct client_info *ci = req->ci; @@ -467,8 +465,6 @@ static void client_rx_handler(struct cli else req->rp.data_length = hdr->data_length; - req->done = req_done; - queue_request(req); } Index: sheepdog/sheep/sheep_priv.h =================================================================== --- sheepdog.orig/sheep/sheep_priv.h 2012-04-26 18:03:55.660555635 +0200 +++ sheepdog/sheep/sheep_priv.h 2012-04-26 18:04:45.224556904 +0200 @@ -65,8 +65,6 @@ struct client_info { struct request; struct vnode_info; -typedef void (*req_end_t) (struct request *); - struct request { struct event_struct cev; struct sd_req rq; @@ -88,7 +86,6 @@ struct request { struct vnode_info *vnodes; int check_consistency; - req_end_t done; struct work work; }; @@ -312,6 +309,8 @@ int rmdir_r(char *dir_path); int prealloc(int fd, uint32_t size); +void req_done(struct request *req); + /* Operations */ struct sd_op_template *get_sd_op(uint8_t opcode); |