Messages in this thread Patch in this message | | | Date | Tue, 7 May 2002 19:05:44 +0400 | From | Hans Reiser <> | Subject | [BK] [2.4] Reiserfs changeset 1 out of 4, please apply. |
| |
Hello!
You can get this changeset from bk://thebsh.namesys.com/bk/reiser3-linux-2.4
This changeset clarifies config descriptions of reiserfs-related config options, it also fixes a bug with incorrect transactions being replayed in some very rare cases and allows to change hash on empty filesystems.
Diffstat: Documentation/Configure.help | 13 +++++++------ fs/Config.in | 2 +- fs/reiserfs/journal.c | 23 ++++++++--------------- fs/reiserfs/super.c | 23 +++++++++++++++-------- 4 files changed, 31 insertions(+), 30 deletions(-)
Plain text patch: # This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet 1.383.2.34 -> 1.383.2.35 # fs/reiserfs/journal.c 1.21 -> 1.23 # fs/Config.in 1.15 -> 1.16 # fs/reiserfs/super.c 1.18 -> 1.19 # Documentation/Configure.help 1.93 -> 1.94 # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 02/04/16 green@angband.namesys.com 1.383.2.35 # journal.c: # Fixed journal replay bug where old code would replay transactions with # mount_id != mount_id recorded in journal header. # By Chris Mason. # super.c: # Allow to change hash function for empty fs with # mount option # journal.c: # Remove confusing warning about journal replay on readonly FS # Config.in: # Rename REISERFS_CHECK option to show it;s true meaning # Configure.help: # Rewrite REISERFS_PROC_INFO comment to make it more clear # -------------------------------------------- # diff -Nru a/Documentation/Configure.help b/Documentation/Configure.help --- a/Documentation/Configure.help Tue May 7 17:53:59 2002 +++ b/Documentation/Configure.help Tue May 7 17:53:59 2002 @@ -14171,12 +14171,13 @@ Publish some reiserfs-specific info under /proc/fs/reiserfs CONFIG_REISERFS_PROC_INFO - Create under /proc/fs/reiserfs hierarchy of files, displaying - various ReiserFS statistics and internal data on the expense of - making your kernel or module slightly larger (+8 KB). This also - increases amount of kernel memory required for each mount. Almost - everyone but ReiserFS developers and people fine-tuning reiserfs or - tracing problems should say N. + Create under /proc/fs/reiserfs a hierarchy of files, displaying + various ReiserFS statistics and internal data at the expense of making + your kernel or module slightly larger (+8 KB). This also increases the + amount of kernel memory required for each mount by 440 bytes. + It isn't useful to average persons, and you probably can't measure the + performance cost of it. If you are fine-tuning reiserfs, say Y, + otherwise say N. Second extended fs support CONFIG_EXT2_FS diff -Nru a/fs/Config.in b/fs/Config.in --- a/fs/Config.in Tue May 7 17:53:59 2002 +++ b/fs/Config.in Tue May 7 17:53:59 2002 @@ -9,7 +9,7 @@ tristate 'Kernel automounter version 4 support (also supports v3)' CONFIG_AUTOFS4_FS tristate 'Reiserfs support' CONFIG_REISERFS_FS -dep_mbool ' Have reiserfs do extra internal checking' CONFIG_REISERFS_CHECK $CONFIG_REISERFS_FS +dep_mbool ' Enable reiserfs debug mode' CONFIG_REISERFS_CHECK $CONFIG_REISERFS_FS dep_mbool ' Stats in /proc/fs/reiserfs' CONFIG_REISERFS_PROC_INFO $CONFIG_REISERFS_FS dep_tristate 'ADFS file system support' CONFIG_ADFS_FS $CONFIG_EXPERIMENTAL diff -Nru a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c --- a/fs/reiserfs/journal.c Tue May 7 17:53:59 2002 +++ b/fs/reiserfs/journal.c Tue May 7 17:53:59 2002 @@ -1630,11 +1630,9 @@ } static int journal_read(struct super_block *p_s_sb) { struct reiserfs_journal_desc *desc ; - unsigned long last_flush_trans_id = 0 ; unsigned long oldest_trans_id = 0; unsigned long oldest_invalid_trans_id = 0 ; time_t start ; - unsigned long last_flush_start = 0; unsigned long oldest_start = 0; unsigned long cur_dblock = 0 ; unsigned long newest_mount_id = 9 ; @@ -1664,13 +1662,14 @@ if (le32_to_cpu(jh->j_first_unflushed_offset) >= 0 && le32_to_cpu(jh->j_first_unflushed_offset) < JOURNAL_BLOCK_COUNT && le32_to_cpu(jh->j_last_flush_trans_id) > 0) { - last_flush_start = reiserfs_get_journal_block(p_s_sb) + + oldest_start = reiserfs_get_journal_block(p_s_sb) + le32_to_cpu(jh->j_first_unflushed_offset) ; - last_flush_trans_id = le32_to_cpu(jh->j_last_flush_trans_id) ; + oldest_trans_id = le32_to_cpu(jh->j_last_flush_trans_id) + 1; + newest_mount_id = le32_to_cpu(jh->j_mount_id); reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-1153: found in " "header: first_unflushed_offset %d, last_flushed_trans_id " "%lu\n", le32_to_cpu(jh->j_first_unflushed_offset), - last_flush_trans_id) ; + le32_to_cpu(jh->j_last_flush_trans_id)) ; valid_journal_header = 1 ; /* now, we try to read the first unflushed offset. If it is not valid, @@ -1683,15 +1682,13 @@ continue_replay = 0 ; } brelse(d_bh) ; + goto start_log_replay; } if (continue_replay && is_read_only(p_s_sb->s_dev)) { printk("clm-2076: device is readonly, unable to replay log\n") ; return -1 ; } - if (continue_replay && (p_s_sb->s_flags & MS_RDONLY)) { - printk("Warning, log replay starting on readonly filesystem\n") ; - } /* ok, there are transactions that need to be replayed. start with the first log block, find ** all the valid transactions, and pick out the oldest. @@ -1725,17 +1722,13 @@ "newest_mount_id to %d\n", le32_to_cpu(desc->j_mount_id)); } cur_dblock += le32_to_cpu(desc->j_len) + 2 ; - } - else { + } else { cur_dblock++ ; } brelse(d_bh) ; } - /* step three, starting at the oldest transaction, replay */ - if (last_flush_start > 0) { - oldest_start = last_flush_start ; - oldest_trans_id = last_flush_trans_id + 1 ; - } + +start_log_replay: cur_dblock = oldest_start ; if (oldest_trans_id) { reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-1206: Starting replay " diff -Nru a/fs/reiserfs/super.c b/fs/reiserfs/super.c --- a/fs/reiserfs/super.c Tue May 7 17:53:59 2002 +++ b/fs/reiserfs/super.c Tue May 7 17:53:59 2002 @@ -793,10 +793,10 @@ // hash detection stuff -// if root directory is empty - we set default - Yura's - hash and -// warn about it +// if root directory is empty and no hash hint were supplied - we set +// default - r5 hash - (Rupasov's Hash Number 5) and warn about it. // FIXME: we look for only one name in a directory. If tea and yura -// bith have the same value - we ask user to send report to the +// both have the same value - we ask user to send report to the // mailing list __u32 find_hash_out (struct super_block * s) { @@ -822,12 +822,19 @@ de.de_entry_num --; set_de_name_and_namelen (&de); if (deh_offset( &(de.de_deh[de.de_entry_num]) ) == DOT_DOT_OFFSET) { - /* allow override in this case */ - if (reiserfs_rupasov_hash(s)) { - hash = YURA_HASH ; + if ( reiserfs_hash_detect(s) ) { // Hash hint was supplied + if (reiserfs_rupasov_hash(s)) { + hash = YURA_HASH ; + } else if (reiserfs_tea_hash(s)) { + hash = TEA_HASH ; + } else if (reiserfs_r5_hash(s)) { + hash = R5_HASH ; + } + } + if (!(s->u.reiserfs_sb.s_mount_opt & (1<<FORCE_RUPASOV_HASH|1<<FORCE_TEA_HASH|1<<FORCE_R5_HASH)) ) { // we need this for hash=detect case + reiserfs_warning("reiserfs: FS seems to be empty, autodetect " + "is using the default %s hash\n", reiserfs_hashname(hash)); } - reiserfs_warning("reiserfs: FS seems to be empty, autodetect " - "is using the default hash\n"); break; } r5hash=GET_HASH_VALUE (r5_hash (de.de_name, de.de_namelen)); - 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/
| |