From eb214be2d0d72b1a5064d804389dffd280dc06ef Mon Sep 17 00:00:00 2001 From: Andrey Vagin Date: Thu, 23 Oct 2014 17:49:03 +0400 Subject: [PATCH] mount: move code to validate shared mounts in a separate function Signed-off-by: Andrey Vagin Signed-off-by: Pavel Emelyanov --- mount.c | 44 ++++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/mount.c b/mount.c index f1cfb11ad..e1f82ec09 100644 --- a/mount.c +++ b/mount.c @@ -372,6 +372,30 @@ static int try_resolve_ext_mount(struct mount_info *info) info->external = em; return 0; } +static int validate_shared(struct mount_info *m) +{ + struct mount_info *ct, *t; + + if (!list_empty(&m->parent->mnt_share)) + return 0; + + t = list_first_entry(&m->parent->mnt_share, struct mount_info, mnt_share); + + list_for_each_entry(ct, &t->children, siblings) { + if (mounts_equal(m, ct, false)) + break; + } + if (&ct->siblings == &t->children) { + pr_err("Two shared mounts %d, %d have different sets of children\n", + m->parent->mnt_id, t->mnt_id); + pr_err("%d:%s doesn't have a proper point for %d:%s\n", + t->mnt_id, t->mountpoint, + m->mnt_id, m->mountpoint); + return -1; + } + + return 0; +} static int validate_mounts(struct mount_info *info, bool for_dump) { @@ -382,24 +406,8 @@ static int validate_mounts(struct mount_info *info, bool for_dump) /* root mount can be any */ continue; - if (m->parent->shared_id && !list_empty(&m->parent->mnt_share)) { - struct mount_info *ct; - - t = list_first_entry(&m->parent->mnt_share, struct mount_info, mnt_share); - - list_for_each_entry(ct, &t->children, siblings) { - if (mounts_equal(m, ct, false)) - break; - } - if (&ct->siblings == &t->children) { - pr_err("Two shared mounts %d, %d have different sets of children\n", - m->parent->mnt_id, t->mnt_id); - pr_err("%d:%s doesn't have a proper point for %d:%s\n", - t->mnt_id, t->mountpoint, - m->mnt_id, m->mountpoint); - return -1; - } - } + if (m->parent->shared_id && validate_shared(m)) + return -1; /* * Mountpoint can point to / of an FS. In that case this FS