Skip to content

Commit

Permalink
libata: kill qc->nsect and cursect
Browse files Browse the repository at this point in the history
libata used two separate sets of variables to record request size and
current offset for ATA and ATAPI.  This is confusing and fragile.
This patch replaces qc->nsect/cursect with qc->nbytes/curbytes and
kills them.  Also, ata_pio_sector() is updated to use bytes for
qc->cursg_ofs instead of sectors.  The field used to be used in bytes
for ATAPI and in sectors for ATA.

Signed-off-by: Tejun Heo <[email protected]>
Signed-off-by: Jeff Garzik <[email protected]>
  • Loading branch information
htejun authored and Jeff Garzik committed Feb 9, 2007
1 parent 1645444 commit 726f078
Show file tree
Hide file tree
Showing 6 changed files with 13 additions and 25 deletions.
14 changes: 7 additions & 7 deletions drivers/ata/libata-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1249,7 +1249,6 @@ unsigned ata_exec_internal_sg(struct ata_device *dev,
buflen += sg[i].length;

ata_sg_init(qc, sg, n_elem);
qc->nsect = buflen / ATA_SECT_SIZE;
qc->nbytes = buflen;
}

Expand Down Expand Up @@ -4006,11 +4005,11 @@ static void ata_pio_sector(struct ata_queued_cmd *qc)
unsigned int offset;
unsigned char *buf;

if (qc->cursect == (qc->nsect - 1))
if (qc->curbytes == qc->nbytes - ATA_SECT_SIZE)
ap->hsm_task_state = HSM_ST_LAST;

page = sg[qc->cursg].page;
offset = sg[qc->cursg].offset + qc->cursg_ofs * ATA_SECT_SIZE;
offset = sg[qc->cursg].offset + qc->cursg_ofs;

/* get the current page and offset */
page = nth_page(page, (offset >> PAGE_SHIFT));
Expand All @@ -4035,10 +4034,10 @@ static void ata_pio_sector(struct ata_queued_cmd *qc)
ap->ops->data_xfer(qc->dev, buf + offset, ATA_SECT_SIZE, do_write);
}

qc->cursect++;
qc->cursg_ofs++;
qc->curbytes += ATA_SECT_SIZE;
qc->cursg_ofs += ATA_SECT_SIZE;

if ((qc->cursg_ofs * ATA_SECT_SIZE) == (&sg[qc->cursg])->length) {
if (qc->cursg_ofs == (&sg[qc->cursg])->length) {
qc->cursg++;
qc->cursg_ofs = 0;
}
Expand All @@ -4063,7 +4062,8 @@ static void ata_pio_sectors(struct ata_queued_cmd *qc)

WARN_ON(qc->dev->multi_count == 0);

nsect = min(qc->nsect - qc->cursect, qc->dev->multi_count);
nsect = min((qc->nbytes - qc->curbytes) / ATA_SECT_SIZE,
qc->dev->multi_count);
while (nsect--)
ata_pio_sector(qc);
} else
Expand Down
7 changes: 1 addition & 6 deletions drivers/ata/libata-eh.c
Original file line number Diff line number Diff line change
Expand Up @@ -1443,15 +1443,10 @@ static void ata_eh_report(struct ata_port *ap)
};
struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
struct ata_taskfile *cmd = &qc->tf, *res = &qc->result_tf;
unsigned int nbytes;

if (!(qc->flags & ATA_QCFLAG_FAILED) || !qc->err_mask)
continue;

nbytes = qc->nbytes;
if (!nbytes)
nbytes = qc->nsect << 9;

ata_dev_printk(qc->dev, KERN_ERR,
"cmd %02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x "
"tag %d cdb 0x%x data %u %s\n "
Expand All @@ -1461,7 +1456,7 @@ static void ata_eh_report(struct ata_port *ap)
cmd->lbal, cmd->lbam, cmd->lbah,
cmd->hob_feature, cmd->hob_nsect,
cmd->hob_lbal, cmd->hob_lbam, cmd->hob_lbah,
cmd->device, qc->tag, qc->cdb[0], nbytes,
cmd->device, qc->tag, qc->cdb[0], qc->nbytes,
dma_str[qc->dma_dir],
res->command, res->feature, res->nsect,
res->lbal, res->lbam, res->lbah,
Expand Down
4 changes: 2 additions & 2 deletions drivers/ata/libata-scsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1359,7 +1359,7 @@ static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc)
goto nothing_to_do;

qc->flags |= ATA_QCFLAG_IO;
qc->nsect = n_block;
qc->nbytes = n_block * ATA_SECT_SIZE;

rc = ata_build_rw_tf(&qc->tf, qc->dev, block, n_block, tf_flags,
qc->tag);
Expand Down Expand Up @@ -2660,7 +2660,7 @@ static unsigned int ata_scsi_pass_thru(struct ata_queued_cmd *qc)
* TODO: find out if we need to do more here to
* cover scatter/gather case.
*/
qc->nsect = scmd->request_bufflen / ATA_SECT_SIZE;
qc->nbytes = scmd->request_bufflen;

/* request result TF */
qc->flags |= ATA_QCFLAG_RESULT_TF;
Expand Down
5 changes: 1 addition & 4 deletions drivers/ata/pata_pdc202xx_old.c
Original file line number Diff line number Diff line change
Expand Up @@ -189,10 +189,7 @@ static void pdc2026x_bmdma_start(struct ata_queued_cmd *qc)
/* Cases the state machine will not complete correctly without help */
if ((tf->flags & ATA_TFLAG_LBA48) || tf->protocol == ATA_PROT_ATAPI_DMA)
{
if (tf->flags & ATA_TFLAG_LBA48)
len = qc->nsect * 512;
else
len = qc->nbytes;
len = qc->nbytes;

if (tf->flags & ATA_TFLAG_WRITE)
len |= 0x06000000;
Expand Down
2 changes: 1 addition & 1 deletion drivers/ata/sata_qstor.c
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ static void qs_qc_prep(struct ata_queued_cmd *qc)
/* host control block (HCB) */
buf[ 0] = QS_HCB_HDR;
buf[ 1] = hflags;
*(__le32 *)(&buf[ 4]) = cpu_to_le32(qc->nsect * ATA_SECT_SIZE);
*(__le32 *)(&buf[ 4]) = cpu_to_le32(qc->nbytes);
*(__le32 *)(&buf[ 8]) = cpu_to_le32(nelem);
addr = ((u64)pp->pkt_dma) + QS_CPB_BYTES;
*(__le64 *)(&buf[16]) = cpu_to_le64(addr);
Expand Down
6 changes: 1 addition & 5 deletions include/linux/libata.h
Original file line number Diff line number Diff line change
Expand Up @@ -427,9 +427,6 @@ struct ata_queued_cmd {

unsigned int pad_len;

unsigned int nsect;
unsigned int cursect;

unsigned int nbytes;
unsigned int curbytes;

Expand Down Expand Up @@ -1145,8 +1142,7 @@ static inline void ata_qc_reinit(struct ata_queued_cmd *qc)
qc->dma_dir = DMA_NONE;
qc->__sg = NULL;
qc->flags = 0;
qc->cursect = qc->cursg = qc->cursg_ofs = 0;
qc->nsect = 0;
qc->cursg = qc->cursg_ofs = 0;
qc->nbytes = qc->curbytes = 0;
qc->n_elem = 0;
qc->err_mask = 0;
Expand Down

0 comments on commit 726f078

Please sign in to comment.