libbe(3): Descend into children of datasets w/ mountpoint=none

These datasets will generally be canmount=noauto,mountpoint=none (e.g.
zroot/var) but have children that may need to be mounted. Instead of
skipping that segment for no good reason, descend.

Submitted by:	Wes Maag
Reported by:	Wes Maag
MFC after:	3 days
This commit is contained in:
Kyle Evans 2019-05-16 02:11:33 +00:00
parent e7e3d5223f
commit 88a950762a
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=347640

View File

@ -99,13 +99,12 @@ be_mount_iter(zfs_handle_t *zfs_hdl, void *data)
if (strcmp("none", zfs_mnt) == 0) { if (strcmp("none", zfs_mnt) == 0) {
/* /*
* mountpoint=none; we'll mount it at info->mountpoint assuming * mountpoint=none; we'll mount it at info->mountpoint assuming
* we're at the root. If we're not at the root... that's less * we're at the root. If we're not at the root, we're likely
* than stellar and not entirely sure what to do with that. * at some intermediate dataset (e.g. zroot/var) that will have
* For now, we won't treat it as an error condition -- we just * children that may need to be mounted.
* won't mount it, and we'll continue on.
*/ */
if (info->depth > 0) if (info->depth > 0)
return (0); goto skipmount;
snprintf(tmp, BE_MAXPATHLEN, "%s", info->mountpoint); snprintf(tmp, BE_MAXPATHLEN, "%s", info->mountpoint);
} else { } else {
@ -136,6 +135,7 @@ be_mount_iter(zfs_handle_t *zfs_hdl, void *data)
if (!info->deepmount) if (!info->deepmount)
return (0); return (0);
skipmount:
++info->depth; ++info->depth;
err = zfs_iter_filesystems(zfs_hdl, be_mount_iter, info); err = zfs_iter_filesystems(zfs_hdl, be_mount_iter, info);
--info->depth; --info->depth;