Commit f88d72d0 authored by Andrey Vagin's avatar Andrey Vagin Committed by Pavel Emelyanov

mount: strip options for all mounts

Currently we stript options only one of brothers, but
mount_equal() thinks that two brothers should have the same options.

Execute zdtm/live/static/mountpoints
./mountpoints --pidfile=mountpoints.pid --outfile=mountpoints.out
Dump 2737
WARNING: mountpoints returned 1 and left running for debug needs
Test: zdtm/live/static/mountpoints, Result: FAIL
==================================== ERROR ====================================
Test: zdtm/live/static/mountpoints, Namespace:
Dump log   : /root/git/criu/test/dump/static/mountpoints/2737/1/dump.log
--------------------------------- grep Error ---------------------------------
(00.146444) Error (mount.c:399): Two shared mounts 50, 67 have different sets of children
(00.146460) Error (mount.c:402): 67:./zdtm_mpts/dev/share-1 doesn't have a proper point for 54:./zdtm_mpts/dev/share-3/test.mnt.share
(00.146820) Error (cr-dump.c:1921): Dumping FAILED.
------------------------------------- END -------------------------------------
================================= ERROR OVER =================================
Reported-by: 's avatarRuslan Kuprieiev <kupruser@gmail.com>
Signed-off-by: 's avatarAndrey Vagin <avagin@openvz.org>
Tested-by: 's avatarRuslan Kuprieiev <kupruser@gmail.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent cb738520
......@@ -901,19 +901,6 @@ uns:
return &fstypes[0];
}
static char *strip(char *opt)
{
int len;
len = strlen(opt);
if (len > 1 && opt[len - 1] == ',')
opt[len - 1] = '\0';
if (opt[0] == ',')
opt++;
return opt;
}
static int dump_one_mountpoint(struct mount_info *pm, int fd)
{
MntEntry me = MNT_ENTRY__INIT;
......@@ -940,7 +927,7 @@ static int dump_one_mountpoint(struct mount_info *pm, int fd)
me.flags = pm->flags;
me.mountpoint = pm->mountpoint + 1;
me.source = pm->source;
me.options = strip(pm->options);
me.options = pm->options;
me.shared_id = pm->shared_id;
me.has_shared_id = true;
me.master_id = pm->master_id;
......
......@@ -797,6 +797,7 @@ static int do_opt2flag(char *opt, unsigned *flags,
{
int i;
char *end;
size_t uoff = 0;
while (1) {
end = strchr(opt, ',');
......@@ -815,15 +816,17 @@ static int do_opt2flag(char *opt, unsigned *flags,
return -1;
}
strcpy(unknown, opt);
unknown += strlen(opt);
*unknown = ',';
unknown++;
strcpy(unknown + uoff, opt);
uoff += strlen(opt);
unknown[uoff] = ',';
uoff++;
}
if (!end) {
if (uoff)
uoff--;
if (unknown)
*unknown = '\0';
unknown[uoff] = '\0';
break;
} else
opt = end + 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment