Skip to content

Commit

Permalink
pr-helper: fix assertion failure on failed multipath PERSISTENT RESER…
Browse files Browse the repository at this point in the history
…VE IN

The response size is expected to be zero if the SCSI status is not
"GOOD", but nothing was resetting it.

This can be reproduced simply by "sg_persist -s /dev/sdb" where /dev/sdb
in the guest is a scsi-block device corresponding to a multipath device
on the host.

Before:

  PR in (Read full status): Aborted command

and on the host:

  prh_write_response: Assertion `resp->sz == 0' failed.

After:

  PR in (Read full status): bad field in cdb or parameter list
  (perhaps unsupported service action)

Reported-by: Jiri Belka <[email protected]>
Reviewed-by: Michal Privoznik <[email protected]>
Signed-off-by: Paolo Bonzini <[email protected]>
Reviewed-by: Paolo Bonzini <[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
  • Loading branch information
bonzini committed Jun 28, 2018
1 parent 50fa332 commit 86933b4
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion scsi/qemu-pr-helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -558,7 +558,11 @@ static int do_pr_in(int fd, const uint8_t *cdb, uint8_t *sense,
#ifdef CONFIG_MPATH
if (is_mpath(fd)) {
/* multipath_pr_in fills the whole input buffer. */
return multipath_pr_in(fd, cdb, sense, data, *resp_sz);
int r = multipath_pr_in(fd, cdb, sense, data, *resp_sz);
if (r != GOOD) {
*resp_sz = 0;
}
return r;
}
#endif

Expand Down

0 comments on commit 86933b4

Please sign in to comment.