lkml.org 
[lkml]   [2009]   [Sep]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH] aoe: end barrier bios with EOPNOTSUPP
    BugLink: http://bugzilla.kernel.org/show_bug.cgi?id=13942

    Bruno Premont noticed that aoe throws a BUG during umount of an XFS in
    2.6.31:

    [ 5259.349897] aoe: bi_io_vec is NULL
    [ 5259.349940] ------------[ cut here ]------------
    [ 5259.349958] kernel BUG at /usr/src/linux-2.6/drivers/block/aoe/aoeblk.c:177!
    [ 5259.349990] invalid opcode: 0000 [#1]

    The bio in question is a barrier. Jens Axboe suggested that such bios
    need to be recognized and ended with -EOPNOTSUPP by any driver that
    provides its own ->make_request_fn handler and does not handle
    barriers.

    In testing the changes below eliminate the BUG.

    Signed-off-by: Ed L. Cashin <ecashin@coraid.com>
    ---
    After this patch has been reviewed I plan to add this patch to
    the aoe quilt tree for linux-next.

    drivers/block/aoe/aoeblk.c | 3 +++
    1 files changed, 3 insertions(+), 0 deletions(-)

    diff --git a/drivers/block/aoe/aoeblk.c b/drivers/block/aoe/aoeblk.c
    index 2307a27..d6806fb 100644
    --- a/drivers/block/aoe/aoeblk.c
    +++ b/drivers/block/aoe/aoeblk.c
    @@ -172,6 +172,9 @@ aoeblk_make_request(struct request_queue *q, struct bio *bio)
    BUG();
    bio_endio(bio, -ENXIO);
    return 0;
    + } else if (bio_barrier(bio)) {
    + bio_endio(bio, -EOPNOTSUPP);
    + return 0;
    } else if (bio->bi_io_vec == NULL) {
    printk(KERN_ERR "aoe: bi_io_vec is NULL\n");
    BUG();
    --
    1.5.6.5

    --
    Ed Cashin
    http://noserose.net/e/
    http://www.coraid.com/


    \
     
     \ /
      Last update: 2009-09-09 18:49    [W:0.022 / U:2.016 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site