[Crash-utility] [RFC] cacheutils crash extension module

Dave Anderson anderson at redhat.com
Tue May 21 18:58:57 UTC 2019


Hi Kazu,

Your patch that exports the get_mount_list() and get_dump_level() functions has
been queued for crash-7.2.7:

  https://github.com/crash-utility/crash/commit/3370ae03edf3d815bfffe556ffddc43619420674

Also, the CRASHDEBUG(0) in do_xarray_dump_cb() was a leftover from when I was debugging
the initial XArray support patch-set.  As you noted, it should be set to CRASHDEBUG(1):

  https://github.com/crash-utility/crash/commit/1f6b1ce5678224dd5085020e45259ea8c057e4a1

With respect to your extension module, do you want to post an updated version?

Thanks,
  Dave



----- Original Message -----
> Hi Dave,
> 
> I've written "cacheutils" crash extension module that lists dentry caches and
> dumps page caches associated with a specified file path. I think this module
> would be helpful for support folks to find and see config/log files in
> vmcore.
> 
> For example:
>   $ make extensions
> 
>   crash> extend cacheutils.so
>   ./cacheutils.so: shared object loaded
>   crash> extend
>   SHARED OBJECT    COMMANDS
>   ./cacheutils.so  ccat cls
>   crash> cls /var/log
>   DENTRY           INODE            I_MAPPING        NRPAGES   % PATH
>   ffff9c0c3eabe300 ffff9c0c3e875b78 ffff9c0c3e875ce8       0   0 ./
>   ffff9c0c16a22900 ffff9c0c16ada2f8 ffff9c0c16ada468       0   0 anaconda/
>   ffff9c0c37611000 ffff9c0c3759f5b8 ffff9c0c3759f728       0   0 audit/
>   ffff9c0c375ccc00 ffff9c0c3761c8b8 ffff9c0c3761ca28       1 100 btmp
>   ffff9c0c28fda240 ffff9c0c22c713f8 ffff9c0c22c71568       6 100 cron
>   ffff9c0c3eb7f180 ffff9c0bfd402a78 ffff9c0bfd402be8      36   7
>   dnf.librepo.log
>   ...
>   crash> ccat /var/log/messages | tail
>   Nov 28 16:43:57 fedora systemd[27015]: Reached target Basic System.
>   Nov 28 16:43:57 fedora systemd[27015]: Reached target Default.
>   Nov 28 16:43:57 fedora systemd[1]: Started User Manager for UID 0.
>   Nov 28 16:43:57 fedora systemd[27015]: Startup finished in 61ms.
> 
> It tested OK from RHEL5 (x86_64) to kernel 5.1, which has XArray,
> and a recent x86 Fedora.
> 
> 
> I have three questions (requests) related to this, and I would appreciate it
> if you would take a look at them after your vacation :)
> 
> * Is it possible to export the get_mount_list() and get_dump_level()
> functions
> to extension modules? (The patch at the end exports these two functions.)
> 
> Now the get_mount_list() is copied from crash/filesys.c to this module.
> And I'd like to call the get_dump_level() to inform users whether the "ccat"
> command is available or not with their vmcore when the module is loaded.
> If they are exported, I will remove the "#define NOT_EXPORTED" and #ifdef
> sections in it.
> 
> * Is the CRASHDEBUG(0) in do_xarray_dump_cb() function on purpose?
> 
> This module uses the function and it sometimes prints the following messages
> without crash -d option. The similar message for radix tree is suppressed by
> CRASHDEBUG(1), but this has CRASHDEBUG(0), so I'm wondering about it.
> 
>   crash> ccat /var/log/messages
>   ccat: entry has XARRAY_TAG_MASK bits set: 239ab0024001
>   ccat: entry has XARRAY_TAG_MASK bits set: 239ae0024001
>   ccat: entry has XARRAY_TAG_MASK bits set: 239af0024001
> 
> static void do_xarray_dump_cb(ulong node, ulong slot, const char *path,
>                                   ulong index, void *private)
> {
> ...
>         if (!cb(slot)) {
>                 if (slot & XARRAY_TAG_MASK) {
>                         if (CRASHDEBUG(0))
>                                 error(INFO, "entry has XARRAY_TAG_MASK bits
>                                 set: %lx\n", slot);
>                         return;
> 
> * Is it possible to add this module to your crash extension modules page?
> I'm planning to put it on GitHub, so I'd like you to add the link to the
> page.
> 
> Thanks,
> Kazu
> 
> Signed-off-by: Kazuhito Hagio <k-hagio at ab.jp.nec.com>
> ---
>  defs.h     | 2 ++
>  diskdump.c | 3 +--
>  filesys.c  | 3 +--
>  3 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/defs.h b/defs.h
> index 912037fcc762..42e381e6d9c1 100644
> --- a/defs.h
> +++ b/defs.h
> @@ -5298,6 +5298,7 @@ void set_tmpfile2(FILE *);
>  void close_tmpfile2(void);
>  void open_files_dump(ulong, int, struct reference *);
>  void get_pathname(ulong, char *, int, int, ulong);
> +ulong *get_mount_list(int *, struct task_context *);
>  char *vfsmount_devname(ulong, char *, int);
>  ulong file_to_dentry(ulong);
>  ulong file_to_vfsmnt(ulong);
> @@ -6440,6 +6441,7 @@ int diskdump_phys_base(unsigned long *);
>  int diskdump_set_phys_base(unsigned long);
>  ulong *diskdump_flags;
>  int is_partial_diskdump(void);
> +int get_dump_level(void);
>  int dumpfile_is_split(void);
>  void show_split_dumpfiles(void);
>  void x86_process_elf_notes(void *, unsigned long);
> diff --git a/diskdump.c b/diskdump.c
> index 694339fbb713..e88243e616cc 100644
> --- a/diskdump.c
> +++ b/diskdump.c
> @@ -80,7 +80,6 @@ struct diskdump_data {
>  
>  static struct diskdump_data diskdump_data = { 0 };
>  static struct diskdump_data *dd = &diskdump_data;
> -static int get_dump_level(void);
>  
>  ulong *diskdump_flags = &diskdump_data.flags;
>  
> @@ -2114,7 +2113,7 @@ get_diskdump_switch_stack(ulong task)
>   *  Version 1 and later compressed kdump dumpfiles contain the dump level
>   *  in an additional field of the sub_header_kdump structure.
>   */
> -static int
> +int
>  get_dump_level(void)
>  {
>  	int dump_level;
> diff --git a/filesys.c b/filesys.c
> index 037704126840..d88ea28ebe7a 100644
> --- a/filesys.c
> +++ b/filesys.c
> @@ -37,7 +37,6 @@ static int mount_point(char *);
>  static int open_file_reference(struct reference *);
>  static void memory_source_init(void);
>  static int get_pathname_component(ulong, ulong, int, char *, char *);
> -static ulong *get_mount_list(int *, struct task_context *);
>  char *inode_type(char *, char *);
>  static void match_proc_version(void);
>  static void get_live_memory_source(void);
> @@ -1600,7 +1599,7 @@ show_mounts(ulong one_vfsmount, int flags, struct
> task_context *namespace_contex
>  /*
>   *  Allocate and fill a list of the currently-mounted vfsmount pointers.
>   */
> -static ulong *
> +ulong *
>  get_mount_list(int *cntptr, struct task_context *namespace_context)
>  {
>  	struct list_data list_data, *ld;
> --
> 2.18.1
> 




More information about the Crash-utility mailing list