On 06/26/2018 12:40 PM, Paolo Bonzini wrote: > 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 <jbe...@redhat.com> > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4...@amsat.org> > --- > scsi/qemu-pr-helper.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/scsi/qemu-pr-helper.c b/scsi/qemu-pr-helper.c > index 4057cf355c..0218d65bbf 100644 > --- a/scsi/qemu-pr-helper.c > +++ b/scsi/qemu-pr-helper.c > @@ -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 > >