libzfs: Fix mounting datasets under thread limit pressure

During parallel zpool import, /sbin/zpool will create a separate thread
pool for each pool, used to mount that pool's datasets.  If the total
thread count exceed's the system's limit on threads per process, then
tpool_dispatch may fail.  If it does, directly execute the mount
operation instead.

Sponsored by:	Axcient
Signed-off-by:	Alan Somers <asomers@FreeBSD.org>
Fixes #16172
This commit is contained in:
Alan Somers 2024-05-07 14:21:31 -06:00 committed by Alan Somers
parent 075068cc67
commit 829a843c47
1 changed files with 4 additions and 1 deletions

View File

@ -1098,7 +1098,10 @@ zfs_dispatch_mount(libzfs_handle_t *hdl, zfs_handle_t **handles,
mnt_param->mnt_func = func;
mnt_param->mnt_data = data;
(void) tpool_dispatch(tp, zfs_mount_task, (void*)mnt_param);
if (tpool_dispatch(tp, zfs_mount_task, (void*)mnt_param)) {
/* Could not dispatch to thread pool; execute directly */
zfs_mount_task((void*)mnt_param);
}
}
/*