From b746c397e3fd7e72083d22d7ac1beb911679dac4 Mon Sep 17 00:00:00 2001 From: Tom Caputi Date: Sat, 25 May 2019 16:46:32 -0400 Subject: [PATCH] Disable parallel processing for 'zfs mount -l' Currently, 'zfs mount -a' will always attempt to parallelize work related to mounting as best it can. Unfortunately, when the user passes the '-l' option to load keys, this causes all threads to prompt the user for their keys at once, resulting in a confusing and racy user experience. This patch simply disables parallel mounting when using the '-l' flag. Reviewed by: Sebastien Roy Reviewed by: Brian Behlendorf Signed-off-by: Tom Caputi Closes #8762 Closes #8811 --- cmd/zfs/zfs_main.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cmd/zfs/zfs_main.c b/cmd/zfs/zfs_main.c index 6929a22463..c85154479c 100644 --- a/cmd/zfs/zfs_main.c +++ b/cmd/zfs/zfs_main.c @@ -6622,10 +6622,13 @@ share_mount(int op, int argc, char **argv) /* * libshare isn't mt-safe, so only do the operation in parallel - * if we're mounting. + * if we're mounting. Additionally, the key-loading option must + * be serialized so that we can prompt the user for their keys + * in a consistent manner. */ zfs_foreach_mountpoint(g_zfs, cb.cb_handles, cb.cb_used, - share_mount_one_cb, &share_mount_state, op == OP_MOUNT); + share_mount_one_cb, &share_mount_state, + op == OP_MOUNT && !(flags & MS_CRYPT)); ret = share_mount_state.sm_status; for (int i = 0; i < cb.cb_used; i++)