Bug 2040555

Summary: Pinning iothread to not allowed cpuset fails but vm xml got updated unexpectedly
Product: Red Hat Enterprise Linux 9 Reporter: Fangge Jin <fjin>
Component: libvirtAssignee: Peter Krempa <pkrempa>
libvirt sub component: General QA Contact: Luyao Huang <lhuang>
Status: CLOSED ERRATA Docs Contact:
Severity: medium    
Priority: unspecified CC: dzheng, jdenemar, lhuang, pkrempa, virt-maint, xuzhang, yalzhang
Version: 9.0Keywords: Triaged
Target Milestone: rc   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: libvirt-8.1.0-1.el9 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2022-11-15 10:03:03 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version: 8.1.0
Embargoed:

Description Fangge Jin 2022-01-14 04:59:50 UTC
Description of problem:
Pinning iothread to not allowed cpuset returns success unexpectedly

Version-Release number of selected component:
libvirt-7.10.0-1.el9.x86_64 or libvirt-8.0.0-0rc1.1.el9.x86_64
kernel-5.14.0-34.el9.x86_64


How reproducible:
100%

Steps to Reproduce:
1. Start a vm

2. Set allowed cpuset on host:
# echo "0,2,3,4,6,8" > /sys/fs/cgroup/machine.slice/cpuset.cpus

3. Add iothread and set iothreadpin
# virsh iothreadadd vm1 3

# virsh iothreadpin vm1 3 9-19
error: cannot set CPU affinity on process 13904: Invalid argument

4. Check vm xml
# virsh dumpxml vm1|grep iothread
  <iothreads>1</iothreads>
  <iothreadids>
    <iothread id='3'/>
  </iothreadids>
    <iothreadpin iothread='3' cpuset='9-19'/>

5. Save and restore vm
# virsh managedsave vm1

Domain 'vm1' state saved by libvirt

6. # virsh start vm1
error: Failed to start domain 'vm1'
error: cannot set CPU affinity on process 15136: Invalid argument

Actual results:
Vm xml is updated when iothreadpin fails, and vm can't be restored after saving

Expected results:
Vm xml should not be updated when iothreadpin fails

Comment 1 Peter Krempa 2022-01-18 08:59:57 UTC
The code indeed updates the internal definition before setting the pinning on the process.

Comment 2 Peter Krempa 2022-01-18 13:20:07 UTC
Fixed upstream:

commit ce20fe5c2abd8b5bf2064452a7fc9ca54eecaf1f
Author: Peter Krempa <pkrempa>
Date:   Tue Jan 18 10:08:03 2022 +0100

    qemuDomainPinIOThread: Update live definition after process pinning
    
    Otherwise we'll keep using the new pinning value even if it can't be
    applied to the thread.
    
    Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2040555
    Signed-off-by: Peter Krempa <pkrempa>
    Reviewed-by: Ján Tomko <jtomko>
    Reviewed-by: Pavel Hrdina <phrdina>

v8.0.0-64-gce20fe5c2a

Comment 5 Luyao Huang 2022-04-15 07:52:42 UTC
Verify this bug with libvirt-8.2.0-1.el9.x86_64:

1. Start a vm
# virsh list --all
 Id   Name   State
----------------------
 3    vm1    running

2. Set allowed cpuset on host:
# echo "0-3" > /sys/fs/cgroup/machine.slice/cpuset.cpus

3. Add iothread and set iothreadpin
# virsh iothreadadd vm1 3

# virsh iothreadpin vm1 3 4-7
error: cannot set CPU affinity on process 171179: Invalid argument

4. Check vm xml
# virsh dumpxml vm1|grep iothread
  <iothreads>1</iothreads>
  <iothreadids>
    <iothread id='3'/>
  </iothreadids>

5. Save and restore vm
# virsh managedsave vm1

Domain 'vm1' state saved by libvirt

# virsh start vm1
Domain 'vm1' started

6. check vm xml
# virsh dumpxml vm1 |grep iothread
  <iothreads>1</iothreads>
  <iothreadids>
    <iothread id='3'/>
  </iothreadids>

Comment 7 errata-xmlrpc 2022-11-15 10:03:03 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 (Low: libvirt 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-2022:8003