diff options
-rw-r--r-- | drivers/hv/connection.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c index 59ef4e7afdd7..30688f6a0161 100644 --- a/drivers/hv/connection.c +++ b/drivers/hv/connection.c @@ -409,10 +409,21 @@ int vmbus_post_msg(void *buffer, size_t buflen) * 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); } |