• Andrei Vagin's avatar
    mount: restore mounts in the root mount namespace · b6f75771
    Andrei Vagin authored
    Currently all mounts are restored in a one mount namespace, then
    this namespace is cloned to restore other mount namespaces and
    we need another copy of this namespace to clean link remap files.
    
    Let's define terms:
    A - the root mount namespace
    B - the mount namespace where link remap files are destroyed
    
    Currently we restore all mounts in the B namespace and then
    clone it into the A namespace.
    
    But it doesn't work in a case, when we have to open file
    descriptores to restore mounts (e g to restore bind-mount
    pty slaves), because a file descriptor has to be opened from
    a specified mount (which is one of restore mount namespaces).
    
    This patch reworks code so, that all mounts is restored in the A mount
    namespace and then the B mount namespace is created. In this case
    we can open files from the root mount namespace (A).
    
    $ ./zdtm.py run -t zdtm/static/pty-console --iter 5
    
    ====================== Run zdtm/static/pty-console in ns =======================
    Start test
    Test is SUID
    ./pty-console --pidfile=pty-console.pid --outfile=pty-console.out
    Run criu dump
    Run criu restore
    Run criu dump
    =[log]=> dump/zdtm/static/pty-console/36/2/dump.log
    ------------------------ grep Error ------------------------
    (00.106521) Error (criu/files-reg.c:1132): Can't lookup mount=563 for fd=4 path=/ptmx
    (00.106585) Error (criu/cr-dump.c:1325): Dump files (pid: 70) failed with -1
    (00.129041) Error (criu/cr-dump.c:1674): Dumping FAILED.
    ------------------------ ERROR OVER ------------------------
    Signed-off-by: 's avatarAndrei Vagin <avagin@virtuozzo.com>
    b6f75771
cr-restore.c 68.5 KB