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

Re: [Xen-devel] Kernel Panic in xen-blkfront.c:blkif_queue_request under 2.6.28



Jens Axboe wrote:
To shed some more light on this, I'd suggest changing that BUG_ON() to
some code that simply dumps each segment (each bvec in the iterator
list) from start to finish along with values of
request->nr_phys_segments and size info.

OK, something like this?

   J

Subject: xen/blkfront: try to track down over-segment BUG_ON in blkfront

Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx>
---
drivers/block/xen-blkfront.c |   24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)

===================================================================
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -240,7 +240,10 @@

        ring_req->nr_segments = 0;
        rq_for_each_segment(bvec, req, iter) {
-               BUG_ON(ring_req->nr_segments == BLKIF_MAX_SEGMENTS_PER_REQUEST);
+               if (WARN_ON(ring_req->nr_segments >=
+                           BLKIF_MAX_SEGMENTS_PER_REQUEST))
+                       goto dump_req;
+
                buffer_mfn = pfn_to_mfn(page_to_pfn(bvec->bv_page));
                fsect = bvec->bv_offset >> 9;
                lsect = fsect + (bvec->bv_len >> 9) - 1;
@@ -274,6 +277,25 @@
        gnttab_free_grant_references(gref_head);

        return 0;
+
+dump_req:
+       {
+               int i;
+
+               printk(KERN_DEBUG "too many segments for ring (%d): "
+                      "req->nr_phys_segments = %d\n",
+                      BLKIF_MAX_SEGMENTS_PER_REQUEST, req->nr_phys_segments);
+
+               i = 0;
+               rq_for_each_segment(bvec, req, iter) {
+                       printk(KERN_DEBUG
+                              "  %d: bio page %p pfn %lx off %u len %u\n",
+                              i++, bvec->bv_page, page_to_pfn(bvec->bv_page),
+                              bvec->bv_offset, bvec->bv_len);
+               }
+       }
+
+       return 1;
}





_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.