From b0d7cc9724e3bebf3cb10c386483b9a8c385f61a Mon Sep 17 00:00:00 2001 From: Andrey Vagin Date: Thu, 9 Aug 2012 19:47:20 +0400 Subject: [PATCH] mount: Add suport of empty binfmt_misc (v3) Binfmt is global fs. We could check for its inhabitants intersect on source and destination, but for the 1st time it's enough just to check this one being empty. Signed-off-by: Andrey Vagin Signed-off-by: Pavel Emelyanov --- mount.c | 35 +++++++++++++++++++++++++++-- test/zdtm/live/static/mountpoints.c | 5 +++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/mount.c b/mount.c index b80ff478a..68a5f367a 100644 --- a/mount.c +++ b/mount.c @@ -179,7 +179,7 @@ static struct mount_info *mnt_build_tree(struct mount_info *list) return tree; } -DIR *open_mountpoint(struct mount_info *pm) +static DIR *open_mountpoint(struct mount_info *pm) { int fd, ret; char path[PATH_MAX + 1]; @@ -222,7 +222,7 @@ DIR *open_mountpoint(struct mount_info *pm) return fdir; } -int close_mountpoint(DIR *dfd) +static int close_mountpoint(DIR *dfd) { if (closedir(dfd)) { pr_perror("Unable to close directory"); @@ -231,11 +231,42 @@ int close_mountpoint(DIR *dfd) return 0; } +static int binfmt_misc_dump(struct mount_info *pm) +{ + int ret = -1; + struct dirent *de; + DIR *fdir = NULL; + + fdir = open_mountpoint(pm); + if (fdir == NULL) + return -1; + + while ((de = readdir(fdir))) { + if (!strcmp(de->d_name, ".")) + continue; + if (!strcmp(de->d_name, "..")) + continue; + if (!strcmp(de->d_name, "register")) + continue; + if (!strcmp(de->d_name, "status")) + continue; + + pr_err("binfmt_misc isn't empty: %s\n", de->d_name); + goto out; + } + + ret = 0; +out: + close_mountpoint(fdir); + return ret; +} + static struct fstype fstypes[] = { { "unsupported" }, { "proc" }, { "sysfs" }, { "devtmpfs" }, + { "binfmt_misc", binfmt_misc_dump }, }; struct fstype *find_fstype_by_name(char *fst) diff --git a/test/zdtm/live/static/mountpoints.c b/test/zdtm/live/static/mountpoints.c index 6f7afd69e..303500ce1 100644 --- a/test/zdtm/live/static/mountpoints.c +++ b/test/zdtm/live/static/mountpoints.c @@ -78,6 +78,11 @@ done: fail("Can't mount proc"); return 1; } + if (mount("none", MPTS_ROOT"/kernel/sys/fs/binfmt_misc", + "binfmt_misc", 0, "") < 0) { + fail("Can't mount proc"); + return 1; + } fd = open(MPTS_ROOT"/kernel/meminfo", O_RDONLY); if (fd == -1)