Re: Adding a new command rbtree

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

 



At 2012-5-22 4:21, Dave Anderson wrote:


----- Original Message -----
The patch has been modified.

Whereas the radix_tree problem I showed in my last email seems to
be RHEL5-related, I cannot dump a red-black tree from an rb_root on
RHEL5, RHEL6 or Fedora.

I didn't explain the address clearly.

<cut>
The meaning of the "start" argument, which can be expressed either
symbolically or in hexadecimal format, depends upon whether the -N
option is pre-pended or not:
        start  The address of the structure where radix_tree_root(radix
               tree) or rb_node(red-black tree) is embeded.
     -N start  The address of the structure radix_tree_node(radix tree)
               or rb_node(red-black tree)
<cut>

So you can only specified rb_node's related address. The following is
about why the command doesn't support your situation.

In your situation, the offset you offered is the offset of rb_root.

struct rb_root
{
        struct rb_node *rb_node;
};

So I can get the address of root node, then get the address of its
offspring nodes. But now, I cannot convert the address of an
rb_node(offspring node) to its related structure's information. In
details, the rb_node may be embeded in a structure, but the offset of
rb_node is not offered. So the offset should be the offset of rb_node.


For example, taking an mm_struct, it has an "mm_rb" rb_root:

   crash>  mm_struct.mm_rb
   struct mm_struct {
       [0x8] struct rb_root mm_rb;
   }

Therefore I should be able to dump it with:

   crash>  tree -t rb -o mm_struct.mm_rb<mm-struct-address>

I get the mm_struct address like so:

   crash>  vm
   PID: 20739  TASK: ffff8100190330c0  CPU: 3   COMMAND: "crash"
          MM               PGD          RSS    TOTAL_VM
   ffff81003ceaeb00  ffff810023f9f000  111452k  190736k
   ...

But it always fails like this on RHEL5:

   crash>  tree -t rb -o mm_struct.mm_rb ffff81003ceaeb00
   ffff81003ceaeb08
   ffffffff8006fe65
   6508ec8348f38948
   tree: invalid kernel virtual address: 6508ec8348f38958  type: "rb_node rb_left"
   crash>

The same thing happens on RHEL6:

   crash>  vm
   PID: 14353  TASK: ffff88003a93c080  CPU: 3   COMMAND: "crash"
          MM               PGD          RSS    TOTAL_VM
   ffff880037b65840  ffff88001c31b000  153552k  288936k
   ...

   crash>  tree -t rb -o mm_struct.mm_rb ffff880037b65840
   ffff880037b65848
   ffffffff81010800
   f075894ce86d894c
   tree: invalid kernel virtual address: f075894ce86d895c  type: "rb_node rb_left"
   crash>

And on a Fedora 3.3.1-3.fc16 kernel:

   crash>  vm
   PID: 1175   TASK: ffff88003acb9730  CPU: 2   COMMAND: "crash"
          MM               PGD          RSS    TOTAL_VM
   ffff880038495c00  ffff88003ac5a000  181580k  335436k
   ...

   crash>  tree -t rb -o mm_struct.mm_rb ffff880038495c00
   ffff880038495c08
   ffffffff81018ce0
   f075894ce86d894c
   tree: invalid kernel virtual address: f075894ce86d895c  type: "rb_node rb_left"
   crash>

What's going on there?

Dave


--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/crash-utility




--
--
Regards
Qiao Nuohan



--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/crash-utility


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

 

Powered by Linux