Bug 2121430

Summary: Wrong max_sectors_kb and Maximum transfer length on the pass-through device [rhel-9.2.0]
Product: Red Hat Enterprise Linux 9 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, jinzhao, juzhang, kwolf, lijin, mrezanin, pvlasin, qzhang, virt-maint, xuwei, yfu
Version: 9.1Keywords: Triaged
Target Milestone: rc   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: qemu-kvm-7.1.0-1.el9 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: 2120275 Environment:
Last Closed: 2023-05-09 07:20:04 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: 2120275    
Bug Blocks:    

Comment 3 Yanan Fu 2022-09-07 08:33:54 UTC
QE bot(pre verify): Set 'Verified:Tested,SanityOnly' as gating/tier1 test pass.

Comment 6 qing.wang 2022-09-14 08:32:37 UTC
Passed block sanity test and manually verification below:


Red Hat Enterprise Linux release 9.2 Beta (Plow)
5.14.0-162.el9.x86_64
qemu-kvm-7.1.0-1.el9.x86_64
seabios-bin-1.16.0-4.el9.noarch
edk2-ovmf-20220526git16779ede2d36-3.el9.noarch
libvirt-8.5.0-6.el9.x86_64




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 8 errata-xmlrpc 2023-05-09 07:20:04 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 (Moderate: qemu-kvm security, bug fix, and enhancement 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/RHSA-2023:2162