From 9b2cae6decb94a222190a2096f1188af5ed68554 Mon Sep 17 00:00:00 2001 From: David Kershner Date: Tue, 18 Apr 2017 16:55:07 -0400 Subject: [PATCH] staging: unisys: visorbus: handle visorchannel_write errors in code Catch and report back errors when visorchannel_write fails. Signed-off-by: David Kershner Reviewed-by: Tim Sell Signed-off-by: Greg Kroah-Hartman --- drivers/staging/unisys/visorbus/visorchannel.c | 35 ++++++++++++-------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/drivers/staging/unisys/visorbus/visorchannel.c b/drivers/staging/unisys/visorbus/visorchannel.c index 8c27b56a7aa7..9e1cea22ce68 100644 --- a/drivers/staging/unisys/visorbus/visorchannel.c +++ b/drivers/staging/unisys/visorbus/visorchannel.c @@ -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; } -- 2.11.0