From f85bf35bc9a1661884d1dcbaa8ae288aa3a7fe1d Mon Sep 17 00:00:00 2001 From: Jorgen Lundman Date: Tue, 23 Jan 2024 09:44:37 +0900 Subject: [PATCH] Build mountpoint was incorrect BOOM/games/scifi would attempt to mount lowest at E:/scifi instead of the correct E:/games/scifi. More work was needed to build the mountpoint Signed-off-by: Jorgen Lundman --- lib/libzfs/os/windows/libzfs_mount_os.c | 9 ++++++--- module/os/windows/zfs/zfs_vnops_windows_mount.c | 9 ++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/libzfs/os/windows/libzfs_mount_os.c b/lib/libzfs/os/windows/libzfs_mount_os.c index e7adb7a25344..1ea90917fb45 100644 --- a/lib/libzfs/os/windows/libzfs_mount_os.c +++ b/lib/libzfs/os/windows/libzfs_mount_os.c @@ -162,10 +162,13 @@ do_mount(zfs_handle_t *zhp, const char *dir, const char *optptr, int mflag) entry.mnt_special); char *part = strstr(dir, parent); if (part) dir = &part[strlen(parent) - 1]; + snprintf(zc.zc_value, sizeof (zc.zc_value), + "\\??\\%s%s", entry.mnt_mountp, dir); + } else { + snprintf(zc.zc_value, sizeof (zc.zc_value), + "\\??\\%c:%s", tolower(driveletter[0]), + dir); } - - snprintf(zc.zc_value, sizeof (zc.zc_value), - "\\??\\%c:%s", tolower(driveletter[0]), dir); } } else { /* snapshot */ diff --git a/module/os/windows/zfs/zfs_vnops_windows_mount.c b/module/os/windows/zfs/zfs_vnops_windows_mount.c index 245c6184a26c..8fee928072a0 100644 --- a/module/os/windows/zfs/zfs_vnops_windows_mount.c +++ b/module/os/windows/zfs/zfs_vnops_windows_mount.c @@ -1357,7 +1357,14 @@ zfs_vnop_mount(PDEVICE_OBJECT DiskDevice, PIRP Irp, PIO_STACK_LOCATION IrpSp) SetNextDriveletterManually(mountmgr, &dcb->device_name); } - } // !MOUNTMGR_IS_DRIVE_LETTER(&actualDriveletter) + } else { // !MOUNTMGR_IS_DRIVE_LETTER(&actualDriveletter) + + // mountpath is "/DosDevices/E:" but we need to + // save that in dcb, for future query. + FreeUnicodeString(&dcb->mountpoint); + RtlDuplicateUnicodeString(0, &mountpath, + &dcb->mountpoint); + } } else { OBJECT_ATTRIBUTES poa; // 36(uuid) + 6 (punct) + 6 (Volume)