Hello Chris.

I noticed that fsync() also has a BUG related to meta-data journaling in Reiserfs.
When write() extends a file(i_size is increased), fsync() must write a
meta-data change to a journaling area on a disk.
But, it seems to me that the Reiserfs does not do this.

I suppose following patch would fix this bug.

Thanks.

Signed-off-by :Hifumi Hisashi <[EMAIL PROTECTED]>

diff -Nru linux-2.6.14-rc3/fs/reiserfs/file.c linux-2.6.14-rc3_fix/fs/reiserfs/file.c
--- linux-2.6.14-rc3/fs/reiserfs/file.c 2005-10-03 14:13:57.000000000 +0900
+++ linux-2.6.14-rc3_fix/fs/reiserfs/file.c     2005-10-03 15:27:42.000000000 
+0900
@@ -1320,7 +1320,6 @@
                                reiserfs_write_unlock(inode->i_sb);
                                return err;
                        }
-                       reiserfs_update_inode_transaction(inode);
                        mark_inode_dirty(inode);
                        err = journal_end(&th, inode->i_sb, 1);
                        if (err) {
diff -Nru linux-2.6.14-rc3/fs/reiserfs/super.c linux-2.6.14-rc3_fix/fs/reiserfs/super.c
--- linux-2.6.14-rc3/fs/reiserfs/super.c        2005-10-03 14:13:57.000000000 
+0900
+++ linux-2.6.14-rc3_fix/fs/reiserfs/super.c    2005-10-03 15:27:42.000000000 
+0900
@@ -563,6 +563,7 @@
                reiserfs_write_unlock(inode->i_sb);
                return;
        }
+       reiserfs_update_inode_transaction(inode);
        reiserfs_update_sd(&th, inode);
        journal_end(&th, inode->i_sb, 1);
reiserfs_write_unlock(inode->i_sb);

Reply via email to