sdevent:inode entry is not released after creating dump

For every dump generated an "anon_inode:[pidfd]" entry is
created for the associated process and the same is not
released.

When the number of inode entries reach the maximum count
dump request will fail and the dump service takes a reset
with a core dump.

When a dump is requested a child process is spawned to
perform dump collection, parent process waits on the
child process completion using sd-event-add-child
systemd call.

sd-event-add-child adds an inode entry which needs to
be released during the callback method called after
child process exit using unref but the same is not done.

Now switching to sdeventplus::source::Child wrapper class for
sd-event-add-child which takes care of releasing the inode fd.

Tested:
'''
Without the fix for the 3 dumps created noticed 3 anon_inode:[pidfd]
are added but not cleared
root@rain135bmc:/proc/2044/fd# ls -la
dr-x------    2 root     root             0 Jun 27 08:38 .
dr-xr-xr-x    8 root     root             0 Jun 27 08:38 ..
lr-x------    1 root     root            64 Jun 27 08:39 0 -> /dev/null
lrwx------    1 root     root            64 Jun 27 08:39 1 -> socket:[21586]
lrwx------    1 root     root            64 Jun 27 08:39 10 ->anon_inode:[timerfd]
lrwx------    1 root     root            64 Jun 27 08:47 11 ->anon_inode:[pidfd]
lrwx------    1 root     root            64 Jun 27 08:47 12 ->anon_inode:[pidfd]
lrwx------    1 root     root            64 Jun 27 08:47 13 ->anon_inode:[pidfd]

After the fix noticed all the anon_inode:[pidfd] are cleared
dr-x------    2 root     root             0 Jun 27 08:38 .
dr-xr-xr-x    8 root     root             0 Jun 27 08:38 ..
lr-x------    1 root     root            64 Jun 27 08:39 0 -> /dev/null
lrwx------    1 root     root            64 Jun 27 08:39 1 -> socket:[21586]
lrwx------    1 root     root            64 Jun 27 08:39 10 ->anon_inode:[timerfd]
'''

Signed-off-by: Marri Devender Rao <devenrao@in.ibm.com>
Change-Id: I9a2fec0a2287bfe978b811671c1cfeb1356e59d2
4 files changed
tree: 1878f49e8ab0d458113c2d6744f785b915eeaba9
  1. dump-extensions/
  2. host-transport-extensions/
  3. subprojects/
  4. test/
  5. tools/
  6. xyz/
  7. .clang-format
  8. .gitignore
  9. .shellcheck-ignore
  10. bmc_dump_entry.cpp
  11. bmc_dump_entry.hpp
  12. core_manager.cpp
  13. core_manager.hpp
  14. core_manager_main.cpp
  15. dump-extensions.hpp
  16. dump_entry.cpp
  17. dump_entry.hpp
  18. dump_internal.hpp
  19. dump_manager.cpp
  20. dump_manager.hpp
  21. dump_manager_bmc.cpp
  22. dump_manager_bmc.hpp
  23. dump_manager_faultlog.cpp
  24. dump_manager_faultlog.hpp
  25. dump_manager_main.cpp
  26. dump_offload.cpp
  27. dump_offload.hpp
  28. dump_serialize.cpp
  29. dump_serialize.hpp
  30. dump_utils.cpp
  31. dump_utils.hpp
  32. elog_watch.cpp
  33. elog_watch.hpp
  34. errors_map.mako.hpp
  35. errors_map_gen.py
  36. example_errors_watch.yaml
  37. faultlog_dump_entry.cpp
  38. faultlog_dump_entry.hpp
  39. ffdc
  40. host_transport_exts.hpp
  41. LICENSE
  42. meson.build
  43. meson_options.txt
  44. OWNERS
  45. ramoops_manager.cpp
  46. ramoops_manager.hpp
  47. ramoops_manager_main.cpp
  48. README.md
  49. watch.cpp
  50. watch.hpp
README.md

phosphor-debug-collector

Phosphor Debug Collector provides mechanisms to collect various log files and system parameters. Used to troubleshoot problems in OpenBMC based systems.

One such mechanism is dreport, a script that collects debug data and packages it into an archive file.

To Build

To build this package with meson, do the following steps:

    1. meson builddir
    2. ninja -C builddir

To clean the built files run ninja -C builddir clean.

To run unit tests

Tests can be run in the CI docker container, refer local-ci-build

or with an OpenBMC x86 sdk(see below for x86 steps).

meson -Dtests=enabled build
ninja -C build test