From f2d5c937034e6c07391549ef6d46b2c8db086c85 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Thu, 7 Mar 2002 03:13:07 -0500 Subject: [PATCH] Fixed the journal handling so that an offer is made to clear the journal filesystem in all cases. Fixed a bug in e2fsck which caused it to give spurious I/O manager bad messages right before crashes. --- e2fsck/ChangeLog | 12 +++++++++++- e2fsck/journal.c | 4 +++- e2fsck/unix.c | 1 - tests/ChangeLog | 6 +++++- tests/f_extra_journal/expect.1 | 23 +++++++++++++++++++++++ tests/f_extra_journal/expect.2 | 7 +++++++ tests/f_extra_journal/image.gz | Bin 0 -> 4320 bytes tests/f_extra_journal/name | 1 + tests/f_miss_journal/expect.1 | 23 +++++++++++++++++++++++ tests/f_miss_journal/expect.2 | 7 +++++++ tests/f_miss_journal/image.gz | Bin 0 -> 4276 bytes tests/f_miss_journal/name | 1 + tests/f_swapfs/image | Bin 0 -> 1048576 bytes 13 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 tests/f_extra_journal/expect.1 create mode 100644 tests/f_extra_journal/expect.2 create mode 100644 tests/f_extra_journal/image.gz create mode 100644 tests/f_extra_journal/name create mode 100644 tests/f_miss_journal/expect.1 create mode 100644 tests/f_miss_journal/expect.2 create mode 100644 tests/f_miss_journal/image.gz create mode 100644 tests/f_miss_journal/name create mode 100644 tests/f_swapfs/image diff --git a/e2fsck/ChangeLog b/e2fsck/ChangeLog index 1bb419170..747f1fc68 100644 --- a/e2fsck/ChangeLog +++ b/e2fsck/ChangeLog @@ -1,4 +1,14 @@ -2002-03-06 +2002-03-07 + + * unix.c (main): Don't close the filesystem before calling + fatal_error(); this just causes a needless warning about a + bad I/O manager magic number. + + * journal.c (e2fsck_check_ext3_journal): Offer to clear the inode + in case the journal is too small, or the inode number in + the superblock doesn't appear to be random. + +2002-03-06 * problem.h, problem.c: PR_5_BLOCK_RANGE_UNUSED, PR_5_BLOCK_RANGE_USED, PR_5_INODE_RANGE_UNUSED, diff --git a/e2fsck/journal.c b/e2fsck/journal.c index ec575ee7d..6597d5747 100644 --- a/e2fsck/journal.c +++ b/e2fsck/journal.c @@ -620,7 +620,9 @@ int e2fsck_check_ext3_journal(e2fsck_t ctx) retval = e2fsck_get_journal(ctx, &journal); if (retval) { - if (retval == EXT2_ET_BAD_INODE_NUM) + if ((retval == EXT2_ET_BAD_INODE_NUM) || + (retval == EXT2_ET_JOURNAL_TOO_SMALL) || + (retval == EXT2_ET_NO_JOURNAL)) return e2fsck_journal_fix_bad_inode(ctx, &pctx); return retval; } diff --git a/e2fsck/unix.c b/e2fsck/unix.c index 1eac49731..e424ac7bb 100644 --- a/e2fsck/unix.c +++ b/e2fsck/unix.c @@ -831,7 +831,6 @@ restart: com_err(ctx->program_name, retval, _("while checking ext3 journal for %s"), ctx->device_name); - ext2fs_close(ctx->fs); fatal_error(ctx, 0); } diff --git a/tests/ChangeLog b/tests/ChangeLog index 7d16aee0f..71c1eb21d 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,4 +1,8 @@ -2002-03-06 +2002-03-07 + + * f_miss_journal, f_extra_journal: Added new test cases. + +2002-03-06 * f_badorphan, f_badtable, f_bbinode, f_dupsuper, f_expand, f_illbbitmap, f_illibitmap, f_illitable, f_imagic, diff --git a/tests/f_extra_journal/expect.1 b/tests/f_extra_journal/expect.1 new file mode 100644 index 000000000..f8ccd6475 --- /dev/null +++ b/tests/f_extra_journal/expect.1 @@ -0,0 +1,23 @@ +Superblock doesn't have has_journal flag, but has ext3 journal inode. +Clear? yes + +Pass 1: Checking inodes, blocks, and sizes +Journal inode is not in use, but contains data. Clear? yes + +Pass 2: Checking directory structure +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information +Block bitmap differences: -(50--1079) +Fix? yes + +Free blocks count wrong for group #0 (968, counted=1998). +Fix? yes + +Free blocks count wrong (968, counted=1998). +Fix? yes + + +test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** +test_filesys: 11/256 files (0.0% non-contiguous), 50/2048 blocks +Exit status is 1 diff --git a/tests/f_extra_journal/expect.2 b/tests/f_extra_journal/expect.2 new file mode 100644 index 000000000..834a12046 --- /dev/null +++ b/tests/f_extra_journal/expect.2 @@ -0,0 +1,7 @@ +Pass 1: Checking inodes, blocks, and sizes +Pass 2: Checking directory structure +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information +test_filesys: 11/256 files (0.0% non-contiguous), 50/2048 blocks +Exit status is 0 diff --git a/tests/f_extra_journal/image.gz b/tests/f_extra_journal/image.gz new file mode 100644 index 0000000000000000000000000000000000000000..113961930d9130178a8346b46859ede99b40b892 GIT binary patch literal 4320 zc-rmOT~reX76)+D8mudDTwAfRz;<1=Ev3rZ(KQI@BA_B5A4$lBBt-;t#$b;)x(x)X zR$Pz8imX~=Bk~m{ACm!b2n0!VS+!OptIlLf+(7*(tTO`IIH)6$J$>7UJ^Qu~d-V5s zpYHjed;aG}9Go`oO8EX2lc#J^=M@zM411BYJCN@4cYK1Id%oE5=1s3RXwQx{dq3IJ zcr)zCy1nmz=&ib0_m_3M)~t=J`|{V{`_D~RmUt^hIMa$=QSI{5G2N0PR~-A|WM7-x zvSe{U+14P_Oo3qO@NIR1K+w;BM%S+A^CCu8Y`VL5Frq#GC@t{k(ZxMh{L%NdBhWY1 z@MwrFu%e@4Pjq}onIZDH?x$z-M&imI+m4mrspTFeJqoR?K&vC>fIa@amjisyxycbB z5#uR8uoLW^QU9c}Z-XXATjByHLgRG4yrIVtTyNRr@`7r1_MDxQf2N%i_NkTQ7dyXu zOKEx>v3XQmsW|j9bjh^0~`^hxPgf33g+65>7YKFO=d|4+$9c!U3KiDv_C8=`U# zlJ!JRlrn`pLS#oNu99bnT&?vO{x;(yHe%V4^oIn5NzAm6D8$4nlz{c1&28r3y`Gk( zrYiUcr?9VaDdvKFp89qR2C;mmI_tLkINarN>_o%hW>2RhQ-vuY+Jo)HW1(J;dCaPX z20Zu}K7~0iLW8Y1^&YZ0OtPPziEPq#J2H}~8_4=F`DN-c@NmlPh3>VSOVsHQ4_LF9 z7|zQp^kiBih)Wx2%+eXYU*xj0zaMOOaT5~qse3>ocR>#WH zsaxE7|G87x5c6C(HmN3*ZPIj>XE-fVhSFe4Tt(q*m8PxVWMh|cw>8cE*i**OEBubQ zIZNNz%bP9$jg{`txC25*5;_xZ6m}*VGuRpctWwsRqM>U-bDScd{sT~4CA~+#0pz7- z&!T?^Y|$DPn6I#HKw_#aiz0#4RQWCH36S8*SwdX{Qe0pg^$Bdj~XXd zM*XuUCg4?eexUWy>D{{%1tBv&68)|9i?2^6>LwE5R`A?0bUthZ?Z=D-a3`M|rHUkn z;ESM9ViiLah)Hk&a)D;Y2ACER#h8?(1w@`YdoCRc*Lcn@HM`)0o-^$xj7=d@)pC_} z7<%EU+iB55L;N}|vD2u4ZJzEiG#17^U1LTq?DRN;(JAa{QHMjapR7Z2!j#EmHOKKu zVd7*u8rd2qy-dG}Y}98DSZY`~H!Ny$WDQ`Wlo0{-$|CXvBGD^`$WBD5SA~-MkPJoc zak2@KDU?$3DI16sD8y14K-3B;O$Qf^m1(pNQU0ve>te4ybe6DRbpdY{{o!wyE0^4piRSKDuqL5UD zoTfM=!JD&;3SpCx5^tu>twu`y9p#zvSPXOBZXU6gGW~XZ1P^2`XwYzLGIK*?3CC-x zS=^>raXP((^J&^onTObYnpUOhI2+1c)ifzFn&Eh{-` zvU`Pde!qAzDxePw!5(TM^h{WnWT}Sk3!9R#boXXJqcvSZqhSlbqe^j)>;RNis#)Zh zKt^hA4cW+@&{-DXz3#Vwf>d!9{RyB>mENLf0Qs)$CG;c0+^) z%YfY=w-4-c8xgo0bS_1M;08~JBj+S(AY^K#oIFN|)e4nK4c+FqtEIQ;U?P7wJBF4r zW+G)6?4m}9=no2LGhrI~r4F_bHN-6dRE_l8C86mGk}zFdZrW)AFDI!!8iE?3ws-bQa@ zY+PEme3W{@b@5v5hA9bw0s-}-Ff#$};8zE!=8=B}GOKbMNR+!G#FFrIY7S6XC9bu$ z!ruyQm&}jhJ-U_!rUUR1-PyRT8tOjRr>i$uj1Z$U7_bKrud6GxoPY*(O@&w=G^T49 fv~*U2w*p>!?X}nbj~*x5rwS^VCJ6}mO~AhZA;lMz literal 0 Hc-jL100001 diff --git a/tests/f_extra_journal/name b/tests/f_extra_journal/name new file mode 100644 index 000000000..c5540e272 --- /dev/null +++ b/tests/f_extra_journal/name @@ -0,0 +1 @@ +Valid journal inode, but has_journal feature not present diff --git a/tests/f_miss_journal/expect.1 b/tests/f_miss_journal/expect.1 new file mode 100644 index 000000000..8aebe4438 --- /dev/null +++ b/tests/f_miss_journal/expect.1 @@ -0,0 +1,23 @@ +Superblock has a bad ext3 journal (inode 8). +Clear? yes + +*** ext3 journal has been deleted - filesystem is now ext2 only *** + +Pass 1: Checking inodes, blocks, and sizes +Pass 2: Checking directory structure +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information +Block bitmap differences: -(50--1079) +Fix? yes + +Free blocks count wrong for group #0 (968, counted=1998). +Fix? yes + +Free blocks count wrong (968, counted=1998). +Fix? yes + + +test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** +test_filesys: 11/256 files (0.0% non-contiguous), 50/2048 blocks +Exit status is 1 diff --git a/tests/f_miss_journal/expect.2 b/tests/f_miss_journal/expect.2 new file mode 100644 index 000000000..834a12046 --- /dev/null +++ b/tests/f_miss_journal/expect.2 @@ -0,0 +1,7 @@ +Pass 1: Checking inodes, blocks, and sizes +Pass 2: Checking directory structure +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information +test_filesys: 11/256 files (0.0% non-contiguous), 50/2048 blocks +Exit status is 0 diff --git a/tests/f_miss_journal/image.gz b/tests/f_miss_journal/image.gz new file mode 100644 index 0000000000000000000000000000000000000000..674d348ed01032cd54d303a304164d2d220097ef GIT binary patch literal 4276 zc-rmOZBP>j8V7J%M$oB8CAqj|r?lv$A3m6Pg zm=-$}=oJraC@+GLx7}|>I*!^?!BO|c1~I;(?lyqpqHGM@&3(GL5BKqAI{N$g ze0t`YXa3IvG*z~+6${HBp-DYCj8*5eC(iKj&iDqtLvuv>5Ky8M@m*u?xUKPBGkEn09c4O~@7xbnas~n{CXwK}7l#nY=Y;OnrFRz9L8QCH8 z1)GP}y}_Za=%#b-vYcOzS8W*C)2zu=mDhM9XS=iK%zEbgEYs!iFKwe?FOM!|7FJ9L zUx~?_d22HCc=^Dqz|pXeXa8NA7{6nmezb{?kye~2zx~JOS>@R`7nF|l+?=?(vRdz@Gu*Vrv|DjXxBEod=%+9gRpA_yp)~L?43Fz=?F^@8CnA z%PFx?QV0hew_TZ;gMfvy!VHAx=^W1F@mb5?IMDBIk3?$0`|gvG=pZ=h?&w8Okac(W zqF&JFK2e0UFbcdt*I#5(LVbede!3W}clS)09Z;LQ&#CZ{Gw@$^*aD=Axg$Qg06oV{ zh&$?#PR9SvnmSW9ds^(=Wn9GiU`b1cfiS^9iz=7+9!_sjJ|fP*suuMU;!8MLnbAaq zGS}_MT5L6QiO=#It!4|WxA&H1&?Lt-*iYmk&5Qvq7?H$S+GrG3jHrr<7Far>d_g#1 z^@uu@sN#~MGF-;(%rz}iCU==HvR`XYwVDkq%{B9ys1%namwmxiYpt!=66UT zs@sh7mJUdKNRS6n8a;agGJYVs1kQ`eP_VibsL(PW4M@FFxtZGl;qtL1Z0 zDN6_8S(?-j=vDXuO?orE7~iK!Q_zvPMk5`j7vS06RFAoZ9mW&9KtFlZ?Qo`)60Nw@ ztMn00Zp4jEVS!93oGDBVrkBI}h3VDwyYOCN+IIRA_;aE3B0Ue@qjT*tH?YUV_%6#0 z_8W1}khzEbLEJZFnPe;NwzcLO_B(!y5@;eH!f{G@3=&4B!LTxgrs`R{-B~8tK-9u1 z{-5%!3MQAEwBvb}VYbfRGiL5*TkU;g79abC*0#)C%`V|~L;>|=1S{oAqLO!0DO{o7 zUY6oQbD3i9bH8&Y=_)zNZFR^Z$jjVL2Y`_*7w?eglVPk^Yq*WR0QZJGKeNFYM1Ly) zItil)s8wYX$3@5mb3J)ew5wKepS%dY;lj^msa|WCr<^5u ze2Yf*0eJ!cR0A}Vqj;P~t{^EqQKJ|pr|?*>Y!lfBKH`hKl71>r)KP?u6U*>iZ(1oG zjpyt7rYwH8f>#M;!Q{{I4k1uY-i5ab<=e??@Ml8BMe-@UwMFK^8kh&-u3hL2=DE0Y z2QkeJxVM+_Rr7OKPI_!H1Q}QYw_)4yP%VG=X#X?N%$+MufoGBdIZH zGuz0^{b%#gVP?wSIfnEzV|K$B>SJcK?aPpA<}M!>C8?*fxyyW7lxjE8z@98sbtLCg3htt||F)@^bqM5vu|YvW7no4^vCo=yKnlvgVa!=AE>L|b&HRv}-5_xRLANt^Xk=#>6! zxA8;BthaZY4nTIjGspNo)U7|0W0FI?ddH}7BV^V0kD9I$xzOzs)cSxo-gx7U-_fxd QpAOBR7%B}2_*1|?0WTjA7ytkO literal 0 Hc-jL100001 diff --git a/tests/f_miss_journal/name b/tests/f_miss_journal/name new file mode 100644 index 000000000..599be529c --- /dev/null +++ b/tests/f_miss_journal/name @@ -0,0 +1 @@ +Non-existent journal inode diff --git a/tests/f_swapfs/image b/tests/f_swapfs/image new file mode 100644 index 0000000000000000000000000000000000000000..e7b24b94610a31eb8697f68748a34da75b5c071b GIT binary patch literal 1048576 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