scsi-generic: pass max_segments via max_iov field in BlockLimits
commit01ef8185b809af9d287e1a03a3f9d8ea8231118a
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 14 Apr 2021 17:51:48 +0000 (14 19:51 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 25 Jun 2021 08:54:12 +0000 (25 10:54 +0200)
tree3310b456ff028325cfe6b5e7bb286ab1c57ecc68
parent8ad5ab6148dca8aad297c134c09c84b0b92d45ed
scsi-generic: pass max_segments via max_iov field in BlockLimits

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 <pbonzini@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
block/file-posix.c
hw/scsi/scsi-generic.c