[CRIU] [PATCH 2/2] mkdir -p any dirs necessary for files

Tycho Andersen tycho.andersen at canonical.com
Mon Jun 23 19:57:03 PDT 2014


On Mon, Jun 23, 2014 at 10:20:18PM +0400, Andrew Vagin wrote:
> On Mon, Jun 23, 2014 at 03:54:23PM +0000, Tycho Andersen wrote:
> > Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
> > ---
> >  files-reg.c | 4 ++++
> >  1 file changed, 4 insertions(+)
> > 
> > diff --git a/files-reg.c b/files-reg.c
> > index 1f23f71..4647aa0 100644
> > --- a/files-reg.c
> > +++ b/files-reg.c
> > @@ -7,6 +7,7 @@
> >  #include <sys/stat.h>
> >  #include <sys/vfs.h>
> >  #include <ctype.h>
> > +#include <libgen.h>
> >  
> >  /* Stolen from kernel/fs/nfs/unlink.c */
> >  #define SILLYNAME_PREF ".nfs"
> > @@ -709,8 +710,11 @@ static int do_open_reg_noseek_flags(int ns_root_fd, struct reg_file_info *rfi, v
> >  {
> >  	u32 flags = *(u32 *)arg;
> >  	int fd;
> > +	char *dir;
> >  
> >  	fd = openat(ns_root_fd, rfi->path, flags);
> > +	dir = dirname(rfi->path);
> > +	mkdirpat(ns_root_fd, dir);
> 
> I don't understand how it should work.
> 
> You open file and then create a directory. If this directory doesn't
> exist, the file can't be opened. You should fail on the next line,
> should not you?

Hmm. You are correct, except that this fixes an issue for me. Without
it, I get:

(00.320920)    364: Error (files-reg.c:721): Can't open file /dev/lxc/tty3 on restore: No such file or directory
(00.320940)    364: Error (files-reg.c:686): Can't open file /dev/lxc/tty3: No such file or directory

but with it things "work" just fine (i.e. it gets past this point in
the restore process). Is it possible that the errors here are ignored,
so the directory is made but the file is never restored, but criu is
ignoring errors?

I will investigate more tomorrow, although if anyone has any thoughts
they would be much appreciated.

Tycho


More information about the CRIU mailing list