Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a11e77db4982d44bf610dc7257b0fca3f7202403
Commit:     a11e77db4982d44bf610dc7257b0fca3f7202403
Parent:     37782fcefcca437f870e581e6cc316111f8b7660
Author:     Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
AuthorDate: Fri Feb 1 23:09:27 2008 +0100
Committer:  Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
CommitDate: Fri Feb 1 23:09:27 2008 +0100

    ide-cd: prepare cdrom_rw_intr() and cdrom_newpc_intr() to be merged
    
    In cdrom_newpc_intr():
    * cleanup variables in the 'transfer data' loop
    
    In cdrom_rw_intr():
    * rename 'sectors_to_transfer' to 'thislen'
    * rename 'this_transfer' to 'blen'
    * keep number of bytes (instead of sectors) in 'thislen' and 'blen'
    * call 'xferfunc' only once for 'blen'
    * cache 'rq->buffer' in 'ptr' variable
    * check for 'rq->bio' before setting 'ptr' and 'blen'
    * check for 'ptr' instead of 'rq->current_nr_sectors'
    
    There should be no functionality changes caused by this patch.
    
    Signed-off-by: Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
---
 drivers/ide/ide-cd.c |   47 ++++++++++++++++++++++++++---------------------
 1 files changed, 26 insertions(+), 21 deletions(-)

diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
index 0f17117..2a520bd 100644
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -1123,8 +1123,8 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t 
*drive)
         * transfer data
         */
        while (thislen > 0) {
-               int blen = blen = rq->data_len;
-               char *ptr = rq->data;
+               u8 *ptr = rq->data;
+               int blen = rq->data_len;
 
                /*
                 * bio backed?
@@ -1207,7 +1207,7 @@ static ide_startstop_t cdrom_rw_intr(ide_drive_t *drive)
        struct cdrom_info *info = drive->driver_data;
        struct request *rq = HWGROUP(drive)->rq;
        xfer_func_t *xferfunc;
-       int stat, ireason, len, sectors_to_transfer, uptodate, nskip;
+       int stat, ireason, len, thislen, uptodate, nskip;
        int dma_error = 0, dma = info->dma, write = rq_data_dir(rq) == WRITE;
        u8 lowcyl = 0, highcyl = 0;
 
@@ -1262,7 +1262,7 @@ static ide_startstop_t cdrom_rw_intr(ide_drive_t *drive)
                return ide_stopped;
        }
 
-       sectors_to_transfer = len / SECTOR_SIZE;
+       thislen = len;
 
        /* Check that the drive is expecting to do the same thing we are. */
        if (write) {
@@ -1285,12 +1285,12 @@ static ide_startstop_t cdrom_rw_intr(ide_drive_t *drive)
                 */
                nskip = min_t(int, rq->current_nr_sectors
                                   - bio_cur_sectors(rq->bio),
-                                  sectors_to_transfer);
+                                  thislen >> 9);
 
                if (nskip > 0) {
                        ide_cd_drain_data(drive, nskip);
                        rq->current_nr_sectors -= nskip;
-                       sectors_to_transfer -= nskip;
+                       thislen -= (nskip << 9);
                }
 
                xferfunc = HWIF(drive)->atapi_input_bytes;
@@ -1299,17 +1299,23 @@ static ide_startstop_t cdrom_rw_intr(ide_drive_t *drive)
        /*
         * now loop and read/write the data
         */
-       while (sectors_to_transfer > 0) {
-               int this_transfer;
+       while (thislen > 0) {
+               u8 *ptr = NULL;
+               int blen;
+
+               if (rq->bio) {
+                       ptr = rq->buffer;
+                       blen = rq->current_nr_sectors << 9;
+               }
 
-               if (!rq->current_nr_sectors) {
+               if (!ptr) {
                        if (!write)
                                /*
                                 * If the buffers are full, cache the rest
                                 * of the data in our internal buffer.
                                 */
                                cdrom_buffer_sectors(drive, rq->sector,
-                                                    sectors_to_transfer);
+                                                    thislen >> 9);
                        else
                                printk(KERN_ERR "%s: %s: confused, missing "
                                                "data\n",
@@ -1320,17 +1326,16 @@ static ide_startstop_t cdrom_rw_intr(ide_drive_t *drive)
                /*
                 * Figure out how many sectors we can transfer
                 */
-               this_transfer = min_t(int, sectors_to_transfer, 
rq->current_nr_sectors);
-
-               while (this_transfer > 0) {
-                       xferfunc(drive, rq->buffer, SECTOR_SIZE);
-                       rq->buffer += SECTOR_SIZE;
-                       --rq->nr_sectors;
-                       --rq->current_nr_sectors;
-                       ++rq->sector;
-                       --this_transfer;
-                       --sectors_to_transfer;
-               }
+               if (blen > thislen)
+                       blen = thislen;
+
+               xferfunc(drive, ptr, blen);
+
+               thislen -= blen;
+               rq->buffer += blen;
+               rq->nr_sectors -= (blen >> 9);
+               rq->current_nr_sectors -= (blen >> 9);
+               rq->sector += (blen >> 9);
 
                /*
                 * current buffer complete, move on
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to