lkml.org 
[lkml]   [2017]   [Apr]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 16/22] xen-blkfront: Make use of the new sg_map helper function
    Straightforward conversion to the new helper, except due to
    the lack of error path, we have to warn if unmapable memory
    is ever present in the sgl.

    Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
    ---
    drivers/block/xen-blkfront.c | 33 +++++++++++++++++++++++++++------
    1 file changed, 27 insertions(+), 6 deletions(-)

    diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
    index 5067a0a..7dcf41d 100644
    --- a/drivers/block/xen-blkfront.c
    +++ b/drivers/block/xen-blkfront.c
    @@ -807,8 +807,19 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri
    BUG_ON(sg->offset + sg->length > PAGE_SIZE);

    if (setup.need_copy) {
    - setup.bvec_off = sg->offset;
    - setup.bvec_data = kmap_atomic(sg_page(sg));
    + setup.bvec_off = 0;
    + setup.bvec_data = sg_map(sg, SG_KMAP_ATOMIC);
    + if (IS_ERR(setup.bvec_data)) {
    + /*
    + * This should really never happen unless
    + * the code is changed to use memory that is
    + * not mappable in the sg. Seeing there is a
    + * questionable error path out of here,
    + * we WARN.
    + */
    + WARN(1, "Non-mappable memory used in sg!");
    + return 1;
    + }
    }

    gnttab_foreach_grant_in_range(sg_page(sg),
    @@ -818,7 +829,7 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri
    &setup);

    if (setup.need_copy)
    - kunmap_atomic(setup.bvec_data);
    + sg_unmap(sg, setup.bvec_data, SG_KMAP_ATOMIC);
    }
    if (setup.segments)
    kunmap_atomic(setup.segments);
    @@ -1468,8 +1479,18 @@ static bool blkif_completion(unsigned long *id,
    for_each_sg(s->sg, sg, num_sg, i) {
    BUG_ON(sg->offset + sg->length > PAGE_SIZE);

    - data.bvec_offset = sg->offset;
    - data.bvec_data = kmap_atomic(sg_page(sg));
    + data.bvec_offset = 0;
    + data.bvec_data = sg_map(sg, SG_KMAP_ATOMIC);
    + if (IS_ERR(data.bvec_data)) {
    + /*
    + * This should really never happen unless
    + * the code is changed to use memory that is
    + * not mappable in the sg. Seeing there is no
    + * clear error path, we WARN.
    + */
    + WARN(1, "Non-mappable memory used in sg!");
    + return 1;
    + }

    gnttab_foreach_grant_in_range(sg_page(sg),
    sg->offset,
    @@ -1477,7 +1498,7 @@ static bool blkif_completion(unsigned long *id,
    blkif_copy_from_grant,
    &data);

    - kunmap_atomic(data.bvec_data);
    + sg_unmap(sg, data.bvec_data, SG_KMAP_ATOMIC);
    }
    }
    /* Add the persistent grant into the list of free grants */
    --
    2.1.4
    \
     
     \ /
      Last update: 2017-04-14 00:13    [W:4.224 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site