linux/tools/perf/util
Jiri Olsa b01c1f69c8 perf tools: Restore proper cwd on return from mnt namespace
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: Jiri 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: 843ff37bb5 ("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: Arnaldo Carvalho de Melo <acme@redhat.com>
2018-11-19 12:12:26 -08:00
..
c++ perf tools: Fix a clang 7.0 compilation error 2018-06-25 11:59:37 -03:00
cs-etm-decoder perf cs-etm: Fix start tracing packet handling 2018-07-31 10:57:56 -03:00
include
intel-pt-decoder perf intel-pt: Add MTC and CYC timestamps to debug log 2018-11-05 14:53:54 -03:00
libunwind
scripting-engines tools lib traceevent, perf tools: Rename enum print_arg_type to enum tep_print_arg_type 2018-09-19 17:17:44 -03:00
annotate.c perf annotate: Add Sparc support 2018-10-18 11:16:38 -03:00
annotate.h perf annotate: Fix parsing aarch64 branch instructions after objdump update 2018-08-30 15:51:54 -03:00
arm-spe-pkt-decoder.c perf tools: Add ARM Statistical Profiling Extensions (SPE) support 2018-01-17 10:23:31 -03:00
arm-spe-pkt-decoder.h perf tools: Add ARM Statistical Profiling Extensions (SPE) support 2018-01-17 10:23:31 -03:00
arm-spe.c perf tools: Add ARM Statistical Profiling Extensions (SPE) support 2018-01-17 10:23:31 -03:00
arm-spe.h perf tools: Add ARM Statistical Profiling Extensions (SPE) support 2018-01-17 10:23:31 -03:00
auxtrace.c perf script: Make itrace script default to all calls 2018-10-24 15:29:54 -03:00
auxtrace.h perf script: Make itrace script default to all calls 2018-10-24 15:29:54 -03:00
block-range.c
block-range.h
bpf-loader.c perf bpf-loader: use PTR_ERR_OR_ZERO inetead of return code 2018-09-19 10:25:09 -03:00
bpf-loader.h perf bpf: Make bpf__setup_output_event() return the bpf-output event 2018-08-08 15:55:58 -03:00
bpf-prologue.c docs: Fix some broken references 2018-06-15 18:10:01 -03:00
bpf-prologue.h
branch.c
branch.h
Build tools build feature: Check if get_current_dir_name() is available 2018-11-19 12:12:17 -08:00
build-id.c perf thread: Make thread__find_map() return the map 2018-04-26 13:47:08 -03:00
build-id.h
cache.h
call-path.c
call-path.h
callchain.c perf unwind: Do not look just at the global callchain_param.record_mode 2018-01-17 10:23:32 -03:00
callchain.h perf unwind: Do not look just at the global callchain_param.record_mode 2018-01-17 10:23:32 -03:00
cgroup.c perf cgroup: Make evlist__find_cgroup() more compact 2018-06-04 10:28:50 -03:00
cgroup.h perf cgroup: Make the cgroup name be const char * 2018-03-07 10:22:26 -03:00
cloexec.c
cloexec.h
color.c
color.h
comm.c perf tools: Fix struct comm_str removal crash 2018-07-24 14:54:03 -03:00
comm.h
compress.h perf tools: Add is_compressed callback to compressions array 2018-08-20 08:54:59 -03:00
config.c perf config: Call perf_config__init() lazily 2018-05-16 16:11:09 -03:00
config.h perf config: Call perf_config__init() lazily 2018-05-16 16:11:09 -03:00
counts.c
counts.h
cpumap.c
cpumap.h
cs-etm.c perf cs-etm: Correct CPU mode for samples 2018-10-31 09:57:50 -03:00
cs-etm.h coresight: Move to SPDX identifier 2018-04-19 12:29:41 -03:00
ctype.c
data-convert-bt.c tools lib traceevent, perf tools: Rename enum format_flags to enum tep_format_flags 2018-09-19 17:14:13 -03:00
data-convert-bt.h
data-convert.h
data.c perf tools: Move conditional O_CLOEXEC to util.h 2018-01-23 09:48:20 -03:00
data.h
db-export.c perf db-export: Add trace begin / end branch type variants 2018-09-20 11:10:25 -03:00
db-export.h
debug.c perf debug: Avoid setting 'quiet' to 'true' unnecessarily 2018-03-16 16:39:02 -03:00
debug.h
demangle-java.c
demangle-java.h
demangle-rust.c
demangle-rust.h
drv_configs.c
drv_configs.h
dso.c perf tools: Remove ext from struct kmod_path 2018-08-20 08:54:59 -03:00
dso.h perf tools: Remove ext from struct kmod_path 2018-08-20 08:54:59 -03:00
dump-insn.c
dump-insn.h
dwarf-aux.c perf config: Rename to HAVE_DWARF_GETLOCATIONS_SUPPORT 2018-04-02 13:50:24 -03:00
dwarf-aux.h
dwarf-regs.c
env.c perf machine: Add nr_cpus_avail() 2018-05-22 10:52:49 -03:00
env.h perf record: Encode -k clockid frequency into Perf trace 2018-10-18 11:16:38 -03:00
event.c perf tools: Don't clone maps from parent when synthesizing forks 2018-10-31 10:18:01 -03:00
event.h perf machine: Synthesize and process mmap events for x86 PTI entry trampolines 2018-05-23 10:26:39 -03:00
evlist.c perf evlist: Move perf_evsel__reset_weak_group into evlist 2018-11-05 14:37:09 -03:00
evlist.h perf evlist: Move perf_evsel__reset_weak_group into evlist 2018-11-05 14:37:09 -03:00
evsel_fprintf.c tools lib traceevent, perf tools: Rename struct format{_field} to struct tep_format{_field} 2018-09-19 17:13:15 -03:00
evsel.c perf tools: Fix crash on synthesizing the unit 2018-11-12 08:37:49 -08:00
evsel.h perf trace: Introduce per-event maximum number of events property 2018-10-22 14:27:12 -03:00
expr.h
expr.y
find-vdso-map.c
genelf_debug.c
genelf.c perf tools: Fix spelling mistake: "builid" -> "buildid" 2018-04-30 12:02:03 -03:00
genelf.h perf jitdump: Add Sparc support. 2018-10-18 11:16:38 -03:00
generate-cmdlist.sh perf tools: Rename HAVE_SYSCALL_TABLE to HAVE_SYSCALL_TABLE_SUPPORT 2018-04-12 10:33:31 -03:00
get_current_dir_name.c tools build feature: Check if get_current_dir_name() is available 2018-11-19 12:12:17 -08:00
group.h
header.c perf record: Encode -k clockid frequency into Perf trace 2018-10-18 11:16:38 -03:00
header.h perf record: Encode -k clockid frequency into Perf trace 2018-10-18 11:16:38 -03:00
help-unknown-cmd.c
help-unknown-cmd.h
hist.c perf hists: Reimplement hists__has_callchains() 2018-06-07 14:42:27 -03:00
hist.h perf hists: Clarify callchain disabling when available 2018-07-24 14:37:33 -03:00
intel-bts.c perf intel-pt/bts: Calculate cpumode for synthesized samples 2018-10-31 12:56:26 -03:00
intel-bts.h
intel-pt.c perf intel-pt: Add more event information to debug log 2018-11-05 14:53:37 -03:00
intel-pt.h
intlist.c
intlist.h
jit.h
jitdump.c
jitdump.h
kvm-stat.h
levenshtein.c
levenshtein.h
llvm-utils.c perf bpf: Give precedence to bpf header dir 2018-08-30 15:52:20 -03:00
llvm-utils.h perf llvm: Allow passing options to llc in addition to clang 2018-08-20 08:54:58 -03:00
lzma.c perf tools: Add lzma_is_compressed function 2018-08-20 08:54:59 -03:00
machine.c perf tools: Don't clone maps from parent when synthesizing forks 2018-10-31 10:18:01 -03:00
machine.h tools lib traceevent, perf tools: Rename pevent_set_* APIs 2018-08-13 15:22:10 -03:00
map.c Merge remote-tracking branch 'acme/perf/urgent' into perf/core 2018-09-18 17:20:41 -03:00
map.h perf map: Optimize maps__fixup_overlappings() 2018-08-08 15:56:00 -03:00
mem2node.c perf tools: Add mem2node object 2018-03-16 13:52:37 -03:00
mem2node.h perf tools: Add mem2node object 2018-03-16 13:52:37 -03:00
mem-events.c
mem-events.h
memswap.c
memswap.h
metricgroup.c perf list: Unify metric group description format with PMU event description 2018-07-31 11:35:44 -03:00
metricgroup.h perf stat: Add transaction flag (-T) support for s390 2018-07-24 14:49:37 -03:00
mmap.c perf tools: Add 'struct perf_mmap' arg to record__write() 2018-09-19 10:25:11 -03:00
mmap.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2018-10-24 06:47:44 +01:00
namespaces.c perf tools: Restore proper cwd on return from mnt namespace 2018-11-19 12:12:26 -08:00
namespaces.h perf tools: Restore proper cwd on return from mnt namespace 2018-11-19 12:12:26 -08:00
ordered-events.c perf ordered_events: Prevent crossing max_alloc_size 2018-09-19 10:25:08 -03:00
ordered-events.h perf ordered_events: Add 'struct ordered_events_buffer' layer 2018-09-19 10:24:57 -03:00
parse-branch-options.c
parse-branch-options.h
parse-events.c perf evsel: Introduce per event max_events property 2018-10-19 16:31:09 -03:00
parse-events.h perf evsel: Introduce per event max_events property 2018-10-19 16:31:09 -03:00
parse-events.l perf evsel: Introduce per event max_events property 2018-10-19 16:31:09 -03:00
parse-events.y perf tools: Fix error index for pmu event parser 2018-06-07 15:50:14 -03:00
parse-regs-options.c
parse-regs-options.h
path.c perf utils: Move is_directory() to path.h 2017-12-27 12:15:48 -03:00
path.h perf utils: Move is_directory() to path.h 2017-12-27 12:15:48 -03:00
perf_regs.c
perf_regs.h
perf-hooks-list.h
perf-hooks.c
perf-hooks.h
PERF-VERSION-GEN
pmu.c perf stat: Handle different PMU names with common prefix 2018-11-05 14:37:10 -03:00
pmu.h
pmu.l
pmu.y
print_binary.c
print_binary.h
probe-event.c perf probe: Support SDT markers having reference counter (semaphore) 2018-09-24 04:44:54 -04:00
probe-event.h perf probe: Support SDT markers having reference counter (semaphore) 2018-09-24 04:44:54 -04:00
probe-file.c perf probe: Support SDT markers having reference counter (semaphore) 2018-09-24 04:44:54 -04:00
probe-file.h perf probe: Support SDT markers having reference counter (semaphore) 2018-09-24 04:44:54 -04:00
probe-finder.c perf probe: Use right type to access array elements 2018-03-19 13:51:53 -03:00
probe-finder.h
pstack.c
pstack.h
python-ext-sources perf evsel: Fix swap for samples with raw data 2017-12-27 12:15:56 -03:00
python.c tools lib traceevent, perf tools: Rename enum format_flags to enum tep_format_flags 2018-09-19 17:14:13 -03:00
rb_resort.h
rblist.c
rblist.h
record.c perf record: Fix crash in pipe mode 2018-03-05 11:52:41 -03:00
rwsem.c
rwsem.h
s390-cpumsf-kernel.h perf report: Add raw report support for s390 auxiliary trace 2018-08-08 15:26:48 -03:00
s390-cpumsf.c perf report: Create auxiliary trace data files for s390 2018-08-30 15:52:20 -03:00
s390-cpumsf.h perf auxtrace: Support for perf report -D for s390 2018-08-03 10:34:18 -03:00
sane_ctype.h
session.c perf tools: Remove perf_tool from event_op3 2018-09-19 10:25:10 -03:00
session.h perf tools: Remove perf_tool from event_op2 2018-09-19 10:25:10 -03:00
setns.c
setup.py perf python: More portable way to make CFLAGS work with clang 2018-10-08 14:30:45 -03:00
smt.c
smt.h
sort.c tools lib traceevent, perf tools: Rename enum format_flags to enum tep_format_flags 2018-09-19 17:14:13 -03:00
sort.h tools lib traceevent, perf tools: Rename struct pevent to struct tep_handle 2018-08-10 15:29:35 -03:00
srcline.c perf report: Don't crash on invalid inline debug information 2018-10-16 14:52:21 -03:00
srcline.h perf report: Fix a wrong offset issue when using /proc/kcore 2018-01-08 11:11:57 -03:00
stat-display.c perf stat: Move the display functions to stat-display.c 2018-08-30 15:52:25 -03:00
stat-shadow.c perf stat: Pass a 'struct perf_stat_config' argument to global print functions 2018-08-30 15:52:23 -03:00
stat.c perf tools: Remove perf_tool from event_op2 2018-09-19 10:25:10 -03:00
stat.h perf tools: Remove perf_tool from event_op2 2018-09-19 10:25:10 -03:00
strbuf.c perf strbuf: Match va_{add,copy} with va_end 2018-10-08 14:23:44 -03:00
strbuf.h
strfilter.c
strfilter.h
string2.h perf string: Add {strdup,strpbrk}_esc() 2017-12-27 12:15:55 -03:00
string.c perf string: Add {strdup,strpbrk}_esc() 2017-12-27 12:15:55 -03:00
strlist.c
strlist.h
svghelper.c
svghelper.h
symbol_fprintf.c perf symbols: Unify symbol maps 2018-04-27 10:47:06 -03:00
symbol-elf.c Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2018-11-03 18:13:43 -07:00
symbol-minimal.c perf symbols: Unify symbol maps 2018-04-27 10:47:06 -03:00
symbol.c perf symbols: Add BSS symbols when reading from /proc/kallsyms 2018-06-06 12:52:09 -03:00
symbol.h Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2018-11-03 18:13:43 -07:00
syscalltbl.c perf trace arm64: Use generated syscall table 2018-07-24 14:53:01 -03:00
syscalltbl.h
target.c
target.h perf stat: Remove --per-thread pid/tid limitation 2017-12-27 12:15:47 -03:00
term.c
term.h
thread_map.c perf stat: Ignore error thread when enabling system-wide --per-thread 2018-02-27 11:29:21 -03:00
thread_map.h perf stat: Ignore error thread when enabling system-wide --per-thread 2018-02-27 11:29:21 -03:00
thread-stack.c perf intel-pt: Insert callchain context into synthesized callchains 2018-10-31 12:54:27 -03:00
thread-stack.h perf intel-pt: Insert callchain context into synthesized callchains 2018-10-31 12:54:27 -03:00
thread.c perf tools: Don't clone maps from parent when synthesizing forks 2018-10-31 10:18:01 -03:00
thread.h perf tools: Don't clone maps from parent when synthesizing forks 2018-10-31 10:18:01 -03:00
time-utils.c perf util: Allocate time slices buffer according to number of comma 2018-01-17 10:23:36 -03:00
time-utils.h perf util: Allocate time slices buffer according to number of comma 2018-01-17 10:23:36 -03:00
tool.h perf tools: Remove perf_tool from event_op3 2018-09-19 10:25:10 -03:00
top.c
top.h perf annotate stdio: Use annotation_options consistently 2018-06-04 10:28:52 -03:00
trace-event-info.c perf tools: Cleanup trace-event-info 'tdata' leak 2018-10-08 14:23:45 -03:00
trace-event-parse.c tools lib traceevent, perf tools: Move struct tep_handler definition in a local header file 2018-10-08 15:05:37 -03:00
trace-event-read.c tools lib traceevent, perf tools: Move struct tep_handler definition in a local header file 2018-10-08 15:05:37 -03:00
trace-event-scripting.c tools lib traceevent, perf tools: Rename struct pevent to struct tep_handle 2018-08-10 15:29:35 -03:00
trace-event.c tools lib traceevent, perf tools: Rename struct event_format to struct tep_event_format 2018-09-19 17:11:50 -03:00
trace-event.h tools lib traceevent: Rename struct plugin_list to struct tep_plugin_list 2018-09-19 17:29:26 -03:00
trigger.h perf tools: Fix trigger class trigger_on() 2018-03-06 11:31:14 -03:00
tsc.c
tsc.h
units.c
units.h
unwind-libdw.c perf unwind: Take pgoff into account when reporting elf to libdwfl 2018-10-31 09:57:50 -03:00
unwind-libdw.h
unwind-libunwind-local.c perf script: Show correct offsets for DWARF-based unwinding 2018-07-24 14:53:11 -03:00
unwind-libunwind.c perf env: Adopt perf_env__arch() from the annotate code 2017-12-27 12:15:52 -03:00
unwind.h
usage.c
util-cxx.h
util.c perf util: Make copyfile_offset() global 2018-09-19 10:25:12 -03:00
util.h tools build feature: Check if get_current_dir_name() is available 2018-11-19 12:12:17 -08:00
values.c
values.h
vdso.c perf map: Remove enum_type arg to map_groups__first() 2018-04-26 13:47:15 -03:00
vdso.h
xyarray.c
xyarray.h
zlib.c perf tools: Add gzip_is_compressed function 2018-08-20 08:54:59 -03:00