ide-tape: remove pipeline-specific code in idetape_space_over_filemarks()

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>
This commit is contained in:
Borislav Petkov 2008-04-27 15:38:26 +02:00 committed by Bartlomiej Zolnierkiewicz
parent 8646c88f15
commit 7f5e72f471

View 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);
}