aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorK. Y. Srinivasan <kys@microsoft.com>2014-08-27 16:25:31 -0700
committerBen Hutchings <ben@decadent.org.uk>2014-12-14 16:23:43 +0000
commitb8097f90802288af434ce7e012e0ea5661566e40 (patch)
treed066a2b42547dc033dcfdafa958fb5c8a002cc6a
parent21636a4d34b572b91568259c489d72394302ef71 (diff)
downloadkernel_samsung_smdk4412-b8097f90802288af434ce7e012e0ea5661566e40.zip
kernel_samsung_smdk4412-b8097f90802288af434ce7e012e0ea5661566e40.tar.gz
kernel_samsung_smdk4412-b8097f90802288af434ce7e012e0ea5661566e40.tar.bz2
Drivers: hv: vmbus: Cleanup vmbus_post_msg()
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> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
-rw-r--r--drivers/hv/connection.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c
index d7f3df9..96548d7 100644
--- a/drivers/hv/connection.c
+++ b/drivers/hv/connection.c
@@ -284,10 +284,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);
}