lkml.org 
[lkml]   [2009]   [Apr]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 16/17] blk-map/bio: remove superflous @len parameter from blk_rq_map_user_iov()
    Hello,

    Boaz Harrosh wrote:
    > I did not go to the bottom of this but how does that do not change
    > user-space API. It would now fail in code that would work before.
    >
    > What if I want to try variable size commands, where I try the
    > shorter first, then a longer one (or vis versa). I would setup
    > memory mapping to the biggest command but issue a length that
    > correspond to the encoded command inside the CDB.
    >
    > The bi->bi_size is not only mapping size it is also the command size
    > I want to actually read/write.
    >
    > But I might read this wrong though

    Please see below.

    >> diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c
    >> index 73cfd91..fd538f8 100644
    >> --- a/block/scsi_ioctl.c
    >> +++ b/block/scsi_ioctl.c
    >> @@ -288,7 +288,6 @@ static int sg_io(struct request_queue *q, struct gendisk *bd_disk,
    >>
    >> if (hdr->iovec_count) {
    >> const int size = sizeof(struct sg_iovec) * hdr->iovec_count;
    >> - size_t iov_data_len;
    >> struct iovec *iov;
    >>
    >> iov = kmalloc(size, GFP_KERNEL);
    >> @@ -304,15 +303,11 @@ static int sg_io(struct request_queue *q, struct gendisk *bd_disk,
    >> }
    >>
    >> /* SG_IO howto says that the shorter of the two wins */
    >> - iov_data_len = iov_length(iov, hdr->iovec_count);
    >> - if (hdr->dxfer_len < iov_data_len) {
    >> - hdr->iovec_count = iov_shorten(iov, hdr->iovec_count,
    >> - hdr->dxfer_len);
    >> - iov_data_len = hdr->dxfer_len;
    >> - }
    >> + hdr->iovec_count = iov_shorten(iov, hdr->iovec_count,
    >> + hdr->dxfer_len);
    >>
    >> ret = blk_rq_map_user_iov(q, rq, NULL, iov, hdr->iovec_count,
    >> - iov_data_len, GFP_KERNEL);
    >> + GFP_KERNEL);

    blk_rq_map_user_iov() never had the shorter data len functionality.
    It fails requests with -EINVAL if iov_length(iov) != dxfer_len, so a
    patch in the previous patchset adds the above iov_shorten() call to
    trim iov if dxfer_len is shorter. In this patch, it gets a bit
    simpler as the length parameter isn't necessary.

    Thanks.

    --
    tejun


    \
     
     \ /
      Last update: 2009-04-02 00:19    [W:0.028 / U:3.200 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site