Skip to content

Commit

Permalink
target: remove the task_lba field in struct se_task
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Christoph Hellwig authored and Nicholas Bellinger committed May 6, 2012
1 parent ed3102c commit 72a0e5e
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 13 deletions.
9 changes: 5 additions & 4 deletions drivers/target/target_core_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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)
Expand Down
10 changes: 5 additions & 5 deletions drivers/target/target_core_iblock.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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));
Expand Down
6 changes: 4 additions & 2 deletions drivers/target/target_core_rd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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,
Expand Down
1 change: 0 additions & 1 deletion drivers/target/target_core_transport.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
1 change: 0 additions & 1 deletion include/target/target_core_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 72a0e5e

Please sign in to comment.