staging: unisys: visorbus: handle visorchannel_write errors in code
authorDavid Kershner <david.kershner@unisys.com>
Tue, 18 Apr 2017 20:55:07 +0000 (16:55 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 28 Apr 2017 09:49:52 +0000 (11:49 +0200)
Catch and report back errors when visorchannel_write fails.

Signed-off-by: David Kershner <david.kershner@unisys.com>
Reviewed-by: Tim Sell <timothy.sell@unisys.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/unisys/visorbus/visorchannel.c

index 8c27b56..9e1cea2 100644 (file)
@@ -328,27 +328,24 @@ static int
 signalinsert_inner(struct visorchannel *channel, u32 queue, void *msg)
 {
        struct signal_queue_header sig_hdr;
-       int error;
+       int err;
 
-       error = sig_read_header(channel, queue, &sig_hdr);
-       if (error)
-               return error;
+       err = sig_read_header(channel, queue, &sig_hdr);
+       if (err)
+               return err;
 
        sig_hdr.head = (sig_hdr.head + 1) % sig_hdr.max_slots;
        if (sig_hdr.head == sig_hdr.tail) {
                sig_hdr.num_overflows++;
-               visorchannel_write(channel,
-                                  SIG_QUEUE_OFFSET(&channel->chan_hdr, queue) +
-                                  offsetof(struct signal_queue_header,
-                                           num_overflows),
-                                  &sig_hdr.num_overflows,
-                                  sizeof(sig_hdr.num_overflows));
+               err = SIG_WRITE_FIELD(channel, queue, &sig_hdr, num_overflows);
+               if (err)
+                       return err;
                return -EIO;
        }
 
-       error = sig_write_data(channel, queue, &sig_hdr, sig_hdr.head, msg);
-       if (error)
-               return error;
+       err = sig_write_data(channel, queue, &sig_hdr, sig_hdr.head, msg);
+       if (err)
+               return err;
 
        sig_hdr.num_sent++;
 
@@ -358,12 +355,12 @@ signalinsert_inner(struct visorchannel *channel, u32 queue, void *msg)
         */
        mb(); /* required for channel synch */
 
-       error = SIG_WRITE_FIELD(channel, queue, &sig_hdr, head);
-       if (error)
-               return error;
-       error = SIG_WRITE_FIELD(channel, queue, &sig_hdr, num_sent);
-       if (error)
-               return error;
+       err = SIG_WRITE_FIELD(channel, queue, &sig_hdr, head);
+       if (err)
+               return err;
+       err = SIG_WRITE_FIELD(channel, queue, &sig_hdr, num_sent);
+       if (err)
+               return err;
 
        return 0;
 }