]> git.karo-electronics.de Git - linux-beck.git/commitdiff
target: remove the task_lba field in struct se_task
authorChristoph Hellwig <hch@infradead.org>
Mon, 23 Apr 2012 15:35:30 +0000 (11:35 -0400)
committerNicholas Bellinger <nab@linux-iscsi.org>
Sun, 6 May 2012 22:02:59 +0000 (15:02 -0700)
Now that we don't split commands the lba field in the task is always
equivalent to the one in the CDB, even in cases where we have two tasks
due to a BIDI transfer.  Just refer the the lba in the command instead
of duplicating it in the task.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/target_core_file.c
drivers/target/target_core_iblock.c
drivers/target/target_core_rd.c
drivers/target/target_core_transport.c
include/target/target_core_base.h

index c3e899e551a50a109bd9b9058b8ec4a0300b5060..4343cfd681173fc43caff4e9cbe867657f9ad3bd 100644 (file)
@@ -273,7 +273,7 @@ static int fd_do_readv(struct se_task *task)
        struct scatterlist *sg = task->task_sg;
        struct iovec *iov;
        mm_segment_t old_fs;
-       loff_t pos = (task->task_lba *
+       loff_t pos = (task->task_se_cmd->t_task_lba *
                      se_dev->se_sub_dev->se_dev_attrib.block_size);
        int ret = 0, i;
 
@@ -326,7 +326,7 @@ static int fd_do_writev(struct se_task *task)
        struct scatterlist *sg = task->task_sg;
        struct iovec *iov;
        mm_segment_t old_fs;
-       loff_t pos = (task->task_lba *
+       loff_t pos = (task->task_se_cmd->t_task_lba *
                      se_dev->se_sub_dev->se_dev_attrib.block_size);
        int ret, i = 0;
 
@@ -402,12 +402,13 @@ static void fd_emulate_write_fua(struct se_cmd *cmd, struct se_task *task)
 {
        struct se_device *dev = cmd->se_dev;
        struct fd_dev *fd_dev = dev->dev_ptr;
-       loff_t start = task->task_lba * dev->se_sub_dev->se_dev_attrib.block_size;
+       loff_t start = task->task_se_cmd->t_task_lba *
+               dev->se_sub_dev->se_dev_attrib.block_size;
        loff_t end = start + task->task_size;
        int ret;
 
        pr_debug("FILEIO: FUA WRITE LBA: %llu, bytes: %u\n",
-                       task->task_lba, task->task_size);
+                       task->task_se_cmd->t_task_lba, task->task_size);
 
        ret = vfs_fsync_range(fd_dev->fd_file, start, end, 1);
        if (ret != 0)
index 2ec299e8a73ed5b1a0ba759cbf913840468cffa9..311f43b3cffa17da28d67a5ae43667cada8c9332 100644 (file)
@@ -536,13 +536,13 @@ static int iblock_do_task(struct se_task *task)
         * struct se_task SCSI blocksize into Linux/Block 512 units for BIO.
         */
        if (dev->se_sub_dev->se_dev_attrib.block_size == 4096)
-               block_lba = (task->task_lba << 3);
+               block_lba = (cmd->t_task_lba << 3);
        else if (dev->se_sub_dev->se_dev_attrib.block_size == 2048)
-               block_lba = (task->task_lba << 2);
+               block_lba = (cmd->t_task_lba << 2);
        else if (dev->se_sub_dev->se_dev_attrib.block_size == 1024)
-               block_lba = (task->task_lba << 1);
+               block_lba = (cmd->t_task_lba << 1);
        else if (dev->se_sub_dev->se_dev_attrib.block_size == 512)
-               block_lba = task->task_lba;
+               block_lba = cmd->t_task_lba;
        else {
                pr_err("Unsupported SCSI -> BLOCK LBA conversion:"
                                " %u\n", dev->se_sub_dev->se_dev_attrib.block_size);
@@ -646,7 +646,7 @@ static void iblock_bio_done(struct bio *bio, int err)
                return;
 
        pr_debug("done[%p] bio: %p task_lba: %llu bio_lba: %llu err=%d\n",
-                task, bio, task->task_lba,
+                task, bio, task->task_se_cmd->t_task_lba,
                 (unsigned long long)bio->bi_sector, err);
 
        transport_complete_task(task, !atomic_read(&ibr->ib_bio_err_cnt));
index 35c64d1e09d9c5cf58db0b4fb2a0225c5c9cf05a..0bec5729d073fca5142d37abe4bf3c8d04275f76 100644 (file)
@@ -303,7 +303,8 @@ static int rd_do_task(struct se_task *task)
        u32 src_len;
        u64 tmp;
 
-       tmp = task->task_lba * se_dev->se_sub_dev->se_dev_attrib.block_size;
+       tmp = task->task_se_cmd->t_task_lba *
+               se_dev->se_sub_dev->se_dev_attrib.block_size;
        rd_offset = do_div(tmp, PAGE_SIZE);
        rd_page = tmp;
        rd_size = task->task_size;
@@ -318,7 +319,8 @@ static int rd_do_task(struct se_task *task)
                        dev->rd_dev_id,
                        task->task_data_direction == DMA_FROM_DEVICE ?
                                "Read" : "Write",
-                       task->task_lba, rd_size, rd_page, rd_offset);
+                       task->task_se_cmd->t_task_lba,
+                       rd_size, rd_page, rd_offset);
 
        src_len = PAGE_SIZE - rd_offset;
        sg_miter_start(&m, task->task_sg, task->task_sg_nents,
index 2b84521fa0b41ae3a5d9aecd50e6dc7bcf919ef8..0fb3521d32d6c7f8e29cfa2cbf38570340d7af41 100644 (file)
@@ -3724,7 +3724,6 @@ transport_allocate_data_tasks(struct se_cmd *cmd,
        task->task_sg_nents = sgl_nents;
        task->task_size = cmd->data_length;
 
-       task->task_lba = cmd->t_task_lba;
        task->task_sectors = sectors;
 
        spin_lock_irqsave(&cmd->t_state_lock, flags);
index 8ec4e8232be4715199adfc21904bd87daaa62055..df5a4671c82d606e92826e73cb2eacde47eade26 100644 (file)
@@ -486,7 +486,6 @@ struct se_queue_obj {
 };
 
 struct se_task {
-       unsigned long long      task_lba;
        u32                     task_sectors;
        u32                     task_size;
        struct se_cmd           *task_se_cmd;