[CRIU] [PATCH v1] files-reg: find appropriate dir to create link remap
Eugene Batalov
eabatalov89 at gmail.com
Wed Aug 10 06:33:09 PDT 2016
The bottom of this patch removes crfail flag from existing zdtm test:
>
> diff --git a/test/zdtm/static/unlink_regular00.desc
> b/test/zdtm/static/unlink_regular00.desc
> index 14d4c06..cd3aa9d 100644
> --- a/test/zdtm/static/unlink_regular00.desc
> +++ b/test/zdtm/static/unlink_regular00.desc
> @@ -1 +1 @@
> -{'flavor': 'ns', 'flags': 'suid crfail', 'opts': '--link-remap'}
> +{'flavor': 'ns', 'flags': 'suid', 'opts': '--link-remap'}
Do you think that we need more tests for this error?
2016-08-10 16:33 GMT+03:00 Pavel Emelyanov <xemul at virtuozzo.com>:
> On 08/09/2016 04:15 PM, Egor Gorbunov wrote:
> > Currently during criu dump we create link remap in the same dir
> > where original file was opened. But that dir may not exist during
> > link remap creation. At the same time it's okay to create link
> > remap in any dir on the same mount point.
> > In this patch we do this. We check existance of every dir bottom
> > up through the original file path. We use the first existing dir.
> >
> > Similar approach is used on criu restore during ghost file creation.
>
> OK. Can you also cook a zdtm test that triggers this error?
>
> > Signed-off-by: Egor Gorbunov <egor-mailbox at ya.ru>
> > Signed-off-by: Eugene Batalov <eabatalov89 at gmail.com>
> > ---
> > criu/files-reg.c | 12 +++++++++++-
> > test/zdtm/static/unlink_regular00.desc | 2 +-
> > 2 files changed, 12 insertions(+), 2 deletions(-)
> >
> > diff --git a/criu/files-reg.c b/criu/files-reg.c
> > index 2b7a211..29b48fe 100644
> > --- a/criu/files-reg.c
> > +++ b/criu/files-reg.c
> > @@ -718,6 +718,7 @@ static int create_link_remap(char *path, int len,
> int lfd,
> > RegFileEntry rfe = REG_FILE_ENTRY__INIT;
> > FownEntry fwn = FOWN_ENTRY__INIT;
> > int mntns_root;
> > + int ret;
> >
> > if (!opts.link_remap_ok) {
> > pr_err("Can't create link remap for %s. "
> > @@ -754,7 +755,16 @@ static int create_link_remap(char *path, int len,
> int lfd,
> >
> > mntns_root = mntns_get_root_fd(nsid);
> >
> > - if (linkat(lfd, "", mntns_root, link_name, AT_EMPTY_PATH) < 0) {
> > +again:
> > + ret = linkat(lfd, "", mntns_root, link_name, AT_EMPTY_PATH);
> > + if (ret < 0 && errno == ENOENT) {
> > + /* Use grand parent, if parent directory does not exist. */
> > + if (trim_last_parent(link_name) < 0) {
> > + pr_err("trim failed: @%s@\n", link_name);
> > + return -1;
> > + }
> > + goto again;
> > + } else if (ret < 0) {
> > pr_perror("Can't link remap to %s", path);
> > return -1;
> > }
> > diff --git a/test/zdtm/static/unlink_regular00.desc
> b/test/zdtm/static/unlink_regular00.desc
> > index 14d4c06..cd3aa9d 100644
> > --- a/test/zdtm/static/unlink_regular00.desc
> > +++ b/test/zdtm/static/unlink_regular00.desc
> > @@ -1 +1 @@
> > -{'flavor': 'ns', 'flags': 'suid crfail', 'opts': '--link-remap'}
> > +{'flavor': 'ns', 'flags': 'suid', 'opts': '--link-remap'}
> >
>
>
--
Best regards,
Eugene Batalov.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openvz.org/pipermail/criu/attachments/20160810/63d0ddad/attachment-0001.html>
More information about the CRIU
mailing list