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@xxxxxxxxxxxxx> > --- > 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@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility