Skip to content

zfs export pool1 hangs if pool is on network share (SMB, NFSv4.2, ...) #624

Description

@gisburn

Steps to reproduce:

  1. Install WinZFS from https://github.com/openzfsonwindows/openzfs/releases/download/zfswin-2.4.1rc14/OpenZFSOnWindows-debug-2.4.1rc14e.exe

  2. Create zfspool
    ---- snip ----

# cd into NFS subdir
truncate -s $((128*1024*1024*1024)) poolfile1.bin
chmod a+rw poolfile1.bin
# Create pool:
# - ashift=15 defines 32k blocks
# - autotrim=on makes sure that we use "poolfile1.bin" as sparse file
# - casesensitivity=insensitive defines a case-insensitive filesystem
# - driveletter=U sets the fs mount point to U:
# - optionally you can add -O utf8only=on
zpool.exe create -o ashift=15 -o autotrim=on -O xattr=dir -O casesensitivity=insensitive -O driveletter=U nfspool1 "\\\\?\\$(cygpath -w "$PWD/poolfile1.bin")"

---- snip ----

  1. Unmount+remove ZFS pool:
    ---- snip ----
    zpool export nfspool1 ---- snip ----

Result:
zpool export hangs after the following output:
---- snip ----

$ zpool export nfspool1
zunmount(nfspool1,U:/) running
zunmount(nfspool1,U:/) returns 0

---- snip ----

Stacktrace looks like this:
---- snip ----

(1a34.1ea0): Wake debugger - code 80000007 (first chance)
ntdll!NtDeviceIoControlFile+0x14:
00007ff9`c07cd684 c3              ret
0:000> kp
 # Child-SP          RetAddr           Call Site
00 000000ca`f675d198 00007ff9`be11dddb ntdll!NtDeviceIoControlFile+0x14
01 000000ca`f675d1a0 00007ff9`c0635951 KERNELBASE!DeviceIoControl+0x6b
02 000000ca`f675d210 00007ff7`ed585b54 KERNEL32!DeviceIoControl+0x81
03 000000ca`f675d260 00007ff7`ed585a31 zpool!zcmd_ioctl_compat(int fd = 0n552, int request = 0n3, struct zfs_cmd * zc = 0x000000ca`f675d490, int cflag = 0n0)+0xe4 [C:\src\openzfs\lib\libzfs_core\os\windows\libzfs_core_ioctl.c @ 77] 
04 000000ca`f675d2f0 00007ff7`ed5809f1 zpool!lzc_ioctl_fd_os(int fd = 0n552, unsigned long request = 3, struct zfs_cmd * zc = 0x000000ca`f675d490)+0x41 [C:\src\openzfs\lib\libzfs_core\os\windows\libzfs_core_ioctl.c @ 133] 
05 000000ca`f675d340 00007ff7`ed5561d8 zpool!lzc_ioctl_fd(int fd = 0n552, unsigned long ioc = 3, struct zfs_cmd * zc = 0x000000ca`f675d490)+0x41 [C:\src\openzfs\lib\libzfs_core\libzfs_core.c @ 197] 
06 000000ca`f675d400 00007ff7`ed546ddb zpool!zfs_ioctl(struct libzfs_handle * hdl = 0x0000028f`6964ecb0, int request = 0n3, struct zfs_cmd * zc = 0x000000ca`f675d490)+0x28 [C:\src\openzfs\lib\libzfs\libzfs_util.c @ 795] 
07 000000ca`f675d440 00007ff7`ed546d38 zpool!zpool_export_common(struct zpool_handle * zhp = 0x0000028f`6964f860, <unnamed-tag> force = B_FALSE (0n0), <unnamed-tag> hardforce = B_FALSE (0n0), char * log_str = 0x00007ff7`ee610520 "C:\Program Files\OpenZFS On Windows\zpool.exe export nfspool1")+0x9b [C:\src\openzfs\lib\libzfs\libzfs_pool.c @ 1886] 
08 000000ca`f675e650 00007ff7`ed515f77 zpool!zpool_export(struct zpool_handle * zhp = 0x0000028f`6964f860, <unnamed-tag> force = B_FALSE (0n0), char * log_str = 0x00007ff7`ee610520 "C:\Program Files\OpenZFS On Windows\zpool.exe export nfspool1")+0x28 [C:\src\openzfs\lib\libzfs\libzfs_pool.c @ 1910] 
09 000000ca`f675e690 00007ff7`ed4f4745 zpool!zpool_export_one(struct zpool_handle * zhp = 0x0000028f`6964f860, void * data = 0x000000ca`f675e840)+0xb7 [C:\src\openzfs\cmd\zpool\zpool_main.c @ 2433] 
0a 000000ca`f675e6e0 00007ff7`ed4f48d1 zpool!pool_list_iter(struct zpool_list * zlp = 0x0000028f`69630930, int unavail = 0n1, <function> * func = 0x00007ff7`ed515ec0, void * data = 0x000000ca`f675e840)+0x85 [C:\src\openzfs\cmd\zpool\zpool_iter.c @ 240] 
0b 000000ca`f675e740 00007ff7`ed4ffb49 zpool!for_each_pool(int argc = 0n1, char ** argv = 0x0000028f`69637840, <unnamed-tag> unavail = B_TRUE (0n1), struct zprop_list ** proplist = 0x00000000`00000000, <unnamed-tag> type = ZFS_TYPE_POOL (0n8), <unnamed-tag> literal = B_FALSE (0n0), <function> * func = 0x00007ff7`ed515ec0, void * data = 0x000000ca`f675e840)+0xb1 [C:\src\openzfs\cmd\zpool\zpool_iter.c @ 289] 
0c 000000ca`f675e7c0 00007ff7`ed4f68b3 zpool!zpool_do_export(int argc = 0n1, char ** argv = 0x0000028f`69637840)+0x2a9 [C:\src\openzfs\cmd\zpool\zpool_main.c @ 2559] 
0d 000000ca`f675e890 00007ff7`ee25bcf9 zpool!main(int argc = 0n3, char ** argv = 0x0000028f`6962bc10)+0x2a3 [C:\src\openzfs\cmd\zpool\zpool_main.c @ 13901] 
0e 000000ca`f675fac0 00007ff7`ee25bba2 zpool!invoke_main(void)+0x39 [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 79] 
0f 000000ca`f675fb10 00007ff7`ee25ba5e zpool!__scrt_common_main_seh(void)+0x132 [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 288] 
10 000000ca`f675fb80 00007ff7`ee25bd8e zpool!__scrt_common_main(void)+0xe [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 331] 
11 000000ca`f675fbb0 00007ff9`c0637374 zpool!mainCRTStartup(void * __formal = 0x000000ca`f6891000)+0xe [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_main.cpp @ 17] 
12 000000ca`f675fbe0 00007ff9`c077cc91 KERNEL32!BaseThreadInitThunk+0x14
13 000000ca`f675fc10 00000000`00000000 ntdll!RtlUserThreadStart+0x21

---- snip ----

I don't know how to get a stack trace from the kernel side... ;-(

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions