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/3370ae03edf3d815bfffe556ffd...
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/1f6b1ce5678224dd5085020e452...
With respect to your extension module, do you want to post an updated version?
Yes. I will post a github link when I finish preparing.
Thanks!
Kazu
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(a)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
>
--
Crash-utility mailing list
Crash-utility(a)redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility