ide-cd: add ide_cd_drain_data() helper
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Fri, 1 Feb 2008 22:09:26 +0000 (23:09 +0100)
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Fri, 1 Feb 2008 22:09:26 +0000 (23:09 +0100)
Add ide_cd_drain_data() and use it in cdrom_{buffer_sectors,read_intr}()
(as a nice side-effect this cuts 0.5kB of code from ide-cd.o).

There should be no functionality changes caused by this patch.

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
drivers/ide/ide-cd.c

index 6c31ce1..f0191f0 100644 (file)
@@ -626,6 +626,16 @@ static void ide_cd_pad_transfer(ide_drive_t *drive, xfer_func_t *xf, int len)
        }
 }
 
+static void ide_cd_drain_data(ide_drive_t *drive, int nsects)
+{
+       while (nsects > 0) {
+               static char dum[SECTOR_SIZE];
+
+               drive->hwif->atapi_input_bytes(drive, dum, sizeof(dum));
+               nsects--;
+       }
+}
+
 /*
  * Buffer up to SECTORS_TO_TRANSFER sectors from the drive in our sector
  * buffer.  Once the first sector is added, any subsequent sectors are
@@ -664,11 +674,7 @@ static void cdrom_buffer_sectors (ide_drive_t *drive, unsigned long sector,
        }
 
        /* Throw away any remaining data. */
-       while (sectors_to_transfer > 0) {
-               static char dum[SECTOR_SIZE];
-               HWIF(drive)->atapi_input_bytes(drive, dum, sizeof (dum));
-               --sectors_to_transfer;
-       }
+       ide_cd_drain_data(drive, sectors_to_transfer);
 }
 
 /*
@@ -791,14 +797,10 @@ static ide_startstop_t cdrom_read_intr (ide_drive_t *drive)
           any of the leading sectors. */
        nskip = min_t(int, rq->current_nr_sectors - bio_cur_sectors(rq->bio), sectors_to_transfer);
 
-       while (nskip > 0) {
-               /* We need to throw away a sector. */
-               static char dum[SECTOR_SIZE];
-               HWIF(drive)->atapi_input_bytes(drive, dum, sizeof (dum));
-
-               --rq->current_nr_sectors;
-               --nskip;
-               --sectors_to_transfer;
+       if (nskip > 0) {
+               ide_cd_drain_data(drive, nskip);
+               rq->current_nr_sectors -= nskip;
+               sectors_to_transfer -= nskip;
        }
 
        /* Now loop while we still have data to read from the drive. */