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

Reply via email to