This patch fixes the retry-without-run_task_queue bug in ufs and minix.
Minix was also not using bforget to forget the data buffers of truncated
files.
diff -urN 2.3.14-pre1/fs/minix/truncate.c 2.3.14-pre1-minix/fs/minix/truncate.c
--- 2.3.14-pre1/fs/minix/truncate.c Thu Aug 12 02:53:23 1999
+++ 2.3.14-pre1-minix/fs/minix/truncate.c Wed Aug 18 18:58:01 1999
@@ -62,10 +62,7 @@
}
*p = 0;
mark_inode_dirty(inode);
- if (bh) {
- mark_buffer_clean(bh);
- brelse(bh);
- }
+ bforget(bh);
minix_free_block(inode,tmp);
}
return retry;
@@ -113,7 +110,7 @@
}
*ind = 0;
mark_buffer_dirty(ind_bh, 1);
- brelse(bh);
+ bforget(bh);
minix_free_block(inode,tmp);
}
ind = (unsigned short *) ind_bh->b_data;
@@ -226,10 +223,7 @@
}
*p = 0;
mark_inode_dirty(inode);
- if (bh) {
- mark_buffer_clean(bh);
- brelse(bh);
- }
+ bforget(bh);
minix_free_block(inode,tmp);
}
return retry;
@@ -277,7 +271,7 @@
}
*ind = 0;
mark_buffer_dirty(ind_bh, 1);
- brelse(bh);
+ bforget(bh);
minix_free_block(inode,tmp);
}
ind = (unsigned long *) ind_bh->b_data;
@@ -406,7 +400,8 @@
(unsigned long *) inode->u.minix_i.u.i2_data + 9);
if (!retry)
break;
- current->counter = 0;
+ run_task_queue(&tq_disk);
+ current->policy |= SCHED_YIELD;
schedule();
}
inode->i_mtime = inode->i_ctime = CURRENT_TIME;
diff -urN 2.3.14-pre1/fs/ufs/truncate.c 2.3.14-pre1-minix/fs/ufs/truncate.c
--- 2.3.14-pre1/fs/ufs/truncate.c Tue Jul 13 02:02:09 1999
+++ 2.3.14-pre1-minix/fs/ufs/truncate.c Wed Aug 18 18:59:14 1999
@@ -455,7 +455,8 @@
break;
if (IS_SYNC(inode) && (inode->i_state & I_DIRTY))
ufs_sync_inode (inode);
- current->counter = 0;
+ run_task_queue(&tq_disk);
+ current->policy |= SCHED_YIELD;
schedule ();
Andrea