(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tracing) op: assign_op.Equal rhs: {(/sys/kernel/debug/tracing)} spids: [163] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:flock) op: assign_op.Equal rhs: {(/var/tmp/.ftrace-lock)} spids: [166] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:bufsize_kb) op: assign_op.Equal rhs: {(4096)} spids: [169] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_duration) op: assign_op.Equal rhs: {(0)} spids: [172] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:174) ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:duration) op: assign_op.Equal rhs: (word.Empty) spids: [176] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:177) ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_name) op: assign_op.Equal rhs: {(0)} spids: [179] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:181) ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:name) op: assign_op.Equal rhs: (word.Empty) spids: [183] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:184) ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_pid) op: assign_op.Equal rhs: {(0)} spids: [186] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:188) ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pid) op: assign_op.Equal rhs: (word.Empty) spids: [190] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:191) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ftext) op: assign_op.Equal rhs: (word.Empty) spids: [193] ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_start) op: assign_op.Equal rhs: {(0)} spids: [195] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:197) ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_end) op: assign_op.Equal rhs: {(0)} spids: [199] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:201) ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_device) op: assign_op.Equal rhs: {(0)} spids: [203] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:205) ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:device) op: assign_op.Equal rhs: (word.Empty) spids: [207] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:208) ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_iotype) op: assign_op.Equal rhs: {(0)} spids: [210] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:212) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:iotype) op: assign_op.Equal rhs: (word.Empty) spids: [214] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_queue) op: assign_op.Equal rhs: {(0)} spids: [216] ) ] ) (C {(trap)} {(SQ (Token id:Id.Lit_Chars val:':' span_id:222))} {(INT)} {(QUIT)} {(TERM)} {(PIPE)} {(HUP)} ) (command.ShFunction name: usage body: (command.BraceGroup children: [ (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:248) fd: -1 here_begin: {(END)} here_end_span_id: 278 stdin_parts: [ ('USAGE: iosnoop [-hQst] [-d device] [-i iotype] [-p PID] [-n name]\n') (' [duration]\n') (' -d device # device string (eg, ') (Id.Right_DoubleQuote '"') ('202,1)\n') (" -i iotype # match type (eg, '*R*' for all reads)\n") (' -n name # process name to match on I/O issue\n') (' -p PID # PID to match on I/O issue\n') (' -Q # use queue insert as start time\n') (' -s # include start time of I/O (s)\n') (' -t # include completion time of I/O (s)\n') (' -h # this usage message\n') (' duration # duration seconds, and use buffers\n') (' eg,\n') (' iosnoop # watch block I/O live (unbuffered)\n') (' iosnoop 1 # trace 1 sec (buffered)\n') (' iosnoop -Q # include queueing time in LATms\n') (' iosnoop -ts # include start and end timestamps\n') (" iosnoop -i '*R*' # trace reads\n") (' iosnoop -p 91 # show I/O issued when PID 91 is on-CPU\n') (' iosnoop -Qp 91 # show I/O queued by PID 91, queue time\n') ('\n') ('See the man page and example file for more info.\n') ] ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:251) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:280) ) ] ) ) (command.ShFunction name: warn body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [(C {(eval)} {(DQ ($ Id.VSub_At '$@'))})] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:301) ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ('WARNING: command failed ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:313) ) ($ Id.VSub_At '$@') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:315) ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:308) fd: -1 arg_word: {(2)} ) ] ) ] spids: [292 303] ) ] ) ] ) ) (command.ShFunction name: end body: (command.BraceGroup children: [ (command.Simple words: [{(echo)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:337) fd: 2 arg_word: {(/dev/null)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('Ending tracing...'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:347) fd: 2 arg_word: {(/dev/null)} ) ] ) (C {(cd)} {($ Id.VSub_DollarName '$tracing')}) (C {(warn)} {(DQ ('echo 0 > events/block/') ($ Id.VSub_DollarName '$b_start') (/enable))}) (C {(warn)} {(DQ ('echo 0 > events/block/block_rq_complete/enable'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.Binary op_id: Id.Arith_DPipe left: (arith_expr.Binary op_id: Id.Arith_DPipe left: (arith_expr.VarRef token: (Token id: Id.Lit_ArithVarLike val: opt_device span_id: 376 ) ) right: (arith_expr.VarRef token: (Token id: Id.Lit_ArithVarLike val: opt_iotype span_id: 380 ) ) ) right: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:opt_pid span_id:384) ) ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:388) ) ] action: [ (C {(warn)} {(DQ ('echo 0 > events/block/') ($ Id.VSub_DollarName '$b_start') (/filter))} ) (C {(warn)} {(DQ ('echo 0 > events/block/block_rq_complete/filter'))}) ] spids: [372 390] ) ] ) (C {(warn)} {(DQ ('echo > trace'))}) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:wroteflock span_id:421) ) ) (C {(warn)} {(DQ ('rm ') ($ Id.VSub_DollarName '$flock'))}) ] ) ] ) ) (command.ShFunction name: die body: (command.BraceGroup children: [ (command.Simple words: [{(echo)} {(DQ ($ Id.VSub_At '$@'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:447) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:455) arg_word: {(1)} ) ] ) ) (command.ShFunction name: edie body: (command.BraceGroup children: [ (command.Simple words: [{(echo)} {(DQ ($ Id.VSub_At '$@'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:475) fd: -1 arg_word: {(2)} ) ] ) (command.Simple words: [{(exec)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:485) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:488) fd: 2 arg_word: {(1)} ) ] ) (C {(end)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:495) arg_word: {(1)} ) ] ) ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:505) cond: [ (C {(getopts)} {(d) (Id.Lit_Other ':') (hi) (Id.Lit_Other ':') (n) (Id.Lit_Other ':') (p) (Id.Lit_Other ':') (Qst) } {(opt)} ) ] body: (command.DoGroup children: [ (command.Case to_match: {($ Id.VSub_DollarName '$opt')} arms: [ (case_arm pat_list: [{(d)}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_device) op: assign_op.Equal rhs: {(1)} spids: [534] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:536) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:device) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTARG')} spids: [538] ) ] ) ] spids: [531 532 541 -1] ) (case_arm pat_list: [{(i)}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_iotype) op: assign_op.Equal rhs: {(1)} spids: [547] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:549) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:iotype) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTARG')} spids: [551] ) ] ) ] spids: [544 545 554 -1] ) (case_arm pat_list: [{(n)}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_name) op: assign_op.Equal rhs: {(1)} spids: [560] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:562) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:name) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTARG')} spids: [564] ) ] ) ] spids: [557 558 567 -1] ) (case_arm pat_list: [{(p)}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_pid) op: assign_op.Equal rhs: {(1)} spids: [573] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:575) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pid) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTARG')} spids: [577] ) ] ) ] spids: [570 571 580 -1] ) (case_arm pat_list: [{(Q)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_queue) op: assign_op.Equal rhs: {(1)} spids: [586] ) ] ) ] spids: [583 584 589 -1] ) (case_arm pat_list: [{(s)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_start) op: assign_op.Equal rhs: {(1)} spids: [595] ) ] ) ] spids: [592 593 598 -1] ) (case_arm pat_list: [{(t)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_end) op: assign_op.Equal rhs: {(1)} spids: [604] ) ] ) ] spids: [601 602 607 -1] ) (case_arm pat_list: [{(h)} {(Id.Lit_QMark '?')}] action: [(C {(usage)})] spids: [610 613 617 -1] ) ] ) ] ) ) (C {(shift)} { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$OPTIND')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child:(arith_expr.ArithWord w:{($ Id.VSub_Pound '$#')})) terminator: (Token id:Id.Op_Semi val:';' span_id:645) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_duration) op: assign_op.Equal rhs: {(1)} spids: [650] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:duration) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [654] ) ] ) (C {(shift)}) ] spids: [637 647] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:opt_device span_id:666) ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:670) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:major) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:device span_id:677) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{(',*')}) ) } spids: [675] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:minor) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:device span_id:685) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{('*,')}) ) } spids: [683] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dev) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.Binary op_id: Id.Arith_DLess left: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:major span_id:695) ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 20)}) ) right: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:minor span_id:704) ) ) ) } spids: [691] ) ] ) ] spids: [662 672] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.Binary op_id: Id.Arith_DAmp left: (arith_expr.VarRef token:(Token id:Id.Lit_ArithVarLike val:opt_pid span_id:717)) right: (arith_expr.VarRef token:(Token id:Id.Lit_ArithVarLike val:opt_name span_id:721)) ) ) (C {(die)} {(DQ ('ERROR: use either -p or -n.'))}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.VarRef token:(Token id:Id.Lit_ArithVarLike val:opt_pid span_id:736)) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ftext) op: assign_op.Equal rhs: {(DQ (' issued by PID ') ($ Id.VSub_DollarName '$pid'))} spids: [743] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.VarRef token:(Token id:Id.Lit_ArithVarLike val:opt_name span_id:751)) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ftext) op: assign_op.Equal rhs: { (DQ (' issued by process name ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:761) ) ($ Id.VSub_DollarName '$name') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:763) ) ) } spids: [758] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:opt_duration span_id:770) ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:774) ) ] action: [ (C {(echo)} { (DQ ('Tracing block I/O') ($ Id.VSub_DollarName '$ftext') (' for ') ($ Id.VSub_DollarName '$duration') (' seconds (buffered)...') ) } ) ] spids: [766 776] ) ] else_action: [ (C {(echo)} {(DQ ('Tracing block I/O') ($ Id.VSub_DollarName '$ftext') ('. Ctrl-C to end.'))}) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:opt_queue span_id:806) ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:810) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:b_start) op: assign_op.Equal rhs: {(block_rq_insert)} spids: [815] ) ] ) ] spids: [802 812] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:b_start) op: assign_op.Equal rhs: {(block_rq_issue)} spids: [821] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (command.DParen child: (arith_expr.VarRef token:(Token id:Id.Lit_ArithVarLike val:opt_duration span_id:832)) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:use) op: assign_op.Equal rhs: {(mawk)} spids: [839] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:use) op: assign_op.Equal rhs: {(gawk)} spids: [844] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_x child: {(/usr/bin/) ($ Id.VSub_DollarName '$use')} ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:awk) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$use')} spids: [861] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:awk) op: assign_op.Equal rhs: {(awk)} spids: [866] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:wroteflock) op: assign_op.Equal rhs: {(1)} spids: [869] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(cd)} {($ Id.VSub_DollarName '$tracing')}) (C {(die)} { (DQ ('ERROR: accessing tracing. Root user? Kernel has FTRACE?\n') (' debugfs mounted? (mount -t debugfs debugfs /sys/kernel/debug)') ) } ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Unary op_id:Id.BoolUnary_e child:{($ Id.VSub_DollarName '$flock')}) ) (C {(die)} { (DQ ('ERROR: ftrace may be in use by PID ') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:907) command_list: (command.CommandList children: [(C {(cat)} {($ Id.VSub_DollarName '$flock')})] ) ) (' ') ($ Id.VSub_DollarName '$flock') ) } ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{(echo)} {($ Id.VSub_Dollar '$$')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:920) fd: -1 arg_word: {($ Id.VSub_DollarName '$flock')} ) ] ) (C {(die)} {(DQ ('ERROR: unable to write ') ($ Id.VSub_DollarName '$flock') (.))}) ] ) (command.Simple words: [{(echo)} {(nop)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:942) fd: -1 arg_word: {(current_tracer)} ) ] ) (C {(warn)} {(DQ ('echo ') ($ Id.VSub_DollarName '$bufsize_kb') (' > buffer_size_kb'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter) op: assign_op.Equal rhs: (word.Empty) spids: [954] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:opt_iotype span_id:960) ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:964) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter) op: assign_op.Equal rhs: { (DQ ('rwbs ~ ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:972) ) ($ Id.VSub_DollarName '$iotype') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:974) ) ) } spids: [969] ) ] ) ] spids: [956 966] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:opt_device span_id:983) ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:987) ) ] action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: {(DQ ($ Id.VSub_DollarName '$filter'))} right: {(DQ )} ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$filter') (' && '))} spids: [1007] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name filter) ('dev == ') ($ Id.VSub_DollarName '$dev'))} spids: [1014] ) ] ) ] spids: [979 989] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter_i) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$filter')} spids: [1025] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:opt_pid span_id:1032) ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1036) ) ] action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: {(DQ ($ Id.VSub_DollarName '$filter_i'))} right: {(DQ )} ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter_i) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$filter_i') (' && '))} spids: [1056] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter_i) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name filter_i) ('common_pid == ') ($ Id.VSub_DollarName '$pid'))} spids: [1063] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$filter'))} right: {(DQ )} ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter) op: assign_op.Equal rhs: {(0)} spids: [1088] ) ] ) ] ) ] spids: [1028 1038] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.Binary op_id: Id.Arith_DPipe left: (arith_expr.Binary op_id: Id.Arith_DPipe left: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:opt_iotype span_id:1097) ) right: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:opt_device span_id:1101) ) ) right: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:opt_pid span_id:1105) ) ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1109) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (command.Simple words: [{(echo)} {(DQ ($ Id.VSub_DollarName '$filter_i'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1124) fd: -1 arg_word: {(events/block/) ($ Id.VSub_DollarName '$b_start') (/filter)} ) ] ) ] negated: T ) (command.Pipeline children: [ (command.Simple words: [{(echo)} {(DQ ($ Id.VSub_DollarName '$filter'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1142) fd: -1 arg_word: {(events/block/block_rq_complete/filter)} ) ] ) ] negated: T ) ] ) ] action: [(C {(edie)} {(DQ ('ERROR: setting -d or -t filter. Exiting.'))})] spids: [1114 1147] ) ] ) ] spids: [1093 1111] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (command.Simple words: [{(echo)} {(1)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1169) fd: -1 arg_word: {(events/block/) ($ Id.VSub_DollarName '$b_start') (/enable)} ) ] ) ] negated: T ) (command.Pipeline children: [ (command.Simple words: [{(echo)} {(1)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1185) fd: -1 arg_word: {(events/block/block_rq_complete/enable)} ) ] ) ] negated: T ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1188) ) ] action: [(C {(edie)} {(DQ ('ERROR: enabling block I/O tracepoints. Exiting.'))})] spids: [1161 1190] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.VarRef token:(Token id:Id.Lit_ArithVarLike val:opt_start span_id:1203)) ) (C {(printf)} {(DQ ('%-15s '))} {(DQ (STARTs))}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.VarRef token:(Token id:Id.Lit_ArithVarLike val:opt_end span_id:1222)) ) (C {(printf)} {(DQ ('%-15s '))} {(DQ (ENDs))}) ] ) (C {(printf)} {(DQ ('%-12.12s %-6s %-4s %-8s %-12s %-6s %8s') (Id.Lit_Other '\\') (n))} {(DQ (COMM))} {(DQ (PID))} {(DQ (TYPE))} {(DQ (DEV))} {(DQ (BLOCK))} {(DQ (BYTES))} {(DQ (LATms))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:offset) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1300) command_list: (command.CommandList children: [ (C {($ Id.VSub_DollarName '$awk')} { (SQ (Token id:Id.Lit_Chars val:'BEGIN { o = 0; }\n' span_id:1304) (Token id: Id.Lit_Chars val: '\t$1 == "#" && $2 ~ /TASK/ && NF == 6 { o = 1; }\n' span_id: 1305 ) (Token id:Id.Lit_Chars val:'\t$2 ~ /TASK/ { print o; exit }' span_id:1306) ) } {(trace)} ) ] ) ) } spids: [1299] ) ] ) (C {(warn)} {(DQ ('echo > trace'))}) (command.Pipeline children: [ (command.Subshell command_list: (command.CommandList children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:opt_duration span_id:1328) ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1332) ) ] action: [(C {(sleep)} {($ Id.VSub_DollarName '$duration')}) (C {(cat)} {(trace)})] spids: [1324 1334] ) ] else_action: [(C {(cat)} {(trace_pipe)})] ) ] ) ) (C {($ Id.VSub_DollarName '$awk')} {(-v)} {(Id.Lit_VarLike 'o=') ($ Id.VSub_DollarName '$offset')} {(-v)} {(Id.Lit_VarLike 'opt_name=') ($ Id.VSub_DollarName '$opt_name')} {(-v)} {(Id.Lit_VarLike 'name=') ($ Id.VSub_DollarName '$name')} {(-v)} {(Id.Lit_VarLike 'opt_duration=') ($ Id.VSub_DollarName '$opt_duration')} {(-v)} {(Id.Lit_VarLike 'opt_start=') ($ Id.VSub_DollarName '$opt_start')} {(-v)} {(Id.Lit_VarLike 'opt_end=') ($ Id.VSub_DollarName '$opt_end')} {(-v)} {(Id.Lit_VarLike 'b_start=') ($ Id.VSub_DollarName '$b_start')} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1409) (Token id:Id.Lit_Chars val:'\t# common fields\n' span_id:1410) (Token id:Id.Lit_Chars val:'\t$1 != "#" {\n' span_id:1411) (Token id: Id.Lit_Chars val: '\t\t# task name can contain dashes\n' span_id: 1412 ) (Token id:Id.Lit_Chars val:'\t\tcomm = pid = $1\n' span_id:1413) (Token id: Id.Lit_Chars val: '\t\tsub(/-[0-9][0-9]*/, "", comm)\n' span_id: 1414 ) (Token id:Id.Lit_Chars val:'\t\tsub(/.*-/, "", pid)\n' span_id:1415) (Token id: Id.Lit_Chars val: '\t\ttime = $(3+o); sub(":", "", time)\n' span_id: 1416 ) (Token id:Id.Lit_Chars val:'\t\tdev = $(5+o)\n' span_id:1417) (Token id:Id.Lit_Chars val:'\t}\n' span_id:1418) (Token id:Id.Lit_Chars val:'\n' span_id:1419) (Token id:Id.Lit_Chars val:'\t# block I/O request\n' span_id:1420) (Token id:Id.Lit_Chars val:'\t$1 != "#" && $0 ~ b_start {\n' span_id:1421) (Token id: Id.Lit_Chars val: '\t\tif (opt_name && match(comm, name) == 0)\n' span_id: 1422 ) (Token id:Id.Lit_Chars val:'\t\t\tnext\n' span_id:1423) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:1424) (Token id: Id.Lit_Chars val: '\t\t# example: (fields1..4+o) 202,1 W 0 () 12862264 + 8 [tar]\n' span_id: 1425 ) (Token id: Id.Lit_Chars val: '\t\t# The cmd field "()" might contain multiple words (hex),\n' span_id: 1426 ) (Token id:Id.Lit_Chars val:'\t\t# hence stepping from the right (NF-3).\n' span_id:1427) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:1428) (Token id:Id.Lit_Chars val:'\t\tloc = $(NF-3)\n' span_id:1429) (Token id:Id.Lit_Chars val:'\t\tstarts[dev, loc] = time\n' span_id:1430) (Token id:Id.Lit_Chars val:'\t\tcomms[dev, loc] = comm\n' span_id:1431) (Token id:Id.Lit_Chars val:'\t\tpids[dev, loc] = pid\n' span_id:1432) (Token id:Id.Lit_Chars val:'\t\tnext\n' span_id:1433) (Token id:Id.Lit_Chars val:'\t}\n' span_id:1434) (Token id:Id.Lit_Chars val:'\n' span_id:1435) (Token id:Id.Lit_Chars val:'\t# block I/O completion\n' span_id:1436) (Token id: Id.Lit_Chars val: '\t$1 != "#" && $0 ~ /rq_complete/ {\n' span_id: 1437 ) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:1438) (Token id: Id.Lit_Chars val: '\t\t# example: (fields1..4+o) 202,1 W () 12862256 + 8 [0]\n' span_id: 1439 ) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:1440) (Token id:Id.Lit_Chars val:'\t\tdir = $(6+o)\n' span_id:1441) (Token id:Id.Lit_Chars val:'\t\tloc = $(NF-3)\n' span_id:1442) (Token id:Id.Lit_Chars val:'\t\tnsec = $(NF-1)\n' span_id:1443) (Token id:Id.Lit_Chars val:'\n' span_id:1444) (Token id: Id.Lit_Chars val: '\t\tif (starts[dev, loc] > 0) {\n' span_id: 1445 ) (Token id:Id.Lit_Chars val:'\t\t\tlatency = sprintf("%.2f",\n' span_id:1446) (Token id: Id.Lit_Chars val: '\t\t\t 1000 * (time - starts[dev, loc]))\n' span_id: 1447 ) (Token id:Id.Lit_Chars val:'\t\t\tcomm = comms[dev, loc]\n' span_id:1448) (Token id:Id.Lit_Chars val:'\t\t\tpid = pids[dev, loc]\n' span_id:1449) (Token id:Id.Lit_Chars val:'\n' span_id:1450) (Token id:Id.Lit_Chars val:'\t\t\tif (opt_start)\n' span_id:1451) (Token id:Id.Lit_Chars val:'\t\t\t\tprintf "%-15s ", starts[dev, loc]\n' span_id:1452) (Token id:Id.Lit_Chars val:'\t\t\tif (opt_end)\n' span_id:1453) (Token id:Id.Lit_Chars val:'\t\t\t\tprintf "%-15s ", time\n' span_id:1454) (Token id: Id.Lit_Chars val: '\t\t\tprintf "%-12.12s %-6s %-4s %-8s %-12s %-6s %8s\\n",\n' span_id: 1455 ) (Token id:Id.Lit_Chars val:'\t\t\t comm, pid, dir, dev, loc, nsec * 512, latency\n' span_id:1456) (Token id:Id.Lit_Chars val:'\t\t\tif (!opt_duration)\n' span_id:1457) (Token id:Id.Lit_Chars val:'\t\t\t\tfflush()\n' span_id:1458) (Token id:Id.Lit_Chars val:'\n' span_id:1459) (Token id:Id.Lit_Chars val:'\t\t\tdelete starts[dev, loc]\n' span_id:1460) (Token id:Id.Lit_Chars val:'\t\t\tdelete comms[dev, loc]\n' span_id:1461) (Token id:Id.Lit_Chars val:'\t\t\tdelete pids[dev, loc]\n' span_id:1462) (Token id:Id.Lit_Chars val:'\t\t}\n' span_id:1463) (Token id:Id.Lit_Chars val:'\t\tnext\n' span_id:1464) (Token id:Id.Lit_Chars val:'\t}\n' span_id:1465) (Token id:Id.Lit_Chars val:'\n' span_id:1466) (Token id: Id.Lit_Chars val: '\t$0 ~ /LOST.*EVENTS/ { print "WARNING: " $0 > "/dev/stderr" }\n' span_id: 1467 ) ) } ) ] negated: F ) (C {(end)}) ] )