Commit bdf8710d authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

block: move dma_pad handling from blk_rq_map_sg into the callers

There are only two callers of blk_rq_map_sg/__blk_rq_map_sg that set
the dma_pad value in the queue.  Move the handling into those callers
instead of burdening the common code, and move the ->extra_len field
from struct request to struct scsi_cmnd.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent cc97923a
...@@ -1638,7 +1638,6 @@ int blk_rq_prep_clone(struct request *rq, struct request *rq_src, ...@@ -1638,7 +1638,6 @@ int blk_rq_prep_clone(struct request *rq, struct request *rq_src,
} }
rq->nr_phys_segments = rq_src->nr_phys_segments; rq->nr_phys_segments = rq_src->nr_phys_segments;
rq->ioprio = rq_src->ioprio; rq->ioprio = rq_src->ioprio;
rq->extra_len = rq_src->extra_len;
return 0; return 0;
......
...@@ -531,14 +531,6 @@ int __blk_rq_map_sg(struct request_queue *q, struct request *rq, ...@@ -531,14 +531,6 @@ int __blk_rq_map_sg(struct request_queue *q, struct request *rq,
else if (rq->bio) else if (rq->bio)
nsegs = __blk_bios_map_sg(q, rq->bio, sglist, last_sg); nsegs = __blk_bios_map_sg(q, rq->bio, sglist, last_sg);
if (blk_rq_bytes(rq) && (blk_rq_bytes(rq) & q->dma_pad_mask)) {
unsigned int pad_len =
(q->dma_pad_mask & ~blk_rq_bytes(rq)) + 1;
(*last_sg)->length += pad_len;
rq->extra_len += pad_len;
}
if (*last_sg) if (*last_sg)
sg_mark_end(*last_sg); sg_mark_end(*last_sg);
......
...@@ -318,7 +318,6 @@ static struct request *blk_mq_rq_ctx_init(struct blk_mq_alloc_data *data, ...@@ -318,7 +318,6 @@ static struct request *blk_mq_rq_ctx_init(struct blk_mq_alloc_data *data,
rq->nr_integrity_segments = 0; rq->nr_integrity_segments = 0;
#endif #endif
/* tag was already set */ /* tag was already set */
rq->extra_len = 0;
WRITE_ONCE(rq->deadline, 0); WRITE_ONCE(rq->deadline, 0);
rq->timeout = 0; rq->timeout = 0;
......
...@@ -649,7 +649,7 @@ static void ata_qc_set_pc_nbytes(struct ata_queued_cmd *qc) ...@@ -649,7 +649,7 @@ static void ata_qc_set_pc_nbytes(struct ata_queued_cmd *qc)
{ {
struct scsi_cmnd *scmd = qc->scsicmd; struct scsi_cmnd *scmd = qc->scsicmd;
qc->extrabytes = scmd->request->extra_len; qc->extrabytes = scmd->extra_len;
qc->nbytes = scsi_bufflen(scmd) + qc->extrabytes; qc->nbytes = scsi_bufflen(scmd) + qc->extrabytes;
} }
......
...@@ -233,10 +233,13 @@ static ide_startstop_t do_special(ide_drive_t *drive) ...@@ -233,10 +233,13 @@ static ide_startstop_t do_special(ide_drive_t *drive)
void ide_map_sg(ide_drive_t *drive, struct ide_cmd *cmd) void ide_map_sg(ide_drive_t *drive, struct ide_cmd *cmd)
{ {
ide_hwif_t *hwif = drive->hwif; ide_hwif_t *hwif = drive->hwif;
struct scatterlist *sg = hwif->sg_table; struct scatterlist *sg = hwif->sg_table, *last_sg = NULL;
struct request *rq = cmd->rq; struct request *rq = cmd->rq;
cmd->sg_nents = blk_rq_map_sg(drive->queue, rq, sg); cmd->sg_nents = __blk_rq_map_sg(drive->queue, rq, sg, &last_sg);
if (blk_rq_bytes(rq) && (blk_rq_bytes(rq) & rq->q->dma_pad_mask))
last_sg->length +=
(rq->q->dma_pad_mask & ~blk_rq_bytes(rq)) + 1;
} }
EXPORT_SYMBOL_GPL(ide_map_sg); EXPORT_SYMBOL_GPL(ide_map_sg);
......
...@@ -1030,13 +1030,21 @@ blk_status_t scsi_init_io(struct scsi_cmnd *cmd) ...@@ -1030,13 +1030,21 @@ blk_status_t scsi_init_io(struct scsi_cmnd *cmd)
*/ */
count = __blk_rq_map_sg(rq->q, rq, cmd->sdb.table.sgl, &last_sg); count = __blk_rq_map_sg(rq->q, rq, cmd->sdb.table.sgl, &last_sg);
if (blk_rq_bytes(rq) & rq->q->dma_pad_mask) {
unsigned int pad_len =
(rq->q->dma_pad_mask & ~blk_rq_bytes(rq)) + 1;
last_sg->length += pad_len;
cmd->extra_len += pad_len;
}
if (need_drain) { if (need_drain) {
sg_unmark_end(last_sg); sg_unmark_end(last_sg);
last_sg = sg_next(last_sg); last_sg = sg_next(last_sg);
sg_set_buf(last_sg, sdev->dma_drain_buf, sdev->dma_drain_len); sg_set_buf(last_sg, sdev->dma_drain_buf, sdev->dma_drain_len);
sg_mark_end(last_sg); sg_mark_end(last_sg);
rq->extra_len += sdev->dma_drain_len; cmd->extra_len += sdev->dma_drain_len;
count++; count++;
} }
......
...@@ -224,8 +224,6 @@ struct request { ...@@ -224,8 +224,6 @@ struct request {
unsigned short write_hint; unsigned short write_hint;
unsigned short ioprio; unsigned short ioprio;
unsigned int extra_len; /* length of alignment and padding */
enum mq_rq_state state; enum mq_rq_state state;
refcount_t ref; refcount_t ref;
......
...@@ -142,6 +142,7 @@ struct scsi_cmnd { ...@@ -142,6 +142,7 @@ struct scsi_cmnd {
unsigned long state; /* Command completion state */ unsigned long state; /* Command completion state */
unsigned char tag; /* SCSI-II queued command tag */ unsigned char tag; /* SCSI-II queued command tag */
unsigned int extra_len; /* length of alignment and padding */
}; };
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment