Thanks, Kirill!
I'm sorry, but this series is wrong.
I'll send another one soon.
20.06.2017 17:46, Kirill Tkhai пишет:
One minor nit below
On Tue, Jun 20, 2017 at 18:28, Stanislav Kinsburskiy wrote:
Call it on mount points tree building and abort in case NFS is overmounted.
This logic replaces the old one, which was checking for unsupported NFS monut
in validate_mounts. And the reason is that call to validate_mounts depends on
user argument, which is unsuitable for this case.
Signed-off-by: Stanislav Kinsburskiy <skinsbur...@virtuozzo.com>
---
criu/mount.c | 35 ++++++++++++++++++++++-------------
1 file changed, 22 insertions(+), 13 deletions(-)
diff --git a/criu/mount.c b/criu/mount.c
index cc54e68..46ad66c 100644
--- a/criu/mount.c
+++ b/criu/mount.c
@@ -397,6 +397,25 @@ static bool mounts_equal(struct mount_info *a, struct
mount_info *b)
*/
static char *mnt_roots;
+static bool nfs_mount(const struct mount_info *m)
+{
+ return !strcmp(m->fstype->name, "nfs") ||
+ !strcmp(m->fstype->name, "nfs4");
+
+}
+
+static bool unsupported_mount(const struct mount_info *m)
+{
+ struct mount_info *parent = m->parent;
+
+ if (m->parent && nfs_mount(parent)) {
m->parent is already dereferenced, so you may use just "parent"
instead of it.
+ pr_err("overmounted NFS (%s) is not supported yet:\n",
+ parent->mountpoint);
+ return true;
+ }
+ return false;
+}
+
static struct mount_info *mnt_build_ids_tree(struct mount_info *list, struct
mount_info *yard_mount)
{
struct mount_info *m, *root = NULL;
@@ -457,6 +476,9 @@ static struct mount_info *mnt_build_ids_tree(struct
mount_info *list, struct mou
m->parent = parent;
list_add_tail(&m->siblings, &parent->children);
+
+ if (unsupported_mount(m))
+ return NULL;
}
if (!root) {
@@ -739,16 +761,6 @@ static bool mnt_is_external(struct mount_info *m)
return 0;
}
-static bool unsupported_nfs_mount(struct mount_info *m)
-{
- if (!list_empty(&m->children)) {
- pr_err("overmounted NFS (%s) is not supported yet\n",
- m->mountpoint);
- return true;
- }
- return false;
-}
-
static int validate_mounts(struct mount_info *info, bool for_dump)
{
struct mount_info *m, *t;
@@ -819,9 +831,6 @@ skip_fstype:
m->mnt_id, m->mountpoint);
return -1;
}
-
- if (!strcmp(m->fstype->name, "nfs") && unsupported_nfs_mount(m))
- return -1;
}
return 0;
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel