ReiserFS Bug Fixes 4 of 6 (Please apply all 6)
This changeset is to fix reiserfs journal problems during fs mounting.
You can get it by piping this message through bk receive
Diffstat:
journal.c | 29 +++++++++++++---------------- 1 files changed, 13 insertions(+), 16 deletions(-)
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.588 -> 1.589
# fs/reiserfs/journal.c 1.31 -> 1.34
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/04/05 [email protected] 1.589
# journal.c:
# Remove confusing warning about journal replay on readonly FS # Fixed journal replay bug where old code would replay transactions with # mount_id != mount_id recorded in journal header. # (by Chris Mason) # Release journal device in case we have encountered some errors reading # journal.
# --------------------------------------------
#
fs/reiserfs/journal.c +13 -16
@@ -1637,11 +1637,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 ;
@@ -1672,13 +1670,14 @@if (le32_to_cpu (jh->j_first_unflushed_offset) >=0 &&le32_to_cpu (jh->j_first_unflushed_offset) <SB_ONDISK_JOURNAL_SIZE (p_s_sb) &&le32_to_cpu (jh->j_last_flush_trans_id) >0 ) { - last_flush_start =SB_ONDISK_JOURNAL_1st_BLOCK (p_s_sb) + + oldest_start =SB_ONDISK_JOURNAL_1st_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,
@@ -1691,15 +1690,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.
@@ -1733,17 +1730,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 "
@@ -2037,6 +2030,7 @@ SB_BLOCKSIZE(p_s_sb));if (!bhjh) {printk ("sh-459: unable to read journal header\n" ) ; +release_journal_dev (p_s_sb, journal);return 1 ; } jh = (struct reiserfs_journal_header *)(bhjh->b_data);
@@ -2053,7 +2047,8 @@ jh->jh_journal.jp_journal_magic, jname, sb_jp_journal_magic(rs), fname);brelse (bhjh); -return 1 ; +release_journal_dev (p_s_sb, journal); +return 1 ; }SB_JOURNAL_TRANS_MAX (p_s_sb) =le32_to_cpu (jh->jh_journal.jp_journal_trans_max);
@@ -2153,11 +2148,13 @@SB_JOURNAL_LIST (p_s_sb)[0 ].j_list_bitmap =get_list_bitmap (p_s_sb,SB_JOURNAL_LIST (p_s_sb)) ;if (!(SB_JOURNAL_LIST (p_s_sb)[0 ].j_list_bitmap)) {reiserfs_warning ("journal-2005, get_list_bitmap failed for journal list 0\n" ) ; +release_journal_dev (p_s_sb, journal);return 1 ; }if (journal_read (p_s_sb) <0 ) {reiserfs_warning ("Replay Failure, unable to mount\n" ) ;free_journal_ram (p_s_sb) ; +release_journal_dev (p_s_sb, journal);return 1 ; }SB_JOURNAL_LIST_INDEX (p_s_sb) =0 ;/* once the read is done, we can set this
BK changeset:
This BitKeeper patch contains the following changesets:
1.589
## Wrapped with gzip_uu ##
begin 664 bkpatch2342 M'XL(``&YK3P``[5647/:.!!^1K]B;_J23`Z0+,LVSM!IDUSO*+DF0R9O-^,1 MMH))C,5(=BAS[G\_21"2YFA+FP#,2+9VOUWM?I_0&[C60L6MB1*B1&_@+ZFK MN,7+R9B76:?D,Z&7NI/*F5D;26G6NKF<B:ZS[X[ODH54=UTEI@:%MHMI67]N M>QV&C/DEK](<[H72<8MTZ.9-M9R+N#7ZX\_K\_<CA/I].,U-0'$E*NCW4275 M/2\R_8Y7>2'+3J5XJ6>BXC:+9F/:>!A[YLM(2#$+&A)@/VQ2DA'"?2(R[/E1 MX".7Y[LM^WF.Y&.&>PPSKR&$ACXZ])A40^PU\5^%S,@-&9^3,(C[,<8PS>! MX8A&Z,3>-V-G*(4;F6M2EYTTM@\(S$3-X+2&5Y4^MI.8$%5Z4=^5C6U8,U M*#$O^!)D:68\DV6QA]7#N##]+/(GMN-:P.4"R5`%ID!SP0L9&VFZW6W#9Y6 M4UEJ6$RKW$'-9%U6R32#W_J/<R52J3(38EINHN0F!Z$ZSNE@O#2]5U,-?W,M MR\/UK@K!M=@X9.)^F@H+D=K7"P$Y-[L696K#F#PST(:1()222KL]FAHXJ(=Z MH2'8ID;H\I%JJ/V3'X0PQ^@MS"V)M_?T1J^58":;7CWI+\/4:RBE8:])>V%T M$V"1XI2'8^9]FT_?0UV1EOI10R/F42>FK>966/M)_#L*^U'B/B%>XT>TQYS:
MJ/>UV+S8BWXL-@9M\NIB2U^/A4\X&%#"(G0!;;5P/\.IR^WM^@5R#CQ,>T!0 MR\1VJ2=KM,2D?C!/=*+'OS]D<WB,SDP1F,_<*.WLY^UJ\P#$#@VSH299B&C MM1W=C4>?\KC!01CGA<UJZH[@M'G!&,[$"PR!//VP+!7.WQ_X>C]W\$[!+\7 MAF1?Y#PC@6^[;D=_-8:6-X/U:-E@-BQTE>B**W,/@*N3Y.+3V>!JF'R\N!Y] M>G^>$+-Z<GYQ.ER3Y!".P"&%:Z30T/@)DJN5K44?"D&]I))).J\/;O/VV]ND MX,;BIJAUOK&S>.38(91B81$VU=R&\+!HM42"B*R2<&.K93!VBWEH542"'EU7 M82(K":X&22$GR:KM-D)(K4H'9@S7IE]%.8H^M<N^AXPN^A;HW_0<X#X92IB M4;.BAU.1_[6*:.SOH"(,;;J7.]&++D%#6/UO[HWVH:D*?;P,I[E([W0]Z[-4 .X(R@?X#O)#I8+````
`
end