Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bb350d1decd9c48ffaa7f7e263df3056df9f4f21
Commit:     bb350d1decd9c48ffaa7f7e263df3056df9f4f21
Parent:     f0002c4e1fe22d74a43d4ba3379257ee612e2724
Author:     FUJITA Tomonori <[EMAIL PROTECTED]>
AuthorDate: Sat May 26 02:28:25 2007 +0900
Committer:  James Bottomley <[EMAIL PROTECTED]>
CommitDate: Thu Jun 7 09:02:50 2007 -0500

    [SCSI] ib_srp: convert to use the data buffer accessors
    
    - remove the unnecessary map_single path.
    
    - convert to use the new accessors for the sg lists and the
    parameters.
    
    Jens Axboe <[EMAIL PROTECTED]> did the for_each_sg cleanup.
    
    Signed-off-by: FUJITA Tomonori <[EMAIL PROTECTED]>
    Acked-by: Roland Dreier <[EMAIL PROTECTED]>
    Signed-off-by: James Bottomley <[EMAIL PROTECTED]>
---
 drivers/infiniband/ulp/srp/ib_srp.c |   63 +++++++++++------------------------
 drivers/infiniband/ulp/srp/ib_srp.h |    5 ---
 2 files changed, 20 insertions(+), 48 deletions(-)

diff --git a/drivers/infiniband/ulp/srp/ib_srp.c 
b/drivers/infiniband/ulp/srp/ib_srp.c
index 39bf057..f01ca18 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -455,10 +455,7 @@ static void srp_unmap_data(struct scsi_cmnd *scmnd,
                           struct srp_target_port *target,
                           struct srp_request *req)
 {
-       struct scatterlist *scat;
-       int nents;
-
-       if (!scmnd->request_buffer ||
+       if (!scsi_sglist(scmnd) ||
            (scmnd->sc_data_direction != DMA_TO_DEVICE &&
             scmnd->sc_data_direction != DMA_FROM_DEVICE))
                return;
@@ -468,20 +465,8 @@ static void srp_unmap_data(struct scsi_cmnd *scmnd,
                req->fmr = NULL;
        }
 
-       /*
-        * This handling of non-SG commands can be killed when the
-        * SCSI midlayer no longer generates non-SG commands.
-        */
-       if (likely(scmnd->use_sg)) {
-               nents = scmnd->use_sg;
-               scat  = scmnd->request_buffer;
-       } else {
-               nents = 1;
-               scat  = &req->fake_sg;
-       }
-
-       ib_dma_unmap_sg(target->srp_host->dev->dev, scat, nents,
-                       scmnd->sc_data_direction);
+       ib_dma_unmap_sg(target->srp_host->dev->dev, scsi_sglist(scmnd),
+                       scsi_sg_count(scmnd), scmnd->sc_data_direction);
 }
 
 static void srp_remove_req(struct srp_target_port *target, struct srp_request 
*req)
@@ -595,6 +580,7 @@ static int srp_map_fmr(struct srp_target_port *target, 
struct scatterlist *scat,
        int ret;
        struct srp_device *dev = target->srp_host->dev;
        struct ib_device *ibdev = dev->dev;
+       struct scatterlist *sg;
 
        if (!dev->fmr_pool)
                return -ENODEV;
@@ -604,16 +590,16 @@ static int srp_map_fmr(struct srp_target_port *target, 
struct scatterlist *scat,
                return -EINVAL;
 
        len = page_cnt = 0;
-       for (i = 0; i < sg_cnt; ++i) {
-               unsigned int dma_len = ib_sg_dma_len(ibdev, &scat[i]);
+       scsi_for_each_sg(req->scmnd, sg, sg_cnt, i) {
+               unsigned int dma_len = ib_sg_dma_len(ibdev, sg);
 
-               if (ib_sg_dma_address(ibdev, &scat[i]) & ~dev->fmr_page_mask) {
+               if (ib_sg_dma_address(ibdev, sg) & ~dev->fmr_page_mask) {
                        if (i > 0)
                                return -EINVAL;
                        else
                                ++page_cnt;
                }
-               if ((ib_sg_dma_address(ibdev, &scat[i]) + dma_len) &
+               if ((ib_sg_dma_address(ibdev, sg) + dma_len) &
                    ~dev->fmr_page_mask) {
                        if (i < sg_cnt - 1)
                                return -EINVAL;
@@ -633,12 +619,12 @@ static int srp_map_fmr(struct srp_target_port *target, 
struct scatterlist *scat,
                return -ENOMEM;
 
        page_cnt = 0;
-       for (i = 0; i < sg_cnt; ++i) {
-               unsigned int dma_len = ib_sg_dma_len(ibdev, &scat[i]);
+       scsi_for_each_sg(req->scmnd, sg, sg_cnt, i) {
+               unsigned int dma_len = ib_sg_dma_len(ibdev, sg);
 
                for (j = 0; j < dma_len; j += dev->fmr_page_size)
                        dma_pages[page_cnt++] =
-                               (ib_sg_dma_address(ibdev, &scat[i]) &
+                               (ib_sg_dma_address(ibdev, sg) &
                                 dev->fmr_page_mask) + j;
        }
 
@@ -673,7 +659,7 @@ static int srp_map_data(struct scsi_cmnd *scmnd, struct 
srp_target_port *target,
        struct srp_device *dev;
        struct ib_device *ibdev;
 
-       if (!scmnd->request_buffer || scmnd->sc_data_direction == DMA_NONE)
+       if (!scsi_sglist(scmnd) || scmnd->sc_data_direction == DMA_NONE)
                return sizeof (struct srp_cmd);
 
        if (scmnd->sc_data_direction != DMA_FROM_DEVICE &&
@@ -683,18 +669,8 @@ static int srp_map_data(struct scsi_cmnd *scmnd, struct 
srp_target_port *target,
                return -EINVAL;
        }
 
-       /*
-        * This handling of non-SG commands can be killed when the
-        * SCSI midlayer no longer generates non-SG commands.
-        */
-       if (likely(scmnd->use_sg)) {
-               nents = scmnd->use_sg;
-               scat  = scmnd->request_buffer;
-       } else {
-               nents = 1;
-               scat  = &req->fake_sg;
-               sg_init_one(scat, scmnd->request_buffer, 
scmnd->request_bufflen);
-       }
+       nents = scsi_sg_count(scmnd);
+       scat  = scsi_sglist(scmnd);
 
        dev = target->srp_host->dev;
        ibdev = dev->dev;
@@ -724,6 +700,7 @@ static int srp_map_data(struct scsi_cmnd *scmnd, struct 
srp_target_port *target,
                 * descriptor.
                 */
                struct srp_indirect_buf *buf = (void *) cmd->add_data;
+               struct scatterlist *sg;
                u32 datalen = 0;
                int i;
 
@@ -732,11 +709,11 @@ static int srp_map_data(struct scsi_cmnd *scmnd, struct 
srp_target_port *target,
                        sizeof (struct srp_indirect_buf) +
                        count * sizeof (struct srp_direct_buf);
 
-               for (i = 0; i < count; ++i) {
-                       unsigned int dma_len = ib_sg_dma_len(ibdev, &scat[i]);
+               scsi_for_each_sg(scmnd, sg, count, i) {
+                       unsigned int dma_len = ib_sg_dma_len(ibdev, sg);
 
                        buf->desc_list[i].va  =
-                               cpu_to_be64(ib_sg_dma_address(ibdev, &scat[i]));
+                               cpu_to_be64(ib_sg_dma_address(ibdev, sg));
                        buf->desc_list[i].key =
                                cpu_to_be32(dev->mr->rkey);
                        buf->desc_list[i].len = cpu_to_be32(dma_len);
@@ -802,9 +779,9 @@ static void srp_process_rsp(struct srp_target_port *target, 
struct srp_rsp *rsp)
                }
 
                if (rsp->flags & (SRP_RSP_FLAG_DOOVER | SRP_RSP_FLAG_DOUNDER))
-                       scmnd->resid = be32_to_cpu(rsp->data_out_res_cnt);
+                       scsi_set_resid(scmnd, 
be32_to_cpu(rsp->data_out_res_cnt));
                else if (rsp->flags & (SRP_RSP_FLAG_DIOVER | 
SRP_RSP_FLAG_DIUNDER))
-                       scmnd->resid = be32_to_cpu(rsp->data_in_res_cnt);
+                       scsi_set_resid(scmnd, 
be32_to_cpu(rsp->data_in_res_cnt));
 
                if (!req->tsk_mgmt) {
                        scmnd->host_scribble = (void *) -1L;
diff --git a/drivers/infiniband/ulp/srp/ib_srp.h 
b/drivers/infiniband/ulp/srp/ib_srp.h
index 1d53c7b..e3573e7 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.h
+++ b/drivers/infiniband/ulp/srp/ib_srp.h
@@ -106,11 +106,6 @@ struct srp_request {
        struct srp_iu          *cmd;
        struct srp_iu          *tsk_mgmt;
        struct ib_pool_fmr     *fmr;
-       /*
-        * Fake scatterlist used when scmnd->use_sg==0.  Can be killed
-        * when the SCSI midlayer no longer generates non-SG commands.
-        */
-       struct scatterlist      fake_sg;
        struct completion       done;
        short                   index;
        u8                      cmd_done;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to