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 <sebastien.roy@delphix.com>
Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tom Caputi <tcaputi@datto.com>
Closes #8762 
Closes #8811
This commit is contained in:
Tom Caputi 2019-05-25 16:46:32 -04:00 committed by Brian Behlendorf
parent 2fb37bcadd
commit b746c397e3
1 changed files with 5 additions and 2 deletions

View File

@ -6622,10 +6622,13 @@ share_mount(int op, int argc, char **argv)
/* /*
* libshare isn't mt-safe, so only do the operation in parallel * 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, 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; ret = share_mount_state.sm_status;
for (int i = 0; i < cb.cb_used; i++) for (int i = 0; i < cb.cb_used; i++)