[Sheepdog] [PATCH] sheep: call req_done directly

Liu Yuan namei.unix at gmail.com
Tue May 15 10:59:38 CEST 2012


On 05/15/2012 04:53 PM, Christoph Hellwig wrote:

> 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-05-15 10:32:38.607973725 +0200
> +++ sheepdog/sheep/group.c	2012-05-15 10:34:54.351972431 +0200
> @@ -638,7 +638,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-05-15 10:32:38.607973725 +0200
> +++ sheepdog/sheep/sdnet.c	2012-05-15 10:34:54.355972432 +0200
> @@ -129,7 +129,7 @@ static void io_op_done(struct work *work
>  	resume_pending_requests();
>  	resume_recovery_work();
>  
> -	req->done(req);
> +	req_done(req);
>  	return;
>  
>  retry:
> @@ -153,7 +153,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)
> @@ -266,8 +266,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);
> @@ -329,8 +328,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;
>  	}
>  
>  	list_add_tail(&req->request_list, &sys->request_queue);
> @@ -338,7 +336,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);
> @@ -381,7 +379,7 @@ static void free_request(struct request
>  	free(req);
>  }
>  
> -static void req_done(struct request *req)
> +void req_done(struct request *req)
>  {
>  	struct client_info *ci = req->ci;
>  
> @@ -470,8 +468,6 @@ static void client_rx_handler(struct cli
>  	else
>  		req->rp.data_length = hdr->data_length;
>  
> -	req->done = req_done;
> -
>  	dprintf("connection from: %s:%d\n", ci->conn.ipstr, ci->conn.port);
>  	queue_request(req);
>  }
> Index: sheepdog/sheep/sheep_priv.h
> ===================================================================
> --- sheepdog.orig/sheep/sheep_priv.h	2012-05-15 10:32:38.607973725 +0200
> +++ sheepdog/sheep/sheep_priv.h	2012-05-15 10:34:54.355972432 +0200
> @@ -63,8 +63,6 @@ struct client_info {
>  struct request;
>  struct vnode_info;
>  
> -typedef void (*req_end_t) (struct request *);
> -
>  struct request {
>  	struct sd_req rq;
>  	struct sd_rsp rp;
> @@ -84,7 +82,6 @@ struct request {
>  	struct vnode_info *vnodes;
>  	int check_consistency;
>  
> -	req_end_t done;
>  	struct work work;
>  };
>  
> @@ -312,6 +309,8 @@ int init_objlist_cache(void);
>  int objlist_cache_rb_remove(struct rb_root *root, uint64_t oid);
>  int check_and_insert_objlist_cache(uint64_t oid);
>  
> +void req_done(struct request *req);
> +
>  /* Operations */
>  
>  struct sd_op_template *get_sd_op(uint8_t opcode);


Applied, thanks.

Yuan



More information about the sheepdog mailing list