ide-cd: prepare cdrom_rw_intr() and cdrom_newpc_intr() to be merged

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: <git-commits-head@...>
Date: Friday, February 1, 2008 - 7:59 pm

Gitweb:     http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a11e77...
Commit:     a11e77db4982d44bf610dc7257b0fca3f7202403
Parent:     37782fcefcca437f870e581e6cc316111f8b7660
Author:     Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
AuthorDate: Fri Feb 1 23:09:27 2008 +0100
Committer:  Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
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 <bzolnier@gmail.com>
---
 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 majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
ide-cd: prepare cdrom_rw_intr() and cdrom_newpc_intr() to be..., Linux Kernel Mailing List..., (Fri Feb 1, 7:59 pm)