a7cc039 qemuDomainBuildNamespace: Move /dev/* mountpoints later

Authored and Committed by mprivozn 7 years ago
    qemuDomainBuildNamespace: Move /dev/* mountpoints later
    
    When setting up mount namespace for a qemu domain the following
    steps are executed:
    
    1) get list of mountpoints under /dev/
    2) move them to /var/run/libvirt/qemu/$domName.ext
    3) start constructing new device tree under /var/run/libvirt/qemu/$domName.dev
    4) move the mountpoint of the new device tree to /dev
    5) restore original mountpoints from step 2)
    
    Note the problem with this approach is that if some device in step
    3) requires access to a mountpoint from step 2) it will fail as
    the mountpoint is not there anymore. For instance consider the
    following domain disk configuration:
    
        <disk type='file' device='disk'>
          <driver name='qemu' type='raw'/>
          <source file='/dev/shm/vhostmd0'/>
          <target dev='vdb' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
        </disk>
    
    In this case operation fails as we are unable to create vhostmd0
    in the new device tree because after step 2) there is no /dev/shm
    anymore. Leave aside fact that we shouldn't try to create devices
    living in other mountpoints. That's a separate bug that will be
    addressed later.
    
    Currently, the order described above is rearranged to:
    
    1) get list of mountpoints under /dev/
    2) start constructing new device tree under /var/run/libvirt/qemu/$domName.dev
    3) move them to /var/run/libvirt/qemu/$domName.ext
    4) move the mountpoint of the new device tree to /dev
    5) restore original mountpoints from step 3)
    
    Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
    Reviewed-by: Cedric Bosdonnat <cbosdonnat@suse.com>
    
        
file modified
+24 -24