[Crash-utility] [PATCH] foreach filter on state

Dave Anderson anderson at redhat.com
Thu Mar 8 16:32:53 UTC 2012



----- Original Message -----
> 
> 
> ----- Original Message -----
> > The patch below adds support to filter foreach on task states.  I've
> > found [foreach state=D bt] and [foreach state=R bt] useful; the former
> > allows to emulate the show-blocked-tasks Magic SysRq.
> > 
> > Rabin
> 
> I like this idea.  But for the sake of conformity, I will change the
> state identifiers to be the same two-letter strings that the "ps"
> command uses.  Queued for crash-6.0.5.

And for further conformity -- since no other crash commands use the
"argument=option" format -- and for further simplicity, I'll make
it easier to invoke:

  crash> help foreach

  NAME
    foreach - display command data for multiple tasks in the system

  SYNOPSIS
    foreach [[pid | taskp | name | state | [kernel | user]] ...]
            command [flag] [argument]

  DESCRIPTION
    This command allows for a an examination of various kernel data associated
    with any, or all, tasks in the system, without having to set the context
    to each targeted task.

        pid  perform the command(s) on this PID.
      taskp  perform the command(s) on task referenced by this hexadecimal
             task_struct pointer.
       name  perform the command(s) on all tasks with this name.  If the
             task name can be confused with a foreach command name, then
             precede the name string with a "\".  If the name string is
             enclosed within "'" characters, then the encompassed string
             must be a POSIX extended regular expression that will be used
             to match task names.
       user  perform the command(s) on all user (non-kernel) threads.
     kernel  perform the command(s) on all kernel threads.
     active  perform the command(s) on the active thread on each CPU.
      state  perform the command(s) on all tasks in the specified state, which
             may be one of: RU, IN, UN, ST, ZO, SW or DE.
    If none of the task-identifying arguments above are entered, the command
    will be performed on all tasks.

    ... [ cut ] ...

    Display the stack traces for all blocked (TASK_UNINTERRUPTIBLE) tasks:
 
      crash> foreach UN bt
      PID: 428    TASK: ffff880036b6c560  CPU: 1   COMMAND: "jbd2/dm-1-8"
       #0 [ffff880035779a70] __schedule at ffffffff815df272
       #1 [ffff880035779b08] schedule at ffffffff815dfacf
       #2 [ffff880035779b18] io_schedule at ffffffff815dfb7f
       #3 [ffff880035779b38] sleep_on_page at ffffffff81119a4e
       #4 [ffff880035779b48] __wait_on_bit at ffffffff815e039f
       #5 [ffff880035779b98] wait_on_page_bit at ffffffff81119bb8
       #6 [ffff880035779be8] filemap_fdatawait_range at ffffffff81119ccc
       #7 [ffff880035779cd8] filemap_fdatawait at ffffffff81119d8b
       #8 [ffff880035779ce8] jbd2_journal_commit_transaction at ffffffff8123a99c
       #9 [ffff880035779e58] kjournald2 at ffffffff8123ee7b
      #10 [ffff880035779ee8] kthread at ffffffff8108fb9c
      #11 [ffff880035779f48] kernel_thread_helper at ffffffff815ebaf4
      ...

  crash>

And again, thanks for the concept -- it's really pretty useful.

Dave




More information about the Crash-utility mailing list