Bug 2121783

Summary: Wrong max_sectors_kb and Maximum transfer length on the pass-through device [rhel-8.7] [rhel-8.6.0.z]
Product: Red Hat Enterprise Linux 8 Reporter: RHEL Program Management Team <pgm-rhel-tools>
Component: qemu-kvmAssignee: Kevin Wolf <kwolf>
qemu-kvm sub component: virtio-blk,scsi QA Contact: qing.wang <qinwang>
Status: CLOSED ERRATA Docs Contact:
Severity: high    
Priority: high CC: bhull, coli, ehadley, jinzhao, juzhang, jwboyer, kanderso, kkiwi, kpfleming, kwolf, lijin, mgandhi, qzhang, virt-maint, xuwei, ymankad, zhguo
Version: 8.7Keywords: Triaged, ZStream
Target Milestone: rc   
Target Release: ---   
Hardware: x86_64   
OS: All   
Whiteboard:
Fixed In Version: qemu-kvm-6.2.0-11.module+el8.6.0+16538+01ea313d.6 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: 2120279 Environment:
Last Closed: 2022-10-25 09:32:39 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 2120279    
Bug Blocks:    

Comment 2 qing.wang 2022-09-02 12:53:43 UTC
Passed block sanity test and manually verification below:


Red Hat Enterprise Linux release 8.6 (Ootpa)
4.18.0-372.26.1.el8_6.x86_64
qemu-kvm-6.2.0-11.module+el8.6.0+16538+01ea313d.6.x86_64
seabios-bin-1.15.0-2.module+el8.6.0+14757+c25ee005.noarch
edk2-ovmf-20220126gitbb1bba3d77-2.el8.noarch



Get FC disk on HOST

/sys/block/sdb/queue/max_sectors_kb:1280
/sys/block/sdb/queue/max_segments:64

VPD INQUIRY: Block limits page (SBC)
  Maximum transfer length: 0 blocks [not reported]



pass-through to guest

[ "$1" == "" ] && disk=sdb || disk=$1

/usr/libexec/qemu-kvm \
  -name src_vm1 \
  -machine q35,accel=kvm,usb=off,dump-guest-core=off \
  -m 8G \
  -smp 2 \
  -cpu host,vmx,+kvm_pv_unhalt \
  -device pcie-root-port,id=pcie.0-root-port-2,slot=2,bus=pcie.0,multifunction=on \
  -device pcie-root-port,id=pcie.0-root-port-2-1,chassis=3,bus=pcie.0,addr=0x2.0x1 \
  -device pcie-root-port,id=pcie.0-root-port-2-2,chassis=4,bus=pcie.0,addr=0x2.0x2 \
  -device pcie-root-port,id=pcie.0-root-port-3,slot=3,bus=pcie.0 \
  -device pcie-root-port,id=pcie.0-root-port-4,slot=4,bus=pcie.0 \
  -device pcie-root-port,id=pcie.0-root-port-5,slot=5,bus=pcie.0 \
  -device pcie-root-port,id=pcie.0-root-port-7,slot=7,bus=pcie.0 \
  -device pcie-root-port,id=pcie.0-root-port-8,slot=8,bus=pcie.0 \
  -device pcie-root-port,id=pcie.0-root-port-9,slot=9,bus=pcie.0 \
  -device qemu-xhci,id=usb1,bus=pcie.0-root-port-2-1,addr=0x0 \
  -device usb-tablet,id=usb-tablet1,bus=usb1.0,port=1 \
  -object iothread,id=iothread0 \
  -device virtio-scsi-pci,id=scsi0,bus=pcie.0-root-port-2-2,addr=0x0,iothread=iothread0 \
  -blockdev \
  driver=qcow2,file.driver=file,cache.direct=off,cache.no-flush=on,file.filename=/home/kvm_autotest_root/images/rhel840-64-virtio-scsi.qcow2,node-name=drive_image1 \
  -device scsi-hd,id=os1,drive=drive_image1,bootindex=0 \
  \
  \
  -device virtio-scsi-pci,id=scsi1,bus=pcie.0-root-port-8,addr=0x0 \
  \
  -blockdev node-name=host_device_stg,driver=host_device,aio=native,filename=/dev/$disk,cache.direct=on,cache.no-flush=off,discard=unmap \
  -blockdev node-name=drive_stg,driver=raw,cache.direct=on,cache.no-flush=off,file=host_device_stg \
  -device scsi-block,id=stg,drive=drive_stg,rerror=stop,werror=stop \
  \
  -vnc \
  :5 \
  -qmp tcp:0:5955,server,nowait \
  -monitor stdio \
  \
  -device virtio-net-pci,mac=9a:b5:b6:b1:b2:b5,id=idMmq1jH,vectors=4,netdev=idxgXAlm,bus=pcie.0-root-port-5,addr=0x0 \
  -netdev tap,id=idxgXAlm




Get disk info in guest

/sys/block/sdb/queue/max_sectors_kb:256
/sys/block/sdb/queue/max_segments:254

  Maximum transfer length: 512 blocks


change max_sectors_kb to 64 on host then reboot guest

echo 64 > /sys/block/sdb/queue/max_sectors_kb


/sys/block/sdb/queue/max_sectors_kb:64
/sys/block/sdb/queue/max_segments:254

  Maximum transfer length: 128 blocks
  

change max_sectors_kb to 1024 on host then reboot guest
echo 1024 > /sys/block/sdb/queue/max_sectors_kb

/sys/block/sdb/queue/max_sectors_kb:256
/sys/block/sdb/queue/max_segments:254

  Maximum transfer length: 512 blocks

Comment 3 Yanan Fu 2022-09-05 02:14:21 UTC
QE bot(pre verify): Set 'Verified:Tested,SanityOnly' as gating/tier1 test pass.

Comment 11 errata-xmlrpc 2022-10-25 09:32:39 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (virt:rhel and virt-devel:rhel bug fix update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2022:7122