On 08/10/2012 01:46 PM, Jianpeng Ma wrote: > If process handled two or more devices,there will not be trace some > devices plug-operation. > > Signed-off-by: Jianpeng Ma <[email protected]> > --- > block/blk-core.c | 16 +++++++++++++++- > 1 file changed, 15 insertions(+), 1 deletion(-) > > diff --git a/block/blk-core.c b/block/blk-core.c > index 7a3abc6..034f186 100644 > --- a/block/blk-core.c > +++ b/block/blk-core.c > @@ -1521,11 +1521,25 @@ get_rq: > struct request *__rq; > > __rq = list_entry_rq(plug->list.prev); > - if (__rq->q != q) > + if (__rq->q != q) { > plug->should_sort = 1; > + trace_block_plug(q); > + } > + } else { > + struct request *__rq; > + list_for_each_entry_reverse(__rq, &plug->list, > + queuelist) { > + if (__rq->q == q) { > + list_add_tail(&req->queuelist, > + &__rq->queuelist); > + goto stat_acct;
Did you verify this? It doesn't look right to me. You browse the list in reverse, which means __rq is the first one that has a matching q. Then you add the new req IN FRONT of that. You would want list_add() here instead, adding it as the last member of that q string, not in the middle. -- Jens Axboe -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

