As a fallout we can use requeue_request in gateway_op_done now. Signed-off-by: Christoph Hellwig <hch at lst.de> --- sheep/group.c | 1 - sheep/sdnet.c | 28 +++++++++------------------- sheep/sheep_priv.h | 1 - 3 files changed, 9 insertions(+), 21 deletions(-) Index: sheepdog/sheep/group.c =================================================================== --- sheepdog.orig/sheep/group.c 2012-06-02 15:32:44.768063952 +0200 +++ sheepdog/sheep/group.c 2012-06-02 15:51:23.220092595 +0200 @@ -1061,7 +1061,6 @@ int create_cluster(int port, int64_t zon INIT_LIST_HEAD(&sys->pending_list); INIT_LIST_HEAD(&sys->leave_list); - INIT_LIST_HEAD(&sys->outstanding_req_list); INIT_LIST_HEAD(&sys->consistent_obj_list); INIT_LIST_HEAD(&sys->blocking_conn_list); Index: sheepdog/sheep/sdnet.c =================================================================== --- sheepdog.orig/sheep/sdnet.c 2012-06-02 15:32:44.772063958 +0200 +++ sheepdog/sheep/sdnet.c 2012-06-02 15:52:48.024094764 +0200 @@ -20,7 +20,7 @@ #include "sheep_priv.h" -static void queue_request(struct request *req); +static void requeue_request(struct request *req); static int is_access_local(struct request *req, uint64_t oid) { @@ -117,8 +117,6 @@ static void io_op_done(struct work *work { struct request *req = container_of(work, struct request, work); - list_del(&req->request_list); - if (req->rp.result == SD_RES_EIO) { req->rp.result = SD_RES_NETWORK_ERROR; @@ -135,8 +133,6 @@ static void gateway_op_done(struct work struct request *req = container_of(work, struct request, work); struct sd_req *hdr = &req->rq; - list_del(&req->request_list); - switch (req->rp.result) { case SD_RES_OLD_NODE_VER: if (req->rp.epoch > sys->epoch) { @@ -170,9 +166,7 @@ static void gateway_op_done(struct work req_done(req); return; retry: - if (req->vnodes) - put_vnode_info(req->vnodes); - queue_request(req); + requeue_request(req); } static void local_op_done(struct work *work) @@ -249,14 +243,6 @@ static int check_request_in_recovery(str return 0; } -static void requeue_request(struct request *req) -{ - list_del(&req->request_list); - if (req->vnodes) - put_vnode_info(req->vnodes); - queue_request(req); -} - void resume_wait_epoch_requests(void) { struct request *req, *t; @@ -345,7 +331,6 @@ static void queue_io_request(struct requ if (check_request_in_recovery(req) < 0) return; } - list_add_tail(&req->request_list, &sys->outstanding_req_list); req->work.fn = do_io_request; req->work.done = io_op_done; @@ -370,8 +355,6 @@ static void queue_gateway_request(struct return; } - list_add_tail(&req->request_list, &sys->outstanding_req_list); - if (need_consistency_check(req)) set_consistency_check(req); @@ -464,6 +447,13 @@ done: req_done(req); } +static void requeue_request(struct request *req) +{ + if (req->vnodes) + put_vnode_info(req->vnodes); + queue_request(req); +} + static void client_incref(struct client_info *ci); static void client_decref(struct client_info *ci); Index: sheepdog/sheep/sheep_priv.h =================================================================== --- sheepdog.orig/sheep/sheep_priv.h 2012-06-02 15:32:44.772063958 +0200 +++ sheepdog/sheep/sheep_priv.h 2012-06-02 15:51:30.188092770 +0200 @@ -119,7 +119,6 @@ struct cluster_info { DECLARE_BITMAP(vdi_inuse, SD_NR_VDIS); - struct list_head outstanding_req_list; struct list_head consistent_obj_list; struct list_head blocking_conn_list; |