[Sheepdog] [PATCH 2/2] sdnet: tidy up queue_request
Christoph Hellwig
hch at infradead.org
Mon Nov 14 16:49:00 CET 2011
Use a switch for the system status, and use a common done goto labels for
all cases that want to complete the request and return.
Signed-off-by: Christoph Hellwig <hch at lst.de>
Index: sheepdog/sheep/sdnet.c
===================================================================
--- sheepdog.orig/sheep/sdnet.c 2011-11-14 16:39:40.511274529 +0100
+++ sheepdog/sheep/sdnet.c 2011-11-14 16:40:59.004607398 +0100
@@ -187,7 +187,6 @@ static void cluster_op_done(struct work
static void queue_request(struct request *req)
{
struct cpg_event *cevent = &req->cev;
-
struct sd_req *hdr = (struct sd_req *)&req->rq;
struct sd_rsp *rsp = (struct sd_rsp *)&req->rp;
@@ -201,22 +200,24 @@ static void queue_request(struct request
dprintf("%x\n", hdr->opcode);
- if (sys->status == SD_STATUS_SHUTDOWN) {
+ switch (sys->status) {
+ case SD_STATUS_SHUTDOWN:
rsp->result = SD_RES_SHUTDOWN;
- req->done(req);
- return;
- }
-
- if (sys->status == SD_STATUS_WAIT_FOR_FORMAT ||
- sys->status == SD_STATUS_WAIT_FOR_JOIN) {
+ goto done;
+ case SD_STATUS_WAIT_FOR_FORMAT:
+ if (!is_force_op(req->op)) {
+ rsp->result = SD_RES_WAIT_FOR_FORMAT;
+ goto done;
+ }
+ break;
+ case SD_STATUS_WAIT_FOR_JOIN:
if (!is_force_op(req->op)) {
- if (sys->status == SD_STATUS_WAIT_FOR_FORMAT)
- rsp->result = SD_RES_WAIT_FOR_FORMAT;
- else
- rsp->result = SD_RES_WAIT_FOR_JOIN;
- req->done(req);
- return;
+ rsp->result = SD_RES_WAIT_FOR_JOIN;
+ goto done;
}
+ break;
+ default:
+ break;
}
if (is_io_op(req->op)) {
@@ -253,6 +254,9 @@ static void queue_request(struct request
cevent->ctype = CPG_EVENT_REQUEST;
list_add_tail(&cevent->cpg_event_list, &sys->cpg_event_siblings);
start_cpg_event_work();
+ return;
+done:
+ req->done(req);
}
static void client_incref(struct client_info *ci);
More information about the sheepdog
mailing list