diff options
author | slashdd <[email protected]> | 2016-09-20 13:07:58 -0400 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2016-09-20 10:07:58 -0700 |
commit | 792517389fad5c495a2738b61c2e9c65dedaaa9a (patch) | |
tree | 5eef2ac0ecc1db47b3f11ec4ba12a97b6427e1b7 /lib | |
parent | 25e2ab16be74cb37934e6736a1dc10fd50a00c56 (diff) |
Change /etc/mtab to /proc/self/mounts
Fix misleading error message:
"The /dev/zfs device is missing and must be created.", if /etc/mtab is missing.
Reviewed-by: Richard Laager <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Eric Desrochers <[email protected]>
Closes #4680
Closes #5029
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libspl/include/sys/mnttab.h | 2 | ||||
-rwxr-xr-x | lib/libzfs/libzfs_dataset.c | 11 | ||||
-rw-r--r-- | lib/libzfs/libzfs_mount.c | 8 | ||||
-rwxr-xr-x | lib/libzfs/libzfs_util.c | 6 |
4 files changed, 14 insertions, 13 deletions
diff --git a/lib/libspl/include/sys/mnttab.h b/lib/libspl/include/sys/mnttab.h index 21d89658c..026a8fa7b 100644 --- a/lib/libspl/include/sys/mnttab.h +++ b/lib/libspl/include/sys/mnttab.h @@ -38,7 +38,7 @@ #undef MNTTAB #endif /* MNTTAB */ -#define MNTTAB "/etc/mtab" +#define MNTTAB "/proc/self/mounts" #define MNT_LINE_MAX 4096 #define MNT_TOOLONG 1 /* entry exceeds MNT_LINE_MAX */ diff --git a/lib/libzfs/libzfs_dataset.c b/lib/libzfs/libzfs_dataset.c index 3ac31ad1d..84fe71734 100755 --- a/lib/libzfs/libzfs_dataset.c +++ b/lib/libzfs/libzfs_dataset.c @@ -1908,9 +1908,9 @@ zfs_unset_recvd_props_mode(zfs_handle_t *zhp, uint64_t *cookie) * zfs_prop_get_int() are built using this interface. * * Certain properties can be overridden using 'mount -o'. In this case, scan - * the contents of the /etc/mtab entry, searching for the appropriate options. - * If they differ from the on-disk values, report the current values and mark - * the source "temporary". + * the contents of the /proc/self/mounts entry, searching for the + * appropriate options. If they differ from the on-disk values, report the + * current values and mark the source "temporary". */ static int get_numeric_property(zfs_handle_t *zhp, zfs_prop_t prop, zprop_source_t *src, @@ -1981,8 +1981,9 @@ get_numeric_property(zfs_handle_t *zhp, zfs_prop_t prop, zprop_source_t *src, /* * Because looking up the mount options is potentially expensive - * (iterating over all of /etc/mtab), we defer its calculation until - * we're looking up a property which requires its presence. + * (iterating over all of /proc/self/mounts), we defer its + * calculation until we're looking up a property which requires + * its presence. */ if (!zhp->zfs_mntcheck && (mntopt_on != NULL || prop == ZFS_PROP_MOUNTED)) { diff --git a/lib/libzfs/libzfs_mount.c b/lib/libzfs/libzfs_mount.c index 8c7f32638..44781679d 100644 --- a/lib/libzfs/libzfs_mount.c +++ b/lib/libzfs/libzfs_mount.c @@ -347,8 +347,8 @@ zfs_add_option(zfs_handle_t *zhp, char *options, int len, return (0); /* - * zfs_prop_get_int() to not used to ensure our mount options - * are not influenced by the current /etc/mtab contents. + * zfs_prop_get_int() is not used to ensure our mount options + * are not influenced by the current /proc/self/mounts contents. */ value = getprop_uint64(zhp, prop, &source); @@ -1184,8 +1184,8 @@ mountpoint_compare(const void *a, const void *b) * Unshare and unmount all datasets within the given pool. We don't want to * rely on traversing the DSL to discover the filesystems within the pool, * because this may be expensive (if not all of them are mounted), and can fail - * arbitrarily (on I/O error, for example). Instead, we walk /etc/mtab and - * gather all the filesystems that are currently mounted. + * arbitrarily (on I/O error, for example). Instead, we walk /proc/self/mounts + * and gather all the filesystems that are currently mounted. */ int zpool_disable_datasets(zpool_handle_t *zhp, boolean_t force) diff --git a/lib/libzfs/libzfs_util.c b/lib/libzfs/libzfs_util.c index 3c388a3a0..4988e8115 100755 --- a/lib/libzfs/libzfs_util.c +++ b/lib/libzfs/libzfs_util.c @@ -67,9 +67,9 @@ libzfs_error_init(int error) "loaded.\nTry running '/sbin/modprobe zfs' as root " "to load them.\n")); case ENOENT: - return (dgettext(TEXT_DOMAIN, "The /dev/zfs device is " - "missing and must be created.\nTry running 'udevadm " - "trigger' as root to create it.\n")); + return (dgettext(TEXT_DOMAIN, "/dev/zfs and /proc/self/mounts " + "are required.\nTry running 'udevadm trigger' and 'mount " + "-t proc proc /proc' as root.\n")); case ENOEXEC: return (dgettext(TEXT_DOMAIN, "The ZFS modules cannot be " "auto-loaded.\nTry running '/sbin/modprobe zfs' as " |