From: Liu Yuan <tailai.ly at taobao.com> We should call setup_access_to_local_objects() before check_request(), otherwise check_request() will be always a NULL operation. - check_request() only works for io_op, so move it into if clause. Signed-off-by: Liu Yuan <tailai.ly at taobao.com> --- sheep/sdnet.c | 10 ++++------ 1 files changed, 4 insertions(+), 6 deletions(-) diff --git a/sheep/sdnet.c b/sheep/sdnet.c index 5188d4f..a28874e 100644 --- a/sheep/sdnet.c +++ b/sheep/sdnet.c @@ -288,9 +288,13 @@ static void queue_request(struct request *req) break; } + req->vnodes = get_vnode_info(); if (is_io_op(req->op)) { req->work.fn = do_io_request; req->work.done = io_op_done; + setup_access_to_local_objects(req); + if (check_request(req) < 0) + return; } else if (is_local_op(req->op)) { req->work.fn = do_local_request; req->work.done = local_op_done; @@ -312,14 +316,8 @@ static void queue_request(struct request *req) if (!(hdr->flags & SD_FLAG_CMD_IO_LOCAL)) hdr->epoch = sys->epoch; - if (check_request(req) < 0) - return; - list_del(&req->r_wlist); - req->vnodes = get_vnode_info(); - if (is_io_op(req->op)) - setup_access_to_local_objects(req); cevent->ctype = EVENT_REQUEST; list_add_tail(&cevent->event_list, &sys->request_queue); process_request_event_queues(); -- 1.7.8.2 |