提交 9b2cae6d 编写于 作者: D David Kershner 提交者: Greg Kroah-Hartman

staging: unisys: visorbus: handle visorchannel_write errors in code

Catch and report back errors when visorchannel_write fails.
Signed-off-by: NDavid Kershner <david.kershner@unisys.com>
Reviewed-by: NTim Sell <timothy.sell@unisys.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 04dbc09b
......@@ -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;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册