remoteloop: pass filename to create_device

This makes LoopClient simpler to use in the common case.
This commit is contained in:
Lars Karlitski 2019-10-06 00:11:26 +02:00
parent 356f62058f
commit 0dd60b3abf
2 changed files with 4 additions and 4 deletions

View file

@ -20,9 +20,7 @@ def mount(source, dest, *options):
@contextlib.contextmanager @contextlib.contextmanager
def loop_device(loop_client, image, size, offset=0): def loop_device(loop_client, image, size, offset=0):
fd = os.open(image, os.O_RDWR | os.O_DIRECT) devname = loop_client.create_device(image, offset=offset, sizelimit=size)
devname = loop_client.create_device(fd, offset=offset, sizelimit=size)
os.close(fd)
path = f"/dev/{devname}" path = f"/dev/{devname}"
try: try:
yield path yield path

View file

@ -112,9 +112,10 @@ class LoopClient:
def __init__(self, sock): def __init__(self, sock):
self.sock = sock self.sock = sock
def create_device(self, fd, offset=None, sizelimit=None): def create_device(self, filename, offset=None, sizelimit=None):
req = {} req = {}
fds = array.array("i") fds = array.array("i")
fd = os.open(filename, os.O_RDWR | os.O_DIRECT)
dir_fd = os.open("/dev", os.O_DIRECTORY) dir_fd = os.open("/dev", os.O_DIRECTORY)
fds.append(fd) fds.append(fd)
@ -129,6 +130,7 @@ class LoopClient:
dump_fds(self.sock, req, fds) dump_fds(self.sock, req, fds)
os.close(dir_fd) os.close(dir_fd)
os.close(fd)
ret = json.loads(self.sock.recv(1024)) ret = json.loads(self.sock.recv(1024))