Loading drivers/ide/ide-tape.c +11 −18 Original line number Diff line number Diff line Loading @@ -1605,14 +1605,6 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive, } /* Pipeline related functions */ static inline int idetape_pipeline_active(idetape_tape_t *tape) { int rc1, rc2; rc1 = test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags); rc2 = (tape->active_data_rq != NULL); return rc1; } /* * The function below uses __get_free_page to allocate a pipeline stage, along Loading Loading @@ -2058,7 +2050,7 @@ static int __idetape_discard_read_pipeline(ide_drive_t *drive) spin_lock_irqsave(&tape->lock, flags); tape->next_stage = NULL; if (idetape_pipeline_active(tape)) if (test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) idetape_wait_for_request(drive, tape->active_data_rq); spin_unlock_irqrestore(&tape->lock, flags); Loading Loading @@ -2131,7 +2123,7 @@ static int idetape_queue_rw_tail(ide_drive_t *drive, int cmd, int blocks, debug_log(DBG_SENSE, "%s: cmd=%d\n", __func__, cmd); if (idetape_pipeline_active(tape)) { if (test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) { printk(KERN_ERR "ide-tape: bug: the pipeline is active in %s\n", __func__); return (0); Loading Loading @@ -2162,8 +2154,7 @@ static void idetape_plug_pipeline(ide_drive_t *drive) if (tape->next_stage == NULL) return; if (!idetape_pipeline_active(tape)) { set_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags); if (!test_and_set_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) { idetape_activate_next_stage(drive); (void) ide_do_drive_cmd(drive, tape->active_data_rq, ide_end); } Loading Loading @@ -2242,13 +2233,14 @@ static int idetape_add_chrdev_write_request(ide_drive_t *drive, int blocks) /* Attempt to allocate a new stage. Beware possible race conditions. */ while ((new_stage = idetape_kmalloc_stage(tape)) == NULL) { spin_lock_irqsave(&tape->lock, flags); if (idetape_pipeline_active(tape)) { if (test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) { idetape_wait_for_request(drive, tape->active_data_rq); spin_unlock_irqrestore(&tape->lock, flags); } else { spin_unlock_irqrestore(&tape->lock, flags); idetape_plug_pipeline(drive); if (idetape_pipeline_active(tape)) if (test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) continue; /* * The machine is short on memory. Fallback to non- Loading Loading @@ -2277,7 +2269,7 @@ static int idetape_add_chrdev_write_request(ide_drive_t *drive, int blocks) * starting to service requests, so that we will be able to keep up with * the higher speeds of the tape. */ if (!idetape_pipeline_active(tape)) { if (!test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) { if (tape->nr_stages >= tape->max_stages * 9 / 10 || tape->nr_stages >= tape->max_stages - tape->uncontrolled_pipeline_head_speed * 3 * 1024 / Loading @@ -2304,10 +2296,11 @@ static void idetape_wait_for_pipeline(ide_drive_t *drive) idetape_tape_t *tape = drive->driver_data; unsigned long flags; while (tape->next_stage || idetape_pipeline_active(tape)) { while (tape->next_stage || test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) { idetape_plug_pipeline(drive); spin_lock_irqsave(&tape->lock, flags); if (idetape_pipeline_active(tape)) if (test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) idetape_wait_for_request(drive, tape->active_data_rq); spin_unlock_irqrestore(&tape->lock, flags); } Loading Loading @@ -2464,7 +2457,7 @@ static int idetape_init_read(ide_drive_t *drive, int max_stages) new_stage = idetape_kmalloc_stage(tape); } } if (!idetape_pipeline_active(tape)) { if (!test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) { if (tape->nr_pending_stages >= 3 * max_stages / 4) { tape->measure_insert_time = 1; tape->insert_time = jiffies; Loading Loading
drivers/ide/ide-tape.c +11 −18 Original line number Diff line number Diff line Loading @@ -1605,14 +1605,6 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive, } /* Pipeline related functions */ static inline int idetape_pipeline_active(idetape_tape_t *tape) { int rc1, rc2; rc1 = test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags); rc2 = (tape->active_data_rq != NULL); return rc1; } /* * The function below uses __get_free_page to allocate a pipeline stage, along Loading Loading @@ -2058,7 +2050,7 @@ static int __idetape_discard_read_pipeline(ide_drive_t *drive) spin_lock_irqsave(&tape->lock, flags); tape->next_stage = NULL; if (idetape_pipeline_active(tape)) if (test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) idetape_wait_for_request(drive, tape->active_data_rq); spin_unlock_irqrestore(&tape->lock, flags); Loading Loading @@ -2131,7 +2123,7 @@ static int idetape_queue_rw_tail(ide_drive_t *drive, int cmd, int blocks, debug_log(DBG_SENSE, "%s: cmd=%d\n", __func__, cmd); if (idetape_pipeline_active(tape)) { if (test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) { printk(KERN_ERR "ide-tape: bug: the pipeline is active in %s\n", __func__); return (0); Loading Loading @@ -2162,8 +2154,7 @@ static void idetape_plug_pipeline(ide_drive_t *drive) if (tape->next_stage == NULL) return; if (!idetape_pipeline_active(tape)) { set_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags); if (!test_and_set_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) { idetape_activate_next_stage(drive); (void) ide_do_drive_cmd(drive, tape->active_data_rq, ide_end); } Loading Loading @@ -2242,13 +2233,14 @@ static int idetape_add_chrdev_write_request(ide_drive_t *drive, int blocks) /* Attempt to allocate a new stage. Beware possible race conditions. */ while ((new_stage = idetape_kmalloc_stage(tape)) == NULL) { spin_lock_irqsave(&tape->lock, flags); if (idetape_pipeline_active(tape)) { if (test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) { idetape_wait_for_request(drive, tape->active_data_rq); spin_unlock_irqrestore(&tape->lock, flags); } else { spin_unlock_irqrestore(&tape->lock, flags); idetape_plug_pipeline(drive); if (idetape_pipeline_active(tape)) if (test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) continue; /* * The machine is short on memory. Fallback to non- Loading Loading @@ -2277,7 +2269,7 @@ static int idetape_add_chrdev_write_request(ide_drive_t *drive, int blocks) * starting to service requests, so that we will be able to keep up with * the higher speeds of the tape. */ if (!idetape_pipeline_active(tape)) { if (!test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) { if (tape->nr_stages >= tape->max_stages * 9 / 10 || tape->nr_stages >= tape->max_stages - tape->uncontrolled_pipeline_head_speed * 3 * 1024 / Loading @@ -2304,10 +2296,11 @@ static void idetape_wait_for_pipeline(ide_drive_t *drive) idetape_tape_t *tape = drive->driver_data; unsigned long flags; while (tape->next_stage || idetape_pipeline_active(tape)) { while (tape->next_stage || test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) { idetape_plug_pipeline(drive); spin_lock_irqsave(&tape->lock, flags); if (idetape_pipeline_active(tape)) if (test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) idetape_wait_for_request(drive, tape->active_data_rq); spin_unlock_irqrestore(&tape->lock, flags); } Loading Loading @@ -2464,7 +2457,7 @@ static int idetape_init_read(ide_drive_t *drive, int max_stages) new_stage = idetape_kmalloc_stage(tape); } } if (!idetape_pipeline_active(tape)) { if (!test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags)) { if (tape->nr_pending_stages >= 3 * max_stages / 4) { tape->measure_insert_time = 1; tape->insert_time = jiffies; Loading