diff options
-rw-r--r-- | drivers/xen/xenbus/xenbus_comms.c | 21 |
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); |