qvm-block: fix handling unusual devices attached to dom0
Simply get device major-minor from /dev/ device file. This is only partial solution, because this will work only for dom0 devices, but the same problem can apply to VM.
This commit is contained in:
parent
5f21099307
commit
11961cbbff
@ -31,6 +31,7 @@ import re
|
|||||||
import shutil
|
import shutil
|
||||||
import time
|
import time
|
||||||
import grp,pwd
|
import grp,pwd
|
||||||
|
import stat
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from qmemman_client import QMemmanClient
|
from qmemman_client import QMemmanClient
|
||||||
|
|
||||||
@ -116,6 +117,11 @@ def block_name_to_majorminor(name):
|
|||||||
if name.isdigit():
|
if name.isdigit():
|
||||||
return (int(name) / 256, int(name) % 256)
|
return (int(name) / 256, int(name) % 256)
|
||||||
|
|
||||||
|
if os.path.exists('/dev/%s' % name):
|
||||||
|
blk_info = os.stat(os.path.realpath('/dev/%s' % name))
|
||||||
|
if stat.S_ISBLK(blk_info.st_mode):
|
||||||
|
return (blk_info.st_rdev / 256, blk_info.st_rdev % 256)
|
||||||
|
|
||||||
major = 0
|
major = 0
|
||||||
minor = 0
|
minor = 0
|
||||||
dXpY_style = False
|
dXpY_style = False
|
||||||
@ -555,7 +561,7 @@ def usb_check_attached(xs_trans, backend_vm, device):
|
|||||||
continue
|
continue
|
||||||
dev = xs.read(xs_trans, '/local/domain/%d/backend/vusb/%s/%s/port/%s' % (backend_vm, vm, frontend_dev, port))
|
dev = xs.read(xs_trans, '/local/domain/%d/backend/vusb/%s/%s/port/%s' % (backend_vm, vm, frontend_dev, port))
|
||||||
if dev == "":
|
if dev == "":
|
||||||
continue
|
continue
|
||||||
# Sanitize device id
|
# Sanitize device id
|
||||||
if not usb_port_re.match(dev):
|
if not usb_port_re.match(dev):
|
||||||
print >> sys.stderr, "Invalid device id in backend VM %d @ %s/%s/port/%s" % \
|
print >> sys.stderr, "Invalid device id in backend VM %d @ %s/%s/port/%s" % \
|
||||||
@ -628,7 +634,7 @@ def usb_find_unused_frontend(xs_trans, backend_vm_xid, vm_xid, usb_ver):
|
|||||||
frontend_dev = last_frontend_dev + 1
|
frontend_dev = last_frontend_dev + 1
|
||||||
usb_setup(backend_vm_xid, vm_xid, frontend_dev, usb_ver)
|
usb_setup(backend_vm_xid, vm_xid, frontend_dev, usb_ver)
|
||||||
return '%d-%d' % (frontend_dev, 1)
|
return '%d-%d' % (frontend_dev, 1)
|
||||||
|
|
||||||
def usb_attach(vm, backend_vm, device, frontend=None, auto_detach=False, wait=True):
|
def usb_attach(vm, backend_vm, device, frontend=None, auto_detach=False, wait=True):
|
||||||
device_attach_check(vm, backend_vm, device, frontend)
|
device_attach_check(vm, backend_vm, device, frontend)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user