• Jiri Olsa's avatar
    perf tools: Restore proper cwd on return from mnt namespace · b01c1f69
    Jiri Olsa authored
    When reporting on 'record' server we try to retrieve/use the mnt
    namespace of the profiled tasks. We use following API with cookie to
    hold the return namespace, roughly:
    
      nsinfo__mountns_enter(struct nsinfo *nsi, struct nscookie *nc)
        setns(newns, 0);
      ...
      new ns related open..
      ...
      nsinfo__mountns_exit(struct nscookie *nc)
        setns(nc->oldns)
    
    Once finished we setns to old namespace, which also sets the current
    working directory (cwd) to "/", trashing the cwd we had.
    
    This is mostly fine, because we use absolute paths almost everywhere,
    but it screws up 'perf diff':
    
      # perf diff
      failed to open perf.data: No such file or directory  (try 'perf record' first)
      ...
    
    Adding the current working directory to be part of the cookie and
    restoring it in the nsinfo__mountns_exit call.
    Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Krister Johansen <kjlx@templeofstupid.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Fixes: 843ff37b ("perf symbols: Find symbols in different mount namespace")
    Link: http://lkml.kernel.org/r/20181101170001.30019-1-jolsa@kernel.org
    [ No need to check for NULL args for free(), use zfree() for struct members ]
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    b01c1f69
namespaces.h 1.49 KB