lkml.org 
[lkml]   [2008]   [Mar]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: [PATCH 04/17] ide-tape: remove idetape_empty_write_pipeline()
Date
On Monday 17 March 2008, Borislav Petkov wrote:
> In order _not_ to skip over some pipeline stages left, we carefully flush any
> remaining ones. Nevertheless, this is only a temporary measure (git-bisect)
> before removing pipeline functionality completely.
>
> Signed-off-by: Borislav Petkov <petkovbb@gmail.com>
> ---
> drivers/ide/ide-tape.c | 80 ++----------------------------------------------
> 1 files changed, 3 insertions(+), 77 deletions(-)
>
> diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c
> index 429fed4..d4a94d5 100644
> --- a/drivers/ide/ide-tape.c
> +++ b/drivers/ide/ide-tape.c
> @@ -2041,80 +2041,6 @@ static void idetape_wait_for_pipeline(ide_drive_t *drive)
> }
> }
>
> -static void idetape_empty_write_pipeline(ide_drive_t *drive)
> -{
> - idetape_tape_t *tape = drive->driver_data;
> - int blocks, min;
> - struct idetape_bh *bh;
> -
> - if (tape->chrdev_dir != IDETAPE_DIR_WRITE) {
> - printk(KERN_ERR "ide-tape: bug: Trying to empty write pipeline,"
> - " but we are not writing.\n");
> - return;
> - }
> - if (tape->merge_stage_size > tape->stage_size) {
> - printk(KERN_ERR "ide-tape: bug: merge_buffer too big\n");
> - tape->merge_stage_size = tape->stage_size;
> - }
> - if (tape->merge_stage_size) {
> - blocks = tape->merge_stage_size / tape->blk_size;
> - if (tape->merge_stage_size % tape->blk_size) {
> - unsigned int i;
> -
> - blocks++;
> - i = tape->blk_size - tape->merge_stage_size %
> - tape->blk_size;
> - bh = tape->bh->b_reqnext;
> - while (bh) {
> - atomic_set(&bh->b_count, 0);
> - bh = bh->b_reqnext;
> - }
> - bh = tape->bh;
> - while (i) {
> - if (bh == NULL) {
> - printk(KERN_INFO "ide-tape: bug,"
> - " bh NULL\n");
> - break;
> - }
> - min = min(i, (unsigned int)(bh->b_size -
> - atomic_read(&bh->b_count)));
> - memset(bh->b_data + atomic_read(&bh->b_count),
> - 0, min);
> - atomic_add(min, &bh->b_count);
> - i -= min;
> - bh = bh->b_reqnext;
> - }
> - }
> - (void) idetape_add_chrdev_write_request(drive, blocks);
> - tape->merge_stage_size = 0;

this patch has the same problems as patch #3 => skipped

> - }
> - idetape_wait_for_pipeline(drive);
> - if (tape->merge_stage != NULL) {
> - __idetape_kfree_stage(tape->merge_stage);
> - tape->merge_stage = NULL;
> - }
> - clear_bit(IDETAPE_FLAG_PIPELINE_ERR, &tape->flags);
> - tape->chrdev_dir = IDETAPE_DIR_NONE;
> -
> - /*
> - * On the next backup, perform the feedback loop again. (I don't want to
> - * keep sense information between backups, as some systems are
> - * constantly on, and the system load can be totally different on the
> - * next backup).
> - */
> - tape->max_stages = tape->min_pipeline;
> - if (tape->first_stage != NULL ||
> - tape->next_stage != NULL ||
> - tape->last_stage != NULL ||
> - tape->nr_stages != 0) {
> - printk(KERN_ERR "ide-tape: ide-tape pipeline bug, "
> - "first_stage %p, next_stage %p, "
> - "last_stage %p, nr_stages %d\n",
> - tape->first_stage, tape->next_stage,
> - tape->last_stage, tape->nr_stages);
> - }
> -}
> -
> static int idetape_init_read(ide_drive_t *drive, int max_stages)
> {
> idetape_tape_t *tape = drive->driver_data;
> @@ -2123,7 +2049,7 @@ static int idetape_init_read(ide_drive_t *drive, int max_stages)
> /* Initialize read operation */
> if (tape->chrdev_dir != IDETAPE_DIR_READ) {
> if (tape->chrdev_dir == IDETAPE_DIR_WRITE) {
> - idetape_empty_write_pipeline(drive);
> + idetape_wait_for_pipeline(drive);
> idetape_flush_tape_buffers(drive);
> }
> if (tape->merge_stage || tape->merge_stage_size) {
> @@ -2702,7 +2628,7 @@ static int idetape_chrdev_ioctl(struct inode *inode, struct file *file,
> debug_log(DBG_CHRDEV, "Enter %s, cmd=%u\n", __func__, cmd);
>
> if (tape->chrdev_dir == IDETAPE_DIR_WRITE) {
> - idetape_empty_write_pipeline(drive);
> + idetape_wait_for_pipeline(drive);
> idetape_flush_tape_buffers(drive);
> }
> if (cmd == MTIOCGET || cmd == MTIOCPOS) {
> @@ -2852,7 +2778,7 @@ static void idetape_write_release(ide_drive_t *drive, unsigned int minor)
> {
> idetape_tape_t *tape = drive->driver_data;
>
> - idetape_empty_write_pipeline(drive);
> + idetape_wait_for_pipeline(drive);
> tape->merge_stage = __idetape_kmalloc_stage(tape, 1, 0);
> if (tape->merge_stage != NULL) {
> idetape_pad_zeros(drive, tape->blk_size *


\
 
 \ /
  Last update: 2008-03-21 01:01    [W:0.119 / U:1.036 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site