staging: unisys: visorbus: handle visorchannel_write errors in code

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>
This commit is contained in:
David Kershner 2017-04-18 16:55:07 -04:00 committed by Greg Kroah-Hartman
parent 04dbc09b25
commit 9b2cae6dec
1 changed files with 16 additions and 19 deletions

View 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;
}