ipmi:ssif: resend_msg() cannot fail
authorCorey Minyard <cminyard@mvista.com>
Wed, 25 Jan 2023 16:11:06 +0000 (10:11 -0600)
committerCorey Minyard <cminyard@mvista.com>
Fri, 10 Feb 2023 13:37:23 +0000 (07:37 -0600)
The resend_msg() function cannot fail, but there was error handling
around using it.  Rework the handling of the error, and fix the out of
retries debug reporting that was wrong around this, too.

Cc: stable@vger.kernel.org
Signed-off-by: Corey Minyard <cminyard@mvista.com>
drivers/char/ipmi/ipmi_ssif.c

index 4bfd1e3066162fcc3a290fb6f88ce9c36d3d6082..146409d28e1c203631e9788cdf8822573ecd633d 100644 (file)
@@ -602,7 +602,7 @@ static void ssif_alert(struct i2c_client *client, enum i2c_alert_protocol type,
                start_get(ssif_info);
 }
 
-static int start_resend(struct ssif_info *ssif_info);
+static void start_resend(struct ssif_info *ssif_info);
 
 static void msg_done_handler(struct ssif_info *ssif_info, int result,
                             unsigned char *data, unsigned int len)
@@ -909,31 +909,17 @@ static void msg_written_handler(struct ssif_info *ssif_info, int result,
        if (result < 0) {
                ssif_info->retries_left--;
                if (ssif_info->retries_left > 0) {
-                       if (!start_resend(ssif_info)) {
-                               ssif_inc_stat(ssif_info, send_retries);
-                               return;
-                       }
-                       /* request failed, just return the error. */
-                       ssif_inc_stat(ssif_info, send_errors);
-
-                       if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
-                               dev_dbg(&ssif_info->client->dev,
-                                       "%s: Out of retries\n", __func__);
-                       msg_done_handler(ssif_info, -EIO, NULL, 0);
+                       start_resend(ssif_info);
                        return;
                }
 
                ssif_inc_stat(ssif_info, send_errors);
 
-               /*
-                * Got an error on transmit, let the done routine
-                * handle it.
-                */
                if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
                        dev_dbg(&ssif_info->client->dev,
-                               "%s: Error  %d\n", __func__, result);
+                               "%s: Out of retries\n", __func__);
 
-               msg_done_handler(ssif_info, result, NULL, 0);
+               msg_done_handler(ssif_info, -EIO, NULL, 0);
                return;
        }
 
@@ -996,7 +982,7 @@ static void msg_written_handler(struct ssif_info *ssif_info, int result,
        }
 }
 
-static int start_resend(struct ssif_info *ssif_info)
+static void start_resend(struct ssif_info *ssif_info)
 {
        int command;
 
@@ -1021,7 +1007,6 @@ static int start_resend(struct ssif_info *ssif_info)
 
        ssif_i2c_send(ssif_info, msg_written_handler, I2C_SMBUS_WRITE,
                   command, ssif_info->data, I2C_SMBUS_BLOCK_DATA);
-       return 0;
 }
 
 static int start_send(struct ssif_info *ssif_info,
@@ -1036,7 +1021,8 @@ static int start_send(struct ssif_info *ssif_info,
        ssif_info->retries_left = SSIF_SEND_RETRIES;
        memcpy(ssif_info->data + 1, data, len);
        ssif_info->data_len = len;
-       return start_resend(ssif_info);
+       start_resend(ssif_info);
+       return 0;
 }
 
 /* Must be called with the message lock held. */