[PATCH] reiserfs fix for inodes with wrong item versions (2.5)

Oleg Drokin on behalf of Hans Reiser (reiser@namesys.com)
Wed, 6 Feb 2002 18:51:41 +0300


Hello!

This is hopefully last bugfix for a bug introduced by struct inode splitting.
Because of setting i_flags to some value and then cleaning the i_flags
contents later, on-disk items received wrong item version ob v3.6 filesystems

Please apply.

Bye,
Oleg

--- linux-2.5.4-pre1/fs/reiserfs/inode.c.orig Wed Feb 6 11:18:35 2002
+++ linux-2.5.4-pre1/fs/reiserfs/inode.c Wed Feb 6 11:12:08 2002
@@ -890,6 +890,13 @@
inode->i_blksize = PAGE_SIZE;

INIT_LIST_HEAD(&(REISERFS_I(inode)->i_prealloc_list ));
+ REISERFS_I(inode)->i_flags = 0;
+ REISERFS_I(inode)->i_prealloc_block = 0;
+ REISERFS_I(inode)->i_prealloc_count = 0;
+ REISERFS_I(inode)->i_trans_id = 0;
+ REISERFS_I(inode)->i_trans_index = 0;
+ /* nopack = 0, by default */
+ REISERFS_I(inode)->i_flags &= ~i_nopack_mask;

if (stat_data_v1 (ih)) {
struct stat_data_v1 * sd = (struct stat_data_v1 *)B_I_PITEM (bh, ih);
@@ -950,13 +957,6 @@
set_inode_item_key_version (inode, KEY_FORMAT_3_6);
REISERFS_I(inode)->i_first_direct_byte = 0;
}
- REISERFS_I(inode)->i_flags = 0;
- REISERFS_I(inode)->i_prealloc_block = 0;
- REISERFS_I(inode)->i_prealloc_count = 0;
- REISERFS_I(inode)->i_trans_id = 0;
- REISERFS_I(inode)->i_trans_index = 0;
- /* nopack = 0, by default */
- REISERFS_I(inode)->i_flags &= ~i_nopack_mask;

pathrelse (path);
if (S_ISREG (inode->i_mode)) {
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/