
From: Bartlomiej Zolnierkiewicz <B.Zolnierkiewicz@elka.pw.edu.pl>

Make sure that number of sectors != 0 for in/out command before sending it to
drive.  Remove no longer needed checks from flagged_* PIO handlers.

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@elka.pw.edu.pl>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/ide/ide-taskfile.c |   21 ++++++---------------
 1 files changed, 6 insertions(+), 15 deletions(-)

diff -puN drivers/ide/ide-taskfile.c~ide-check-no-of-sectors-for-in-out-commands-in-ide_diag_taskfile drivers/ide/ide-taskfile.c
--- 25/drivers/ide/ide-taskfile.c~ide-check-no-of-sectors-for-in-out-commands-in-ide_diag_taskfile	Fri Jun 11 15:58:53 2004
+++ 25-akpm/drivers/ide/ide-taskfile.c	Fri Jun 11 15:58:53 2004
@@ -846,6 +846,12 @@ int ide_diag_taskfile (ide_drive_t *driv
 		else
 			rq.nr_sectors = data_size / SECTOR_SIZE;
 
+		if (!rq.nr_sectors) {
+			printk(KERN_ERR "%s: in/out command without data\n",
+					drive->name);
+			return -EFAULT;
+		}
+
 		rq.hard_nr_sectors = rq.nr_sectors;
 		rq.hard_cur_sectors = rq.current_nr_sectors = rq.nr_sectors;
 	}
@@ -1330,9 +1336,6 @@ ide_startstop_t flagged_task_in_intr (id
 	char *pBuf		= NULL;
 	int retries             = 5;
 
-	if (rq->current_nr_sectors == 0) 
-		return DRIVER(drive)->error(drive, "flagged_task_in_intr (no data requested)", stat); 
-
 	if (!OK_STAT(stat, DATA_READY, BAD_R_STAT)) {
 		if (stat & ERR_STAT) {
 			return DRIVER(drive)->error(drive, "flagged_task_in_intr", stat);
@@ -1379,9 +1382,6 @@ ide_startstop_t flagged_task_mulin_intr 
 	int retries             = 5;
 	unsigned int msect, nsect;
 
-	if (rq->current_nr_sectors == 0) 
-		return DRIVER(drive)->error(drive, "flagged_task_mulin_intr (no data requested)", stat); 
-
 	msect = drive->mult_count;
 	if (msect == 0) 
 		return DRIVER(drive)->error(drive, "flagged_task_mulin_intr (multimode not set)", stat); 
@@ -1433,14 +1433,8 @@ ide_startstop_t flagged_task_mulin_intr 
  */
 ide_startstop_t flagged_pre_task_out_intr (ide_drive_t *drive, struct request *rq)
 {
-	ide_hwif_t *hwif	= HWIF(drive);
-	u8 stat			= hwif->INB(IDE_STATUS_REG);
 	ide_startstop_t startstop;
 
-	if (!rq->current_nr_sectors) {
-		return DRIVER(drive)->error(drive, "flagged_pre_task_out_intr (write data not specified)", stat);
-	}
-
 	if (ide_wait_stat(&startstop, drive, DATA_READY,
 			BAD_W_STAT, WAIT_DRQ)) {
 		printk(KERN_ERR "%s: No DRQ bit after issuing write command.\n", drive->name);
@@ -1502,9 +1496,6 @@ ide_startstop_t flagged_pre_task_mulout_
 	ide_startstop_t startstop;
 	unsigned int msect, nsect;
 
-	if (!rq->current_nr_sectors) 
-		return DRIVER(drive)->error(drive, "flagged_pre_task_mulout_intr (write data not specified)", stat);
-
 	msect = drive->mult_count;
 	if (msect == 0)
 		return DRIVER(drive)->error(drive, "flagged_pre_task_mulout_intr (multimode not set)", stat);
_
