[PATCH] Fix "vm -M" option to properly display virtual memory data of the task

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The help/man page of the "vm" command suggests that the "-M" option
accepts the mm_struct address as a valid argument. However, the "vm
-M" option always prints the virtual memory data of the current
task, regardless of its arguments.

Without the patch:
  crash> ps |grep sshd
       1159       1  19  ffff9915858a9980  IN   0.1    15820     9020  sshd
      47236    1159  21  ffff991572b40000  IN   0.1    18916    11116  sshd
  ...
  crash> vm -M ffff991572b40000
  PID: 49647    TASK: ffff991580b39980  CPU: 10   COMMAND: "crash"
  ...

With the patch:
  crash> vm -M ffff991572b40000
  PID: 47236    TASK: ffff991572b40000  CPU: 21   COMMAND: "sshd"
  ...

Reported-by: Buland Kumar Singh <bsingh@xxxxxxxxxx>
Signed-off-by: Lianbo Jiang <lijiang@xxxxxxxxxx>
---
 memory.c | 39 +++++++++++++++++++++------------------
 1 file changed, 21 insertions(+), 18 deletions(-)

diff --git a/memory.c b/memory.c
index 592a5ef49d50..c9861dd6d0fb 100644
--- a/memory.c
+++ b/memory.c
@@ -3640,6 +3640,7 @@ cmd_vm(void)
 	else if (radix == 16)
 		flag |= PRINT_RADIX_16;
 
+	optind = 1;
 	if (!args[optind]) {
 		if (!ref)
 			print_task_header(fp, CURRENT_CONTEXT(), 0);
@@ -3650,26 +3651,28 @@ cmd_vm(void)
 	subsequent = 0;
 
 	while (args[optind]) {
-		switch (str_to_context(args[optind], &value, &tc))
-		{
-		case STR_PID:
-			for (tc = pid_to_context(value); tc; tc = tc->tc_next) {
-                                if (!ref)
-                                        print_task_header(fp, tc, subsequent++);
-                                vm_area_dump(tc->task, flag, single_vma, ref);
-                        }
-			break;
+		if (IS_A_NUMBER(args[optind])) {
+			switch (str_to_context(args[optind], &value, &tc))
+			{
+			case STR_PID:
+				for (tc = pid_to_context(value); tc; tc = tc->tc_next) {
+					if (!ref)
+						print_task_header(fp, tc, subsequent++);
+					vm_area_dump(tc->task, flag, single_vma, ref);
+				}
+				break;
 
-		case STR_TASK:
-			if (!ref)
-                                print_task_header(fp, tc, subsequent++);
-                        vm_area_dump(tc->task, flag, single_vma, ref);
-			break;
+			case STR_TASK:
+				if (!ref)
+					print_task_header(fp, tc, subsequent++);
+				vm_area_dump(tc->task, flag, single_vma, ref);
+				break;
 
-		case STR_INVALID:
-			error(INFO, "%sinvalid task or pid value: %s\n",
-				subsequent++ ? "\n" : "", args[optind]);
-			break;
+			case STR_INVALID:
+				error(INFO, "%sinvalid task or pid value: %s\n",
+					subsequent++ ? "\n" : "", args[optind]);
+				break;
+			}
 		}
 
 		optind++;
-- 
2.37.1

--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://listman.redhat.com/mailman/listinfo/crash-utility
Contribution Guidelines: https://github.com/crash-utility/crash/wiki




[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux