qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v3 4/5] block: use blk_get_max_ioctl_transfer for SCSI passth


From: Max Reitz
Subject: Re: [PATCH v3 4/5] block: use blk_get_max_ioctl_transfer for SCSI passthrough
Date: Thu, 7 Jan 2021 14:19:40 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.5.0

On 17.12.20 17:56, Maxim Levitsky wrote:
Switch file-posix to expose only the max_ioctl_transfer limit.

Let the iscsi driver work as it did before since it is bound by the transfer
limit in both regular read/write and in SCSI passthrough case.

Switch the scsi-disk and scsi-block drivers to read the SG max transfer limits
using the new blk_get_max_ioctl_transfer interface.


Fixes: 867eccfed8 ("file-posix: Use max transfer length/segment count only for SCSI 
passthrough")
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
---
  block/file-posix.c     | 7 ++++---
  block/iscsi.c          | 1 +
  hw/scsi/scsi-generic.c | 4 ++--
  3 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/block/file-posix.c b/block/file-posix.c
index 2bf4d095a7..c34a7a9599 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
@@ -1282,13 +1282,14 @@ static void hdev_refresh_limits(BlockDriverState *bs, 
Error **errp)
                         get_max_transfer_length(s->fd);
if (ret > 0 && ret <= BDRV_REQUEST_MAX_BYTES) {
-        bs->bl.max_transfer = pow2floor(ret);
+        bs->bl.max_ioctl_transfer = pow2floor(ret);
      }
ret = bs->sg ? sg_get_max_segments(s->fd) : get_max_segments(s->fd);
      if (ret > 0) {
-        bs->bl.max_transfer = MIN_NON_ZERO(bs->bl.max_transfer,
-                                           ret * qemu_real_host_page_size);
+        bs->bl.max_ioctl_transfer =
+            MIN_NON_ZERO(bs->bl.max_ioctl_transfer,
+                         ret * qemu_real_host_page_size);
      }

Do non-SG devices even have a max transfer length then? I would’ve thought max_ioctl_transfer simply doesn’t apply to them and so could be left 0.


(Rest looks good – from what I can tell...)

Max

raw_refresh_limits(bs, errp);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]