Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 93728
b: refs/heads/master
c: 7f5e72f
h: refs/heads/master
v: v3
  • Loading branch information
Borislav Petkov authored and Bartlomiej Zolnierkiewicz committed Apr 27, 2008
1 parent cdad212 commit 8b3ba85
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 54 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8646c88f1572512761b33d01467e8643586972ce
refs/heads/master: 7f5e72f471763fe2a6e72863a64a2ef459f37835
53 changes: 0 additions & 53 deletions trunk/drivers/ide/ide-tape.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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);

Expand All @@ -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);
}

Expand Down

0 comments on commit 8b3ba85

Please sign in to comment.