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 Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: George Wilson <gwilson@delphix.com> Signed-off-by: Alan Somers <asomers@FreeBSD.org> Closes #16178 Fixes #16172
This commit is contained in:
parent
f625d038d2
commit
eced2e2f1e
|
@ -1098,7 +1098,10 @@ zfs_dispatch_mount(libzfs_handle_t *hdl, zfs_handle_t **handles,
|
||||||
mnt_param->mnt_func = func;
|
mnt_param->mnt_func = func;
|
||||||
mnt_param->mnt_data = data;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue