From ec769e8e5e95c6bc0db5e6301085a18a69ad2fdd Mon Sep 17 00:00:00 2001 From: Albert Lee Date: Thu, 18 May 2006 17:51:10 +0800 Subject: [PATCH] --- yaml --- r: 29449 b: refs/heads/master c: eec4c3f317991dc85c786ffccd9c1a8620c41b18 h: refs/heads/master i: 29447: d7ade3357164bef97012d8f1e29c36b61fb690c6 v: v3 --- [refs] | 2 +- trunk/drivers/scsi/libata-core.c | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 0ef78567ae77..ea72a1c2875a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3655d1d323386e001c786af10f0a3f39f438f03b +refs/heads/master: eec4c3f317991dc85c786ffccd9c1a8620c41b18 diff --git a/trunk/drivers/scsi/libata-core.c b/trunk/drivers/scsi/libata-core.c index aa38ed3e59a8..bf00d2b2e404 100644 --- a/trunk/drivers/scsi/libata-core.c +++ b/trunk/drivers/scsi/libata-core.c @@ -3865,10 +3865,16 @@ static void atapi_pio_bytes(struct ata_queued_cmd *qc) unsigned int ireason, bc_lo, bc_hi, bytes; int i_write, do_write = (qc->tf.flags & ATA_TFLAG_WRITE) ? 1 : 0; - ap->ops->tf_read(ap, &qc->tf); - ireason = qc->tf.nsect; - bc_lo = qc->tf.lbam; - bc_hi = qc->tf.lbah; + /* Abuse qc->result_tf for temp storage of intermediate TF + * here to save some kernel stack usage. + * For normal completion, qc->result_tf is not relevant. For + * error, qc->result_tf is later overwritten by ata_qc_complete(). + * So, the correctness of qc->result_tf is not affected. + */ + ap->ops->tf_read(ap, &qc->result_tf); + ireason = qc->result_tf.nsect; + bc_lo = qc->result_tf.lbam; + bc_hi = qc->result_tf.lbah; bytes = (bc_hi << 8) | bc_lo; /* shall be cleared to zero, indicating xfer of data */