Message ID | 20240201183024.145424-5-jandryuk@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | libxl: blktap/tapback support | expand |
On Thu, Feb 01, 2024 at 01:30:24PM -0500, Jason Andryuk wrote: > diff --git a/tools/libs/light/libxl_disk.c b/tools/libs/light/libxl_disk.c > @@ -1337,10 +1338,18 @@ char *libxl__device_disk_find_local_path(libxl__gc *gc, > LOGD(DEBUG, guest_domid, "Attempting to read node %s", pdpath); > path = libxl__xs_read(gc, XBT_NULL, pdpath); > > - if (path) > + if (path) { > LOGD(DEBUG, guest_domid, "Accessing cooked block device %s", path); > - else > - LOGD(DEBUG, guest_domid, "No physical-device-path, can't access locally."); > + > + /* tapdisk exposes disks locally over UNIX socket NBD. */ > + if (disk->backend == LIBXL_DISK_BACKEND_TAP) { > + path = libxl__sprintf(gc, "nbd+unix:///?socket=%s", path); > + LOGD(DEBUG, guest_domid, > + "Directly accessing local TAP target %s", path); > + } > + } else > + LOGD(DEBUG, guest_domid, > + "No physical-device-path, can't access locally."); Here, the coding style call to have both side of the if..else to have { } or none of them. Could you add {}-block for the else side? Beside that, patch looks fine to me: Reviewed-by: Anthony PERARD <anthony.perard@citrix.com> Thanks,
diff --git a/tools/libs/light/libxl_disk.c b/tools/libs/light/libxl_disk.c index 59ff996837..b65cad33cc 100644 --- a/tools/libs/light/libxl_disk.c +++ b/tools/libs/light/libxl_disk.c @@ -1317,7 +1317,8 @@ char *libxl__device_disk_find_local_path(libxl__gc *gc, * If the format isn't raw and / or we're using a script, then see * if the script has written a path to the "cooked" node */ - if (disk->script && guest_domid != INVALID_DOMID) { + if ((disk->script && guest_domid != INVALID_DOMID) || + disk->backend == LIBXL_DISK_BACKEND_TAP) { libxl__device device; char *be_path, *pdpath; int rc; @@ -1337,10 +1338,18 @@ char *libxl__device_disk_find_local_path(libxl__gc *gc, LOGD(DEBUG, guest_domid, "Attempting to read node %s", pdpath); path = libxl__xs_read(gc, XBT_NULL, pdpath); - if (path) + if (path) { LOGD(DEBUG, guest_domid, "Accessing cooked block device %s", path); - else - LOGD(DEBUG, guest_domid, "No physical-device-path, can't access locally."); + + /* tapdisk exposes disks locally over UNIX socket NBD. */ + if (disk->backend == LIBXL_DISK_BACKEND_TAP) { + path = libxl__sprintf(gc, "nbd+unix:///?socket=%s", path); + LOGD(DEBUG, guest_domid, + "Directly accessing local TAP target %s", path); + } + } else + LOGD(DEBUG, guest_domid, + "No physical-device-path, can't access locally."); goto out; } diff --git a/tools/libs/light/libxl_dm.c b/tools/libs/light/libxl_dm.c index 14b593110f..f7c796011d 100644 --- a/tools/libs/light/libxl_dm.c +++ b/tools/libs/light/libxl_dm.c @@ -1915,7 +1915,6 @@ static int libxl__build_device_model_args_new(libxl__gc *gc, continue; } - assert(disks[i].backend != LIBXL_DISK_BACKEND_TAP); target_path = libxl__device_disk_find_local_path(gc, guest_domid, &disks[i], true);
blktap exposes disks over UNIX socket Network Block Device (NBD). Modify libxl__device_disk_find_local_path() to provide back the QEMU-formatted NBD path. This allows tapdisk to be used for booting an HVM. Use the nbd+unix:/// format specified by the protocol at https://github.com/NetworkBlockDevice/nbd/blob/master/doc/uri.md Signed-off-by: Jason Andryuk <jandryuk@gmail.com> --- tools/libs/light/libxl_disk.c | 17 +++++++++++++---- tools/libs/light/libxl_dm.c | 1 - 2 files changed, 13 insertions(+), 5 deletions(-)