aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/xen/xenbus/xenbus_comms.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/drivers/xen/xenbus/xenbus_comms.c b/drivers/xen/xenbus/xenbus_comms.c
index 856ada5d39c9..5b081a01779d 100644
--- a/drivers/xen/xenbus/xenbus_comms.c
+++ b/drivers/xen/xenbus/xenbus_comms.c
@@ -299,17 +299,7 @@ static int process_msg(void)
299 mutex_lock(&xb_write_mutex); 299 mutex_lock(&xb_write_mutex);
300 list_for_each_entry(req, &xs_reply_list, list) { 300 list_for_each_entry(req, &xs_reply_list, list) {
301 if (req->msg.req_id == state.msg.req_id) { 301 if (req->msg.req_id == state.msg.req_id) {
302 if (req->state == xb_req_state_wait_reply) { 302 list_del(&req->list);
303 req->msg.type = state.msg.type;
304 req->msg.len = state.msg.len;
305 req->body = state.body;
306 req->state = xb_req_state_got_reply;
307 list_del(&req->list);
308 req->cb(req);
309 } else {
310 list_del(&req->list);
311 kfree(req);
312 }
313 err = 0; 303 err = 0;
314 break; 304 break;
315 } 305 }
@@ -317,6 +307,15 @@ static int process_msg(void)
317 mutex_unlock(&xb_write_mutex); 307 mutex_unlock(&xb_write_mutex);
318 if (err) 308 if (err)
319 goto out; 309 goto out;
310
311 if (req->state == xb_req_state_wait_reply) {
312 req->msg.type = state.msg.type;
313 req->msg.len = state.msg.len;
314 req->body = state.body;
315 req->state = xb_req_state_got_reply;
316 req->cb(req);
317 } else
318 kfree(req);
320 } 319 }
321 320
322 mutex_unlock(&xs_response_mutex); 321 mutex_unlock(&xs_response_mutex);