staging: unisys: visorbus: save_crash_message add error handling

Add proper error handling to the function save_crash_message.

Signed-off-by: David Kershner <david.kershner@unisys.com>
Reported-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
David Kershner 2016-11-21 12:15:48 -05:00 committed by Greg Kroah-Hartman
parent 2c4ef563f4
commit 8dff01f7d0
1 changed files with 28 additions and 22 deletions

View File

@ -579,57 +579,63 @@ enum crash_obj_type {
CRASH_BUS, CRASH_BUS,
}; };
static void static int
save_crash_message(struct controlvm_message *msg, enum crash_obj_type typ) save_crash_message(struct controlvm_message *msg, enum crash_obj_type typ)
{ {
u32 local_crash_msg_offset; u32 local_crash_msg_offset;
u16 local_crash_msg_count; u16 local_crash_msg_count;
int err;
if (visorchannel_read(controlvm_channel, err = visorchannel_read(controlvm_channel,
offsetof(struct spar_controlvm_channel_protocol, offsetof(struct spar_controlvm_channel_protocol,
saved_crash_message_count), saved_crash_message_count),
&local_crash_msg_count, sizeof(u16)) < 0) { &local_crash_msg_count, sizeof(u16));
if (err) {
POSTCODE_LINUX_2(CRASH_DEV_CTRL_RD_FAILURE_PC, POSTCODE_LINUX_2(CRASH_DEV_CTRL_RD_FAILURE_PC,
POSTCODE_SEVERITY_ERR); POSTCODE_SEVERITY_ERR);
return; return err;
} }
if (local_crash_msg_count != CONTROLVM_CRASHMSG_MAX) { if (local_crash_msg_count != CONTROLVM_CRASHMSG_MAX) {
POSTCODE_LINUX_3(CRASH_DEV_COUNT_FAILURE_PC, POSTCODE_LINUX_3(CRASH_DEV_COUNT_FAILURE_PC,
local_crash_msg_count, local_crash_msg_count,
POSTCODE_SEVERITY_ERR); POSTCODE_SEVERITY_ERR);
return; return -EIO;
} }
if (visorchannel_read(controlvm_channel, err = visorchannel_read(controlvm_channel,
offsetof(struct spar_controlvm_channel_protocol, offsetof(struct spar_controlvm_channel_protocol,
saved_crash_message_offset), saved_crash_message_offset),
&local_crash_msg_offset, sizeof(u32)) < 0) { &local_crash_msg_offset, sizeof(u32));
if (err) {
POSTCODE_LINUX_2(CRASH_DEV_CTRL_RD_FAILURE_PC, POSTCODE_LINUX_2(CRASH_DEV_CTRL_RD_FAILURE_PC,
POSTCODE_SEVERITY_ERR); POSTCODE_SEVERITY_ERR);
return; return err;
} }
if (typ == CRASH_BUS) { if (typ == CRASH_BUS) {
if (visorchannel_write(controlvm_channel, err = visorchannel_write(controlvm_channel,
local_crash_msg_offset, local_crash_msg_offset,
msg, msg,
sizeof(struct controlvm_message)) < 0) { sizeof(struct controlvm_message));
if (err) {
POSTCODE_LINUX_2(SAVE_MSG_BUS_FAILURE_PC, POSTCODE_LINUX_2(SAVE_MSG_BUS_FAILURE_PC,
POSTCODE_SEVERITY_ERR); POSTCODE_SEVERITY_ERR);
return; return err;
} }
} else { } else {
local_crash_msg_offset += sizeof(struct controlvm_message); local_crash_msg_offset += sizeof(struct controlvm_message);
if (visorchannel_write(controlvm_channel, err = visorchannel_write(controlvm_channel,
local_crash_msg_offset, local_crash_msg_offset,
msg, msg,
sizeof(struct controlvm_message)) < 0) { sizeof(struct controlvm_message));
if (err) {
POSTCODE_LINUX_2(SAVE_MSG_DEV_FAILURE_PC, POSTCODE_LINUX_2(SAVE_MSG_DEV_FAILURE_PC,
POSTCODE_SEVERITY_ERR); POSTCODE_SEVERITY_ERR);
return; return err;
} }
} }
return 0;
} }
static void static void