mirror of https://gitee.com/openkylin/linux.git
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:
parent
04dbc09b25
commit
9b2cae6dec
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue