]> err.no Git - linux-2.6/commitdiff
ide-tape: remove pipeline-specific code in idetape_space_over_filemarks()
authorBorislav Petkov <petkovbb@googlemail.com>
Sun, 27 Apr 2008 13:38:26 +0000 (15:38 +0200)
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Sun, 27 Apr 2008 13:38:26 +0000 (15:38 +0200)
Since we don't do pipeline read-ahead anymore, we don't have to look for
filemarks we have crossed. Therefore, remove the code chunk that does that and
pass on the command to the tape. As a side effect, remove unused
idetape_wait_first_stage().

Signed-off-by: Borislav Petkov <petkovbb@gmail.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
drivers/ide/ide-tape.c

index de70cb7789f25f4f4a7713685dbe3f77ed79e486..745e2fa549b9bff2d501f10dab2b52db57c453b2 100644 (file)
@@ -2051,19 +2051,6 @@ static void idetape_create_space_cmd(struct ide_atapi_pc *pc, int count, u8 cmd)
        pc->idetape_callback = &idetape_pc_callback;
 }
 
-static void idetape_wait_first_stage(ide_drive_t *drive)
-{
-       idetape_tape_t *tape = drive->driver_data;
-       unsigned long flags;
-
-       if (tape->first_stage == NULL)
-               return;
-       spin_lock_irqsave(&tape->lock, flags);
-       if (tape->active_stage == tape->first_stage)
-               idetape_wait_for_request(drive, tape->active_data_rq);
-       spin_unlock_irqrestore(&tape->lock, flags);
-}
-
 /* Queue up a character device originated write request. */
 static int idetape_add_chrdev_write_request(ide_drive_t *drive, int blocks)
 {
@@ -2363,19 +2350,11 @@ static int idetape_blkdev_ioctl(ide_drive_t *drive, unsigned int cmd,
        return 0;
 }
 
-/*
- * The function below is now a bit more complicated than just passing the
- * command to the tape since we may have crossed some filemarks during our
- * pipelined read-ahead mode. As a minor side effect, the pipeline enables us to
- * support MTFSFM when the filemark is in our internal pipeline even if the tape
- * doesn't support spacing over filemarks in the reverse direction.
- */
 static int idetape_space_over_filemarks(ide_drive_t *drive, short mt_op,
                                        int mt_count)
 {
        idetape_tape_t *tape = drive->driver_data;
        struct ide_atapi_pc pc;
-       unsigned long flags;
        int retval, count = 0;
        int sprev = !!(tape->caps[4] & 0x20);
 
@@ -2388,41 +2367,9 @@ static int idetape_space_over_filemarks(ide_drive_t *drive, short mt_op,
        }
 
        if (tape->chrdev_dir == IDETAPE_DIR_READ) {
-               /* its a read-ahead buffer, scan it for crossed filemarks. */
                tape->merge_stage_size = 0;
                if (test_and_clear_bit(IDETAPE_FLAG_FILEMARK, &tape->flags))
                        ++count;
-               while (tape->first_stage != NULL) {
-                       if (count == mt_count) {
-                               if (mt_op == MTFSFM)
-                                       set_bit(IDETAPE_FLAG_FILEMARK,
-                                               &tape->flags);
-                               return 0;
-                       }
-                       spin_lock_irqsave(&tape->lock, flags);
-                       if (tape->first_stage == tape->active_stage) {
-                               /*
-                                * We have reached the active stage in the read
-                                * pipeline. There is no point in allowing the
-                                * drive to continue reading any farther, so we
-                                * stop the pipeline.
-                                *
-                                * This section should be moved to a separate
-                                * subroutine because similar operations are
-                                * done in __idetape_discard_read_pipeline(),
-                                * for example.
-                                */
-                               tape->next_stage = NULL;
-                               spin_unlock_irqrestore(&tape->lock, flags);
-                               idetape_wait_first_stage(drive);
-                               tape->next_stage = tape->first_stage->next;
-                       } else
-                               spin_unlock_irqrestore(&tape->lock, flags);
-                       if (tape->first_stage->rq.errors ==
-                                       IDETAPE_ERROR_FILEMARK)
-                               ++count;
-                       idetape_remove_stage_head(drive);
-               }
                idetape_discard_read_pipeline(drive, 0);
        }