mountpoint will fail when /proc isn't available, which lessens its usefulness as a tool to detect mountpoints. In this case, mimic what sysvinit's mountpoint tool does and compare the device and inode values of root and specified target. Signed-off-by: Dave Reisner <dreisner@xxxxxxxxxxxxx> --- Rationale: I think this patch is especially important for folks who are still using sysvinit. Particularly in the case of a user not having an initramfs, the userspace initscripts need to be able to detect, without fail, the presence of /proc, /sys, and /dev being mounted (and mount them when they aren't). While checking for /proc first and mounting it when mountpoint returns failure will result in the correct action, it's reliant on broken behavior -- that is, mountpoint returned false because /proc isn't mounted, not because /proc isn't a mountpoint. sys-utils/mountpoint.c | 15 +++++++++++++-- 1 files changed, 13 insertions(+), 2 deletions(-) diff --git a/sys-utils/mountpoint.c b/sys-utils/mountpoint.c index 065d96b..1297d82 100644 --- a/sys-utils/mountpoint.c +++ b/sys-utils/mountpoint.c @@ -46,8 +46,19 @@ static dev_t dir_to_device(const char *spec) struct libmnt_fs *fs; dev_t res = (dev_t)-1; - if (!tb) - return (dev_t)-1; + if (!tb) { + struct stat root_st, spec_st; + + /* fallback on using stat when /proc isn't available. return success when + * we're examining different devices or encounter an exact match for the + * root device */ + if (stat(spec, &spec_st) == 0 && stat("/", &root_st) == 0 && + root_st.st_dev != spec_st.st_dev || + (root_st.st_dev == spec_st.st_dev && root_st.st_ino == spec_st.st_ino)) + res = spec_st.st_dev; + + return res; + } fs = mnt_table_find_target(tb, spec, MNT_ITER_BACKWARD); if (fs && mnt_fs_get_target(fs)) -- 1.7.7 -- To unsubscribe from this list: send the line "unsubscribe util-linux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html