** Changed in: ubuntu-power-systems
Status: New => Opinion
--
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/1840026
Title:
Ubuntu 18.04.2: Unable to boot guest with scsi disk having sgio flag
Status in The Ubuntu-power-systems project:
Opinion
Status in libvirt package in Ubuntu:
Won't Fix
Status in linux package in Ubuntu:
New
Bug description:
== Comment: #0 - SRIKANTH AITHAL <[email protected]> - 2019-07-03
22:28:43 ==
---Problem Description---
When we try to boot KVM guest with scsi disk having `sgio="unfiltered"`,
guest fails to boot throwing below error
virsh start vm1 --console
error: Failed to start domain vm1
error: Requested operation is not valid: unpriv_sgio is not supported by this
kernel
Contact Information = srikanth/[email protected]
---uname output---
Linux pkvmhab008 4.15.0-54-generic #58-Ubuntu SMP Mon Jun 24 10:54:50 UTC
2019 ppc64le ppc64le ppc64le GNU/Linux
Machine Type = witherspoon
---Debugger---
A debugger is not configured
---Steps to Reproduce---
Recreation steps:
1. Using scsi_debug driver to simulate scsi disk
#/sbin/modprobe scsi_debug dev_size_mb=2048 lbpu=1
#lsscsi|grep scsi_debug|awk '{print $6}'
/dev/sdk
2. Using below disk xml,
<disk device="lun" rawio="no" sgio="unfiltered" type="block">
<target bus="scsi" dev="sda" />
<source dev="/dev/sdk" />
<driver name="qemu" />
<shareable />
</disk>
3. Try booting KVM guest with above disk,
# virsh start vm1 --console
error: Failed to start domain vm1
error: Requested operation is not valid: unpriv_sgio is not supported by this
kernel
Stack trace output:
no
Oops output:
no
System Dump Location:
There was no dump
*Additional Instructions for srikanth/[email protected]:
-Attach sysctl -a output output to the bug.
== Comment: #1 - SRIKANTH AITHAL <[email protected]> - 2019-07-03
22:30:28 ==
== Comment: #2 - SRIKANTH AITHAL <[email protected]> - 2019-07-03
22:31:03 ==
== Comment: #3 - SRIKANTH AITHAL <[email protected]> - 2019-07-03
22:32:34 ==
unpriv_sgio is required for KVM guest running as qemu user to be able to
configure to issue any SCSI commands to storages.
== Comment: #5 - Fabiano Almeida Rosas <[email protected]> - 2019-07-25
12:46:15 ==
It seems libvirt added support to `unpriv_sgio` but the kernel side of the
feature never got merged. It was then reverted on libvirt's side but the revert
caused issues so they re-enabled the support. As far as I can tell it will
always fail.
Some iterations of the kernel side feature:
https://lwn.net/Articles/533901/
https://lwn.net/Articles/535075/
https://lkml.org/lkml/2013/5/23/294
Libvirt side:
https://www.redhat.com/archives/libvir-list/2013-January/msg00013.html
Revert of the feature:
https://libvirt.org/git/?p=libvirt.git;a=patch;h=ce346623c19f82f4b35f3466e2ee4066847b750c
Unrevert:
https://www.redhat.com/archives/libvir-list/2015-June/msg00814.html
@Srikanth
Is this known to have worked at some point? Because it might be the case that
the distro is carrying these patches downstream. If that is the case I would
like to know which distro + version, so we can compare the setups.
== Comment: #6 - SRIKANTH AITHAL <[email protected]> - 2019-07-25
22:35:33 ==
(In reply to comment #5)
> It seems libvirt added support to `unpriv_sgio` but the kernel side of the
> feature never got merged. It was then reverted on libvirt's side but the
> revert caused issues so they re-enabled the support. As far as I can tell it
> will always fail.
>
> Some iterations of the kernel side feature:
> https://lwn.net/Articles/533901/
> https://lwn.net/Articles/535075/
> https://lkml.org/lkml/2013/5/23/294
>
> Libvirt side:
> https://www.redhat.com/archives/libvir-list/2013-January/msg00013.html
>
> Revert of the feature:
> https://libvirt.org/git/?p=libvirt.git;a=patch;
> h=ce346623c19f82f4b35f3466e2ee4066847b750c
>
> Unrevert:
> https://www.redhat.com/archives/libvir-list/2015-June/msg00814.html
>
>
> @Srikanth
> Is this known to have worked at some point? Because it might be the case
> that the distro is carrying these patches downstream. If that is the case I
> would like to know which distro + version, so we can compare the setups.
No, this was uncovered as part of adding new testcases to our existing
test bucket. So we have not executed this testcase before.
== Comment: #8 - Daniel Henrique Barboza <[email protected]> - 2019-08-07
15:32:47 ==
The error message "unpriv_sgio is not supported by this kernel" comes from a
Libvirt code that verifies if the file 'unpriv_sgio' exists in the sysfs path
of the device. In case it doesn't, this error message is thrown.
Fabiano is right in comment #5: the feature that implemented
unpriv_sgio didn't make it upstream. However, I found out that the
RHEL 7.4 manual [1] talks about the feature. With that in mind, I went
to a RHEL 7.6 server and verified that the feature exists in its 3.10
kernel by finding references of 'QUEUE_FLAG_UNPRIV_SGIO' in the kernel
source code. This symbol belongs to the feature implementation that
didn't make upstream, as Fabiano found out [2]:
[danielhb@kop5 3.10.0-957.el7.ppc64le]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.6 (Maipo)
[danielhb@kop5 3.10.0-957.el7.ppc64le]$ pwd
/usr/src/kernels/3.10.0-957.el7.ppc64le
[danielhb@kop5 3.10.0-957.el7.ppc64le]$ grep -R 'QUEUE_FLAG_UNPRIV_SGIO'
include/linux/blkdev.h:#define QUEUE_FLAG_UNPRIV_SGIO 21 /* SG_IO free
for unprivileged users */
include/linux/blkdev.h: test_bit(QUEUE_FLAG_UNPRIV_SGIO,
&(q)->queue_flags)
[danielhb@kop5 3.10.0-957.el7.ppc64le]$
This is the path that Libvirt looks for when checking if a kernel has
'unpriv_sgio', in this case for a device 'sda':
[danielhb@kop5 ~]$ lsblk | grep sda
sda 8:0 0 1T 0 disk
[danielhb@kop5 ~]$ file /sys/dev/block/8\:0/queue/unpriv_sgio
/sys/dev/block/8:0/queue/unpriv_sgio: ASCII text
This proves that this RHEL 7.6 supports the feature. Going to the Ubuntu host
mentioned in comment #1, we see that the feature isn't available at all in its
kernel:
root@pkvmhab008:/usr/src/linux-headers-4.15.0-54-generic# grep -R
'QUEUE_FLAG_UNPRIV_SGIO' .
root@pkvmhab008:/usr/src/linux-headers-4.15.0-54-generic#
This is what happened, at least from my observation: Red Hat tried to push
the 'unpriv_sgio' feature upstream in the kernel, but for some reason it didn't
make it. They decided to backport it to its RHEL kernel tree anyway.
There are 2 paths to go from here. We either remove 'unpriv_sgio'
support from Libvirt or we push 'unpriv_sgio' support to the Ubuntu
kernel. I recommend the later. We can sit and discuss whether Libvirt
should support in upstream code a feature that apparently exists only
in downstream RHEL kernels (why doesn't Red Hat support this feature
in its downstream Libvirt that RHEL uses instead?), but this is a
discussion that I don't advise making in the community - the error
message is clear, the feature is optional (i.e. the user must set it
by hand) and it's not a regression to Ubuntu guests. Removing the
feature from upstream code, or even from Libvirt docs, is not worth
the effort.
Srikanth, I am aware of comment #3 and the importance of the feature.
But apparently this is a RHEL kernel only feature. As such, I'm
changing the component of this bug to 'kernel'.
Fabiano, not sure if you'll want to pursue this kernel feature in Ubuntu, so
I'll leave the bug assigned to you. Feel free to reset the assignee if you're
not available to do this.
[1]
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Virtualization_Deployment_and_Administration_Guide/sect-Storage_Volumes-Adding_storage_devices_to_guests.html
[2] https://lkml.org/lkml/2013/5/23/294
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu-power-systems/+bug/1840026/+subscriptions
--
Mailing list: https://launchpad.net/~kernel-packages
Post to : [email protected]
Unsubscribe : https://launchpad.net/~kernel-packages
More help : https://help.launchpad.net/ListHelp