| From fdeebcc62279119dbeafbc1a2e39e773839025fd Mon Sep 17 00:00:00 2001 |
| From: "K. Y. Srinivasan" <kys@microsoft.com> |
| Date: Wed, 27 Aug 2014 16:25:31 -0700 |
| Subject: Drivers: hv: vmbus: Cleanup vmbus_post_msg() |
| |
| From: "K. Y. Srinivasan" <kys@microsoft.com> |
| |
| commit fdeebcc62279119dbeafbc1a2e39e773839025fd upstream. |
| |
| Posting messages to the host can fail because of transient resource |
| related failures. Correctly deal with these failures and increase the |
| number of attempts to post the message before giving up. |
| |
| In this version of the patch, I have normalized the error code to |
| Linux error code. |
| |
| Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> |
| Tested-by: Sitsofe Wheeler <sitsofe@yahoo.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/hv/connection.c | 17 ++++++++++++++--- |
| 1 file changed, 14 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/hv/connection.c |
| +++ b/drivers/hv/connection.c |
| @@ -393,10 +393,21 @@ int vmbus_post_msg(void *buffer, size_t |
| * insufficient resources. Retry the operation a couple of |
| * times before giving up. |
| */ |
| - while (retries < 3) { |
| - ret = hv_post_message(conn_id, 1, buffer, buflen); |
| - if (ret != HV_STATUS_INSUFFICIENT_BUFFERS) |
| + while (retries < 10) { |
| + ret = hv_post_message(conn_id, 1, buffer, buflen); |
| + |
| + switch (ret) { |
| + case HV_STATUS_INSUFFICIENT_BUFFERS: |
| + ret = -ENOMEM; |
| + case -ENOMEM: |
| + break; |
| + case HV_STATUS_SUCCESS: |
| return ret; |
| + default: |
| + pr_err("hv_post_msg() failed; error code:%d\n", ret); |
| + return -EINVAL; |
| + } |
| + |
| retries++; |
| msleep(100); |
| } |