ide-cd: prepare cdrom_rw_intr() and cdrom_newpc_intr() to be merged
PATCH 58/63 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]>
---
+54 bytes
drivers/ide/ide-cd.c | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-)
drivers/ide/ide-cd.c +25 -20
@@ -1115,8 +1115,8 @@ static ide_startstop_t cdrom_newpc_intr(* 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?
@@ -1192,7 +1192,7 @@ static ide_startstop_t cdrom_rw_intr(idestruct 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 ;
@@ -1247,7 +1247,7 @@ static ide_startstop_t cdrom_rw_intr(idereturn 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) {
@@ -1270,12 +1270,12 @@ static ide_startstop_t cdrom_rw_intr(ide*/ 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;
@@ -1284,17 +1284,23 @@ static ide_startstop_t cdrom_rw_intr(ide/* * 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",
@@ -1305,17 +1311,16 @@ static ide_startstop_t cdrom_rw_intr(ide/* * Figure out how many sectors we can transfer */ - this_transfer =min_t (int, sectors_to_transfer, rq->current_nr_sectors); +if (blen > thislen) + blen = thislen; -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; - } +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