lkml.org 
[lkml]   [2013]   [Apr]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[ 095/171 ] xen-blkback: fix dispatch_rw_block_io() error path
    3.6.11.2 stable review patch.
    If anyone has any objections, please let me know.

    ------------------

    From: Jan Beulich <JBeulich@suse.com>

    [ Upstream commit 0e5e098ac22dae38f957e951b70d3cf73beff0f7 ]

    Commit 7708992 ("xen/blkback: Seperate the bio allocation and the bio
    submission") consolidated the pendcnt updates to just a single write,
    neglecting the fact that the error path relied on it getting set to 1
    up front (such that the decrement in __end_block_io_op() would actually
    drop the count to zero, triggering the necessary cleanup actions).

    Also remove a misleading and a stale (after said commit) comment.

    CC: stable@vger.kernel.org
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    drivers/block/xen-blkback/blkback.c | 7 +------
    1 file changed, 1 insertion(+), 6 deletions(-)

    diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
    index c85d91a..4fd1dea 100644
    --- a/drivers/block/xen-blkback/blkback.c
    +++ b/drivers/block/xen-blkback/blkback.c
    @@ -743,13 +743,7 @@ static int dispatch_rw_block_io(struct xen_blkif *blkif,
    bio->bi_end_io = end_block_io_op;
    }

    - /*
    - * We set it one so that the last submit_bio does not have to call
    - * atomic_inc.
    - */
    atomic_set(&pending_req->pendcnt, nbio);
    -
    - /* Get a reference count for the disk queue and start sending I/O */
    blk_start_plug(&plug);

    for (i = 0; i < nbio; i++)
    @@ -777,6 +771,7 @@ static int dispatch_rw_block_io(struct xen_blkif *blkif,
    fail_put_bio:
    for (i = 0; i < nbio; i++)
    bio_put(biolist[i]);
    + atomic_set(&pending_req->pendcnt, 1);
    __end_block_io_op(pending_req, -EINVAL);
    msleep(1); /* back off a bit */
    return -EIO;
    --
    1.7.10.4



    \
     
     \ /
      Last update: 2013-04-12 00:01    [W:4.401 / U:0.284 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site