Yes, I try to avoid the 90 character limit (though sometimes that's hard
too, hello QOM) but I don't think much of the lower one.

Paolo

Il mar 15 giu 2021, 18:20 Max Reitz <mre...@redhat.com> ha scritto:

> On 03.06.21 15:37, Paolo Bonzini wrote:
> > I/O to a disk via read/write is not limited by the number of segments
> allowed
> > by the host adapter; the kernel can split requests if needed, and the
> limit
> > imposed by the host adapter can be very low (256k or so) to avoid that
> SG_IO
> > returns EINVAL if memory is heavily fragmented.
> >
> > Since this value is only interesting for SG_IO-based I/O, do not include
> > it in the max_transfer and only take it into account when patching the
> > block limits VPD page in the scsi-generic device.
> >
> > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
> > ---
> >   block/file-posix.c     | 3 +--
> >   hw/scsi/scsi-generic.c | 6 ++++--
> >   2 files changed, 5 insertions(+), 4 deletions(-)
> >
> > diff --git a/block/file-posix.c b/block/file-posix.c
> > index 58db526cc2..e3241a0dd3 100644
> > --- a/block/file-posix.c
> > +++ b/block/file-posix.c
> > @@ -1239,8 +1239,7 @@ static void raw_refresh_limits(BlockDriverState
> *bs, Error **errp)
> >
> >           ret = sg_get_max_segments(s->fd);
> >           if (ret > 0) {
> > -            bs->bl.max_transfer = MIN(bs->bl.max_transfer,
> > -                                      ret * qemu_real_host_page_size);
> > +            bs->bl.max_iov = ret;
> >           }
> >       }
> >
> > diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c
> > index 98c30c5d5c..82e1e2ee79 100644
> > --- a/hw/scsi/scsi-generic.c
> > +++ b/hw/scsi/scsi-generic.c
> > @@ -179,10 +179,12 @@ static void
> scsi_handle_inquiry_reply(SCSIGenericReq *r, SCSIDevice *s)
> >           (r->req.cmd.buf[1] & 0x01)) {
> >           page = r->req.cmd.buf[2];
> >           if (page == 0xb0) {
> > -            uint32_t max_transfer =
> > -                blk_get_max_transfer(s->conf.blk) / s->blocksize;
> > +            uint32_t max_transfer = blk_get_max_transfer(s->conf.blk);
> > +            uint32_t max_iov = blk_get_max_iov(s->conf.blk);
> >
> >               assert(max_transfer);
> > +            max_transfer = MIN_NON_ZERO(max_transfer, max_iov *
> qemu_real_host_page_size)
> > +                / s->blocksize;
>
> Now that I ran checkpatch for patch 3, I saw that it complains about
> this line being longer than 80 characters. I think it could be split so
> it doesn’t exceed that limit. It looks a bit like you intentionally
> exceeded the warning limit, but didn’t exceed the error limit (of 90).
> Is that so?
>
> Max
>
>

Reply via email to