[libvirt] [PATCH 0/2] Extend the valid range of scsi unit number

Han Han (2): conf: Allow virtio scsi to using unit 16383 rng: Extend the valid range of drive unit docs/schemas/domaincommon.rng | 2 +- src/conf/domain_conf.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) -- 2.23.0

In qemu, 16383 is the top valid value for virtio scsi unit number: $ /usr/libexec/qemu-kvm \ -device \ virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x6 \ -drive \ file=A.qcow2,format=qcow2,if=none,id=drive -device \ scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=16383,drive=drive,id=disk VNC server running on ::1:5900 $ /usr/libexec/qemu-kvm \ -device \ virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x6 \ -drive \ file=A.qcow2,format=qcow2,if=none,id=drive -device \ scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=16384,drive=drive,id=disk qemu-kvm: ...: bad scsi device lun: 16384 So adjust libvirt to use the virtio scsi unit valid range 0..16383. Signed-off-by: Han Han <hhan@redhat.com> --- src/conf/domain_conf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 95808847..d315b431 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -4823,7 +4823,7 @@ virDomainSCSIDriveAddressIsUsed(const virDomainDef *def, case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI: case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_TRANSITIONAL: case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_NON_TRANSITIONAL: - max = 16383; + max = 16384; break; case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI: max = 31; -- 2.23.0

On 11/29/19 11:18 AM, Han Han wrote:
In qemu, 16383 is the top valid value for virtio scsi unit number:
$ /usr/libexec/qemu-kvm \ -device \ virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x6 \ -drive \ file=A.qcow2,format=qcow2,if=none,id=drive -device \ scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=16383,drive=drive,id=disk VNC server running on ::1:5900
$ /usr/libexec/qemu-kvm \ -device \ virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x6 \ -drive \ file=A.qcow2,format=qcow2,if=none,id=drive -device \ scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=16384,drive=drive,id=disk qemu-kvm: ...: bad scsi device lun: 16384
So adjust libvirt to use the virtio scsi unit valid range 0..16383.
Signed-off-by: Han Han <hhan@redhat.com> --- src/conf/domain_conf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 95808847..d315b431 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -4823,7 +4823,7 @@ virDomainSCSIDriveAddressIsUsed(const virDomainDef *def, case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI: case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_TRANSITIONAL: case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_NON_TRANSITIONAL: - max = 16383; + max = 16384;
Instead of increasing max shouldn't the check for max introduced by commit c8007fdc5d2 be changed from addr->unit >= max into addr->unit > max ?
break; case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI: max = 31;
-- Mit freundlichen Grüßen/Kind regards Boris Fiuczynski IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Matthias Hartmann Geschäftsführung: Dirk Wittkopp Sitz der Gesellschaft: Böblingen Registergericht: Amtsgericht Stuttgart, HRB 243294

On Mon, Dec 2, 2019 at 4:17 PM Boris Fiuczynski <fiuczy@linux.ibm.com> wrote:
On 11/29/19 11:18 AM, Han Han wrote:
In qemu, 16383 is the top valid value for virtio scsi unit number:
$ /usr/libexec/qemu-kvm \ -device \ virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x6 \ -drive \ file=A.qcow2,format=qcow2,if=none,id=drive -device \ scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=16383,drive=drive,id=disk VNC server running on ::1:5900
$ /usr/libexec/qemu-kvm \ -device \ virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x6 \ -drive \ file=A.qcow2,format=qcow2,if=none,id=drive -device \ scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=16384,drive=drive,id=disk qemu-kvm: ...: bad scsi device lun: 16384
So adjust libvirt to use the virtio scsi unit valid range 0..16383.
Signed-off-by: Han Han <hhan@redhat.com> --- src/conf/domain_conf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 95808847..d315b431 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -4823,7 +4823,7 @@ virDomainSCSIDriveAddressIsUsed(const virDomainDef *def, case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI: case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_TRANSITIONAL: case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_NON_TRANSITIONAL: - max = 16383; + max = 16384;
Instead of increasing max shouldn't the check for max introduced by commit c8007fdc5d2 be changed from addr->unit >= max into addr->unit > max ?
Considering the 'max' of other scsi controllers, I think you are right. I will update it then
break; case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI: max = 31;
-- Mit freundlichen Grüßen/Kind regards Boris Fiuczynski
IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Matthias Hartmann Geschäftsführung: Dirk Wittkopp Sitz der Gesellschaft: Böblingen Registergericht: Amtsgericht Stuttgart, HRB 243294
-- Best regards, ----------------------------------- Han Han Quality Engineer Redhat. Email: hhan@redhat.com Phone: +861065339333

In the last commit, we allowed unit number of virtio scsi disk to use range 0..16383. Extend the range in rng file to match that. Signed-off-by: Han Han <hhan@redhat.com> --- docs/schemas/domaincommon.rng | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index a83c9ae7..17efcfdc 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -6460,7 +6460,7 @@ </define> <define name="driveUnit"> <data type="string"> - <param name="pattern">[0-9]{1,2}</param> + <param name="pattern">[0-9]{1,5}</param> </data> </define> <define name="driveSCSIUnit"> -- 2.23.0

On 11/29/19 11:18 AM, Han Han wrote:
In the last commit, we allowed unit number of virtio scsi disk to use range 0..16383. Extend the range in rng file to match that.
Signed-off-by: Han Han <hhan@redhat.com> --- docs/schemas/domaincommon.rng | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index a83c9ae7..17efcfdc 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -6460,7 +6460,7 @@ </define> <define name="driveUnit"> <data type="string"> - <param name="pattern">[0-9]{1,2}</param> + <param name="pattern">[0-9]{1,5}</param>
This changes also virtio-serial (port attribute is 2-digit) and ccid addresses (slot attribute is 2-digit). So you need a separate definition of the pattern for drive address.
</data> </define> <define name="driveSCSIUnit">
-- Mit freundlichen Grüßen/Kind regards Boris Fiuczynski IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Matthias Hartmann Geschäftsführung: Dirk Wittkopp Sitz der Gesellschaft: Böblingen Registergericht: Amtsgericht Stuttgart, HRB 243294
participants (2)
-
Boris Fiuczynski
-
Han Han