From 6e4fbbeb500d6aa7aaa193f689356c487d461ede Mon Sep 17 00:00:00 2001 From: Richard Mortimer Date: Mon, 4 Oct 2004 17:56:24 +0100 Subject: [PATCH] Attempt recovery if the journal contains illegal blocks --- e2fsck/ChangeLog | 5 +++++ e2fsck/journal.c | 1 + tests/ChangeLog | 6 ++++++ tests/f_badjourblks/expect.1 | 25 +++++++++++++++++++++++++ tests/f_badjourblks/expect.2 | 7 +++++++ tests/f_badjourblks/image.gz | Bin 0 -> 10481 bytes tests/f_badjourblks/name | 1 + 7 files changed, 45 insertions(+) create mode 100644 tests/f_badjourblks/expect.1 create mode 100644 tests/f_badjourblks/expect.2 create mode 100644 tests/f_badjourblks/image.gz create mode 100644 tests/f_badjourblks/name diff --git a/e2fsck/ChangeLog b/e2fsck/ChangeLog index eb85548..c8518af 100644 --- a/e2fsck/ChangeLog +++ b/e2fsck/ChangeLog @@ -1,3 +1,8 @@ +2004-10-04 Richard Mortimer + + * journal.c (e2fsck_check_ext3_journal): Attempt recovery of the + filesystem if the journal contains illegal block numbers. + 2004-07-26 Theodore Ts'o * pass1.c (process_block): Change the limit of directory size from diff --git a/e2fsck/journal.c b/e2fsck/journal.c index c1b4370..eb4b38d 100644 --- a/e2fsck/journal.c +++ b/e2fsck/journal.c @@ -665,6 +665,7 @@ int e2fsck_check_ext3_journal(e2fsck_t ctx) retval = e2fsck_get_journal(ctx, &journal); if (retval) { if ((retval == EXT2_ET_BAD_INODE_NUM) || + (retval == EXT2_ET_BAD_BLOCK_NUM) || (retval == EXT2_ET_JOURNAL_TOO_SMALL) || (retval == EXT2_ET_NO_JOURNAL)) return e2fsck_journal_fix_bad_inode(ctx, &pctx); diff --git a/tests/ChangeLog b/tests/ChangeLog index 48188dd..cf4d56b 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,9 @@ +2004-10-04 Richard Mortimer + + * f_badjourblks: Add test case which tests a Journal with illegal + block numbers in both the journal inode and the superblock + inode backup. + 2004-09-17 Theodore Ts'o * test_script.in: Remove XSI:isms for greater portability. diff --git a/tests/f_badjourblks/expect.1 b/tests/f_badjourblks/expect.1 new file mode 100644 index 0000000..e9f4cad --- /dev/null +++ b/tests/f_badjourblks/expect.1 @@ -0,0 +1,25 @@ +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 +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 (7112, counted=8142). +Fix? yes + +Free blocks count wrong (7112, counted=8142). +Fix? yes + + +test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** +test_filesys: 11/256 files (0.0% non-contiguous), 50/8192 blocks +Exit status is 1 diff --git a/tests/f_badjourblks/expect.2 b/tests/f_badjourblks/expect.2 new file mode 100644 index 0000000..32ca977 --- /dev/null +++ b/tests/f_badjourblks/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/8192 blocks +Exit status is 0 diff --git a/tests/f_badjourblks/image.gz b/tests/f_badjourblks/image.gz new file mode 100644 index 0000000000000000000000000000000000000000..e336a4b630e6d03d1fcaefbad0625e2cebc5ab24 GIT binary patch literal 10481 zcmeI&Yfw|^8316ER%{g*wSyLnv~^auwFp}p*oFqQURTSVByd6!ynuR+5k-!S!GNw+ z)+$)n+Y&`Y5t5vo955b`Kmso7W#v}&T*e^ao!xT`Uhse%fpptn?o6luy0bH$@7Fuu zpYMI2@11wPA7Ajn$&=%A)-0ary-B-fL#EfW9=HaD9W4*^ozW}jPMkjd)0J~17nUtr zloYsWvAuH1s;P^9_Q6k%{rOit6}hI$+@jz7?p*F(Vr=%ZtCv0Z8t8@_gYDz(1#}dI zO4**bZ7zGPRplj0{MaQR;(mA>!gYf)gaNtnGD&FA3=M7ngH`Y=ty%^ z>LWh?p+56P&!0q@8IMPsN2_=KG2A%Rw4%Uk!Awe7TcI#Yh-WMbu==^azCcy3s0CQ)OUR6_#Xey*7!~M zqOfJu`)P2PXZMItdrZdoghBuRY(4i;gogDUDO66_KbE=uM&sDg|7M&w?EOws?HHo|hm13q4jZ__57qO$Ov+C(KK$6;-9H+2$fbUAkzMNqY?VTVZt)w>+dqN}A^_EUS!Li0g(1^38axe#q* zUfIuCEeONdtE?!?%;)a#X(~-5Q4A;dq}LN&EM-TxU{Oq`9T~9ZGre|f0P|t4=!|o$ zE0~#Fo9@bP3kzBW~sX!4=JZJs6^-@_p9sXTz$NHHOU4`0ml6j)Lphjti7{;8z_957TrMdQg`;=+)GDb!!^ zngx09TYIm5+pp!0q2hzhXz*o4_^2uI2UXKr<7)i51T!#xA!n_$J=a$s?nfJ2) z;N$f5erPN6LUPWjSV1Mix%%dUgzH2toG#MLCk}|u#hH(?MewRJpql&^US5{AfxHXH zl_~ql5qPmGbtZY0JI`-ZC7q-);hm~P1to)FRWeP%+);khn8k_(G1u&-EmkGd4?{ij zdRhc;=#k~oQaHOuF-&`N8PXJgdMj+)PqN2#xEi6^!`yO5S~l6u#reK=Mpo{pGJKIlW{DUqmY=6*iL;7j>*$ZU z2Z8m`Nsq`k;>G$)^DGCzhla{%`B7@UcxP;4F!o!>%rA{qm0LD}E`zlS`z3fSP#sRT zi&u95Hu9NxMMv6p@}4-pLs@Pf0mp%}0hWE>1E4ZmO7K4KUpv23@u;n9s%TcKB>?+? zvEl1OWUJ|ZuoS2}fjois0kzSZ1>{Y96$&6EgD*$ZG)5eB1JxADfn%<-&eR}kId{Qz zIl>eR*<4L^#t;Z`+3QSNwhdQlHBm$fp6pINV3!LSvg#QG&(@<(b)PYt zD!>ax34P{ldJmi+N-rYvm_~S`NM1xw;~bKUCFb+&TW+tUssw$+ypdGIS*F2BW$7`N zWQLHSaacIhEv<8!h+0X5l79wrz-|ZKzW`s4^>#RsQ5zlUb z^*srZR4lx`Cn*L~vUPUHfH8`-+8YN<`K;64Jjdw6R_HFzF=>cU_7*Rb%A2iyL^k`9 zS4k6_u^8egmm*bl5jHMestF|ya!HPKj6gWRp)RyUG95ak*O~`rY|Y46>5ExK4EE@> zJH#ciDpnIt91=HWnM*tq7louwA-}{|>g@rdOXCyX zx!LzG^lYxZvS-g#=m5VtByBZ$n`;27PM}Y~5uieD>7rNRIcO3>fw&G$gs7Py3N%tC z7;*s35yntzKc1*JMOb6OJ1$EE76P`p%ym{R*v;o?72UKSzRsNzMK8o5x4e;7fQMbS zA+rN2=RvnpgJ5(da|+kEH9kZ=(+y{cQhexNb7lM%5l}=vfS2mA63dVErNM2MD!S+? z+*(IUD7}CK9de8gW{Y*UUUNNL7C0*+EbRY0lcU-Vlit5(6)F}41OY)n5D)|e0YN|z z5CjAPK|l}?1Ox#=KoAfF1OY)n5D)|e0YN|z_<;mGhz*9lymov23*F&DQvd(} literal 0 HcmV?d00001 diff --git a/tests/f_badjourblks/name b/tests/f_badjourblks/name new file mode 100644 index 0000000..103fa7f --- /dev/null +++ b/tests/f_badjourblks/name @@ -0,0 +1 @@ +Illegal blocks in journal inode (and backup in superblock) -- 1.8.3.1