[Crash-utility] [patch 1/1] fix incomplete FILENAME in "swap" command

Lin Feng Shen shenlinf at cn.ibm.com
Wed Jun 28 14:33:26 UTC 2006


From: Lin Feng Shen <shenlinf at cn.ibm.com>

dump_swap_info() invokes get_pathname() to get the file name of swap 
device.
If swap_vfsmnt isn't defined but old_block_size is defined in kernel 
struct 
swap_info_struct(e.g. 2.6 kernel), 0 is passed as vfsmnt to 
get_pathname().
In this case, get_pathname() won't go up to the parent vfsmnt, so the file 

name of swap space is shown incompletely.

Here is an example. crash-4.0-25 was installed and udev was mounted on 
/dev
in sles10. Swap /dev/sda2 was active before kdump. sub-command "swap" in 
crash command showed an incomplete swap file name.
---------------
crash> swap
FILENAME           TYPE         SIZE      USED   PCT  PRIORITY
/sda2            PARTITION    2104504k       0k   0%     -1
---------------

The solution is to retrieve vfsmnt from swap_file just as file_to_dentry() 

does to get dentry, and then pass it to get_pathname().

Signed-off-by: Lin Feng Shen <shenlinf at cn.ibm.com>
---

diff -ruNp crash-4.0-2.18.orig/defs.h crash-4.0-2.18/defs.h
--- crash-4.0-2.18.orig/defs.h  2006-06-02 02:51:15.000000000 -0400
+++ crash-4.0-2.18/defs.h       2006-06-02 03:06:17.000000000 -0400
@@ -3031,6 +3031,7 @@ void close_tmpfile2(void);
 void open_files_dump(ulong, int, struct reference *);
 void get_pathname(ulong, char *, int, int, ulong);
 ulong file_to_dentry(ulong);
+ulong file_to_vfsmnt(ulong);
 void nlm_files_dump(void);
 int get_proc_version(void);
 int file_checksum(char *, long *);
diff -ruNp crash-4.0-2.18.orig/filesys.c crash-4.0-2.18/filesys.c
--- crash-4.0-2.18.orig/filesys.c       2006-06-02 02:51:14.000000000 
-0400
+++ crash-4.0-2.18/filesys.c    2006-06-02 03:11:34.000000000 -0400
@@ -2544,6 +2544,20 @@ file_to_dentry(ulong file)
 }
 
 /*
+ *  Get the vfsmnt associated with a file.
+ */
+ulong
+file_to_vfsmnt(ulong file)
+{
+        char *file_buf;
+        ulong vfsmnt;
+
+        file_buf = fill_file_cache(file);
+        vfsmnt = ULONG(file_buf + OFFSET(file_f_vfsmnt));
+        return vfsmnt;
+}
+
+/*
  * get_pathname() fills in a pathname string for an ending dentry
  * See __d_path() in the kernel for help fixing problems.
  */
diff -ruNp crash-4.0-2.18.orig/memory.c crash-4.0-2.18/memory.c
--- crash-4.0-2.18.orig/memory.c        2006-06-02 02:51:15.000000000 
-0400
+++ crash-4.0-2.18/memory.c     2006-06-02 03:06:31.000000000 -0400
@@ -10293,7 +10293,7 @@ dump_swap_info(ulong swapflags, ulong *t
                        } else if (VALID_MEMBER
                                (swap_info_struct_old_block_size)) {
                                get_pathname(file_to_dentry(swap_file), 
-                                       buf, BUFSIZE, 1, 0);
+                                       buf, BUFSIZE, 1, 
file_to_vfsmnt(swap_file));
                        } else {
                                get_pathname(swap_file, buf, BUFSIZE, 1, 
0);
                        }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20060628/ee158a19/attachment.htm>


More information about the Crash-utility mailing list