On 04/19/2013 01:52 AM, Tejun Heo wrote: > Hello, Wanlong. > > On Thu, Apr 18, 2013 at 10:45:10PM +0800, Wanlong Gao wrote: >> OK, but I should capture it tomorrow morning because this remote machine has already panicked >> and need hard reboot. > > Can you please apply the following patch when you try the next time > and report the kernel log? It should prevent the oops from happening > and dump information on at least who are the involved parties. Here attached. Thanks, Wanlong Gao > > Thanks. > > diff --git a/block/blk-core.c b/block/blk-core.c > index 074b758..d5efebe 100644 > --- a/block/blk-core.c > +++ b/block/blk-core.c > @@ -150,6 +150,8 @@ void blk_rq_init(struct request_queue *q, struct request *rq) > } > EXPORT_SYMBOL(blk_rq_init); > > + > + > static void req_bio_endio(struct request *rq, struct bio *bio, > unsigned int nbytes, int error) > { > @@ -174,8 +176,15 @@ static void req_bio_endio(struct request *rq, struct bio *bio, > bio_integrity_advance(bio, nbytes); > > /* don't actually finish bio if it's part of flush sequence */ > - if (bio->bi_size == 0 && !(rq->cmd_flags & REQ_FLUSH_SEQ)) > + if (bio->bi_size == 0 && !(rq->cmd_flags & REQ_FLUSH_SEQ)) { > + if (bio->bi_bdev && (unsigned long)bio->bi_bdev < 4096) { > + printk_ratelimited("XXX req_bio_endio: queue %s bio=%p bi_bdev=%p bi_end_io=%pf\n", > + (rq->q && rq->q->backing_dev_info.dev) ? > + dev_name(rq->q->backing_dev_info.dev) : "", > + bio, bio->bi_bdev, bio->bi_end_io); > + } > bio_endio(bio, error); > + } > } > > void blk_dump_rq_flags(struct request *rq, char *msg) > diff --git a/fs/bio.c b/fs/bio.c > index bb5768f..da64e5a 100644 > --- a/fs/bio.c > +++ b/fs/bio.c > @@ -1428,7 +1428,10 @@ void bio_endio(struct bio *bio, int error) > else if (!test_bit(BIO_UPTODATE, &bio->bi_flags)) > error = -EIO; > > - trace_block_bio_complete(bio, error); > + if (bio->bi_bdev && (unsigned long)bio->bi_bdev < 4096) > + printk_ratelimited("XXX bio_endio: skipping TP for %p\n", bio); > + else > + trace_block_bio_complete(bio, error); > > if (bio->bi_end_io) > bio->bi_end_io(bio, error); >