[PATCHv2] ext2fs: fix fast symlink blocks check

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Use ext4_inode_is_fast_symlink() in ext2fs_inode_has_valid_blocks2()
instead of depending exclusively on i_blocks == 0 to determine
if an inode is a fast symlink. Otherwise, if a fast symlink has a
large external xattr inode that increases i_blocks, it will be
incorrectly reported as having invalid blocks.

Change-Id: Ibde2348da39401601abedd603bd7e4ef97091abe
Fixes: 0684a4f33 ("Overhaul extended attribute handling")
Signed-off-by: Andreas Dilger <adilger@xxxxxxxxxxxxx>
Reviewed-by: Li Dongyang <dongyangli@xxxxxxx>
Reviewed-on: https://review.whamcloud.com/59871
Lustre-bug-id: https://jira.whamcloud.com/browse/LU-19121
---
v1->v2: added f_ea_inode_fast_symlink test case

 lib/ext2fs/valid_blk.c                 |   1 +
 tests/f_ea_inode_fast_symlink/expect.1 |   7 +++++++
 tests/f_ea_inode_fast_symlink/expect.2 |   7 +++++++
 tests/f_ea_inode_fast_symlink/image.gz | Bin 0 -> 13789 bytes
 tests/f_ea_inode_fast_symlink/name     |   1 +
 5 files changed, 16 insertions(+)
 create mode 100644 tests/f_ea_inode_fast_symlink/expect.1
 create mode 100644 tests/f_ea_inode_fast_symlink/expect.2
 create mode 100644 tests/f_ea_inode_fast_symlink/image.gz
 create mode 100644 tests/f_ea_inode_fast_symlink/name

diff --git a/lib/ext2fs/valid_blk.c b/lib/ext2fs/valid_blk.c
index db5d90ae4..332e9c66a 100644
--- a/lib/ext2fs/valid_blk.c
+++ b/lib/ext2fs/valid_blk.c
@@ -43,6 +43,7 @@ int ext2fs_inode_has_valid_blocks2(ext2_filsys fs, struct ext2_inode *inode)
 			/* With no EA block, we can rely on i_blocks */
 			if (inode->i_blocks == 0)
 				return 0;
+			return !ext2fs_is_fast_symlink(inode);
 		} else {
 			/* With an EA block, life gets more tricky */
 			if (inode->i_size >= EXT2_N_BLOCKS*4)
diff --git a/tests/f_ea_inode_fast_symlink/expect.1 b/tests/f_ea_inode_fast_symlink/expect.1
new file mode 100644
index 000000000..b88456d00
--- /dev/null
+++ b/tests/f_ea_inode_fast_symlink/expect.1
@@ -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: 14/256 files (0.0% non-contiguous), 1147/8192 blocks
+Exit status is 0
diff --git a/tests/f_ea_inode_fast_symlink/expect.2 b/tests/f_ea_inode_fast_symlink/expect.2
new file mode 100644
index 000000000..b88456d00
--- /dev/null
+++ b/tests/f_ea_inode_fast_symlink/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: 14/256 files (0.0% non-contiguous), 1147/8192 blocks
+Exit status is 0
diff --git a/tests/f_ea_inode_fast_symlink/image.gz b/tests/f_ea_inode_fast_symlink/image.gz
new file mode 100644
index 0000000000000000000000000000000000000000..f3872b3721fa8484e05cc3281d0bc745113fa775
GIT binary patch
literal 13789
zcmeI0dsI_by1?6E3caI1=lVcR!CI?~ML;CH0wJ|lCA?Ba0eOVhC>kRm5I_PUT5e@T
z0U^8}p-M<95Hd;#5+u>FNR^kI13?2JRSI!~BtjA%fg}^`{qs)Oy6fIqtE)r)$l5!5
z?VWG`&Uf}Xzi;c+_us#<CG5-}Oo%aGpFZ`@>k+f`ktAK`j9>Vl*029y^EW=5V)uuH
zg<bxu$w=DE`$+8YXB%7n!Y}WBuk!BU^=1lt#kXlM{?2*-)0Z3ft#A2wSteSFl(cnm
zKh;{9^~uL(_SRNs#4U?;|C!yq<$TQ`okD7EQfYWnQgeN{sQGYQ{qjUvoAvFvk%6E#
zg&-?p5ME9s&Gt=O9(%^pSelJ@Ri-veM$*wFw*5pU1+;VBX>DDj@mY`RaAeW7ZwX^L
zG=0x&kEs;?*(Hs(%29Yme`8)GYqG>F44@lPx*r+$9>s(=y`=h&lh7L+Pog+>Vx~EG
zMvg#vS6ydZ5A?T9I@d5ws;X#g;cKGtKxiOj^*{AuL$sQ9*qbvp!;^9wd!Ao7_|C6?
z?&owS84g>tj&f<9Z6D|l+Zs4Q3e-<Dad)aPx@Eh#mrM}6gHJu9KaF41_r)FyoDfg&
z^!_tRucFk;?clLlOe>+kJLApmKaPClc9H!vZDUV`+mcom)YgSreAc;KH6%)QQ){@3
zdeZPv-KgOkj;pTq)=^vzvPxX5A?`=HT9@SFY?-#qbubofSX5RcTJqM<W3JXI3=;#%
zF-wULiAnM4te2M8m^Dy85t&mvgUsK_mFxOMss-BMuJNI!*?Z1Cm4;^il8E+5%AH=+
zN2M8tl}V#eS+-mhU802$ujMrP#uPzwSiCGPuu~U@i>c?&izp{vZq3NW7&1B(v}v74
z(csrx+G^&&piSWKYF?N0b?FuZy1K~I-D@@~o^EP%(?@X)sUs<o=YN8;Y2K&BOUf9V
z|3Ir$zR(CVPOnMJT{9o)Hq(-8IDt^}7@~z{yLG<~|5r!fRG$cx@WsxjML8md@q789
z>!PNIv}WR3-~b{e0_}wMKH8l<G1tH-{a*TsNcfdv#6HB_|M_3vM4hc@R2ke7yHs26
z=9ivccTu(Vyxydjc7M^*-SDm)^V70frQw$!4fYd!hj+u7i^MM8F$v24`<`XDKQvF!
zREaPzQsO;*J+?TxVS|D5C5Im*@t7`14ruXdtChm`unh<%_6=0b-2pFTliST2(_gSW
zFQz(+UK1lNqCNhHyyxl96;%ui-bBUgt>outstwakWf)iXU`$xld<@n4EVb%5ZCGq?
z@+Rsh0ow5B!-eYRl&Srqh0kbD6r$d&1-?V}J8qYi28$lU?z%zo>*OCKWzoX%;pXW+
zbM_!H;8Xp5AJnJTRR`hFEx2{WS&A1eZU_@c(IXz!2NHD=c72{fi=Jp}*|OeQkrC53
zZ;&j>GPtVZ-lJXym$reD(WjjcUh8OM=TF5i_u0t|&pA&XkK`;-C(Nu3f9lZFX7`0F
zLe)xleQUhRU@&t#fgaC#`W)RcZ)ldpks=MBb6bvOsJhc#H)sYL+Z5YEG)P0ll6<gR
z5EEuN|D~|IIz+GgCYu)b?CTfLE{s*voSSH+t;dGBL(24-11igQgN{L6c)(V~4}wE;
z>H$|hujazmj-m!ew$<J$@dgrfnS2iAU|k*PgY&Uv(NV7Axyb72_8!sxc*35amDhD4
z0>#MevR9henBko}ZZ32i4(S%>?UD^?3fk3dd3CFmslGYPpr`d}7M(gJ+mq8~-t9{>
zyvMg$##I_R4yDH<-n8iTeKFxt^A4ikI9+@7B4=^AmBa0jekU^fqXEntvX*l^-e9Jf
zm1DN-mr<FFaz-hmFwl?9cFtDz!9h?E3_~#N43&X0a2z}b9-tMZg2j%$WoXTj_{{iZ
z%3(@8%C`NJc4YhRcCV@md_KMmUxcs1)A1Gf5`6XO_0iJN!qLjng3<C`zc{}*oYF_>
zuk=+0DzVA{rJoYF)kn^@WLef)TFrk3Y5)O@-CB6@vn|Yq*g-Qny{DnmupE-ZR?xTL
zD)0kczz);{5|{!APyueLIplc3Csa?WE!8cuTv+1Z*CF~uzfb$M_OLcyi`5df#|2(G
zugLsHf00i}Z4@i2wjSofac9T-;%Oxr)%xrDQvK28-8&=c`hrILMkQzKoAsDARrCo~
zD)A~~RuTKlt>iPj9^)L~hII=VuAPQ0Ks2$Ftm6HXyT~_<O@)L&3|s*pB!f9%0dhg$
zEywASjjRL2_^^UvmY%oU9=F8aKs<%|$U1a60%cvPsI<VQV6#|lthU-Vb{g{`^a3yd
z9*hESAOsme58efrz&`K*Yy&sI*Wd;CGsp*r!C%#{)TQcY>bvBVl=Lk=_0U&ae2vF!
z7+uWDCm%(ja#**KjGfR))Xsof%2_7hIdE_Y=r*`ZPDgD+Z>xG1H2P!TvQ7jiizG5b
zCIa*s`ha%P5F8_0HrUbh20@d92SJ4~R3|RpOC6`BL@ZA=J3EHn-A}kXx?rFfY^#rW
zE7}~~|8}?eR+aOVZr+vV4mo4EpY#N%CZa_0yXR#|>x^geP}uNyY|U~9*Sc)vBe{WA
zxW93JO4jS}U$lj>xa!e|tV4&=vP`#_n5i8q8*%mxT<g*;c=x?~yq~&_Y>IIAa2kAt
zsJ01r@j52sE=b>7vn7*GfDshW-S|?OwEHCGOu~bK!w=h~#V$ifaoH{pGfB1r+a<TR
zo&DQ24=&xhk^A_`MET_7iJ<{AL<Pd!d}3y@Q;aal>1_#%{dN+oDl^TExppn-o~*;K
zD<s5Ym-s{H{!NpV`m0@>FVVZiYooU|ZnjaD7KY!T9BDW%Eq!fgk;#8taG=L!klw>3
z#<pG)%s(yYaJCF_BBCQYn2YB%TFLR69pmE0%Jr5ZXrgxn;Q~4RZlaa_u9Pn{#&JRu
zezairgGR=B(xa)VrQj4BnctJD5aXX+8yr&StWEa%sUSgq3>Ph4>+dF!DWML;P&Wf<
z`AFNqY3C*F2@cG5k#?SO+9ktjn5mPN-5I<M<F}$bh>e@8(7RgpX_%o+J1tw1PyTJx
z6*#W+TWO}z?UVZ1ztu6i8*W+RI0!~vm~$Ew;k@^m?xJp--^f7DgP%iXll_-mVjSB<
zq7ilxU0kl<z@l@}0UakNQYXi(Lkjfci0adG%uwe&Xe5+0103gx#t2@oU28#po$3FC
z8ipp?m_4KtOt#lhGY`dS&;7;GcaVOf=kg3CYN-Ei!w6=OKGC`--wdH#UVFA`O%c6J
zzWMdNzwe%sEqFEAc9iF9ePreRz1UV-ovm{poMh@4E}Th?HlkQx!KU6hF;@PZKH+Ws
z;rA)l+q$}@gN@7@qCB0BRKIrLUQ#m5p+L*$%R}AvKGmEVPp)U2LnUi3OYo0oPsMZw
z&NEZny`y>DsUyOBBe5%C)m^#r=%hR?5|5YF*&>G4CI<$e3v(tx>6j+WWN}OHw@<Jt
zt*cWjfBFe@Prj>fC0zv0Bc-Ui(U!Z^BlvaowlSn)9<G?j1?4=>af$bFiI7Et_$(0>
zlC8A7a9Os3ydQL3Ml{Ay5wS=V2AMYRIKOh`Z1?UJveK>=FR@oLYq+#o9$aW_LtZp7
zSINN#p@|$YMfo9s^y$tDT1-#)4fFc8(ZGY8u2bX8#e65|6#_Ah*n)2%9#JTak@4ah
z7@EsrZ0h*Q#J;9;O?|M|Jsj<R`|QmzU%^dHeDF$cqrHlhaVU%LHjHmOf+phetfg$L
z{!rL;mu0?ji8t2VJTf(ncV{GNkX{zE2YI`ZaOc99Yblz@2%|T}76kJHUl^e@oA)w!
z-hZ$&Ua>334w+kAOFq|MH15q|6b{EEoDrzr4dKVu*x8P!oIxBEC>|MSEg5H}it`#`
z)d3umCqKBjWOfoeMTkznK<!LAIi6jXSC)-UG^}+qO~`znk<xr8sSWQzWaO^X9F#}O
zULJV6c#Fk4Y7S+|TJ`dPUs#L9G5W-zM?e4UL%2t!JK&Eh;4<v6%uuy7uYda0^q<?R
zJmseeQE$fnFYj=_`hxe{9{f)F7~L${m3X!}NG{oUo{;F<YY2kZ!E}fS)Z~Md1d1=^
zEG3LWp&Udxqn*)qXiu~)+70c9##9yIuj5O5108)G1Le#TW(ljLwuGGs+d+14JyZ{q
zAQC(UO~D8V0arj3a5xkWr-B$T4Xi;Ghy+rA2JL_fbif2Gs~@Ous9&h_)&1(*>KXMF
z^<(udH6ZWP`fJZ=Bedz-&jov^PSjmg59$u83)P;Arf#P?M-~c;90E(2acm`1$?}8e
zp;KT9n1L*C2y_Blzy_zmtXf4rAlR$>II<|CETgC~P!uS_iULG_A{@<!=1=pb1r9Mq
zOcI=Qt9U8{SN_Wb9*K!5<NJoQ-y>G=Vgy(LQQ{C&o$TZ0=gF#IS3$kR5*|r#Kw>}5
zh%KA*Y4J^Cjq*Yyp40TXfR?}(Y)e3kUkfh9C&fR-mr4}z_SpMgg$sB{4f_-^Rf6I8
z*un3D`{XZC?otoy0!4vEKuSQ0UkYyCC#&`$jE38xc9;rLVI8D{O&}9E6Uv15L;K-}
z&_j4Tv>mR2{tWto6SxiH!H?<%<n`d%2gt(9@FZ_1Cty4Ho=n~nKp=VrFdvis%Y8Ki
zJ}@ydtlE`HfaAde`E$zWD5t8zK*pHX?6;ks|KjMnlP4>~rmp}j;E^e)?Pw454zvr}
z9*stCuPS4dF^U*f3_7ENQNpP1^>y@d^gqqEs<mP#LVl1R+y!;PtzZKv0>{80Z~@IA
z321;h$N>SM2iOA+xTof;=hV6CUUj2dp=PK@)k3vieTkf*{Yv|#_Po|ddqx|oy`cR<
zds2H;OBQ@Y-AQ$&I#9i-+agParNTmCrLaI)E-V%@g!#fU2Va@5726MLfm5IqxE7>=
zJ8GReQ~gj~qaIV!)v&sWoT^O~d>mPpk>BVm@)!Aru%p;Ari>-4m9a5Q3=30>VUwUJ
zs2K>3R)p7Um>$H~@)Ev}3N9wr^OC}@^RdIM3T6ds8k!?!k(+n~L8@febY(KOjTO$6
zLJCk!%p=$HPEQ7;)fy`hL>YOCTtOZtw~?2~S>#SKd!S^_Zw-8t=WdVn3!;S;7qfM6
zHgB)>bqjy9+Dy0#-Ub}NQ}PhGg*;ErBZs2Aq|Q=1si)Ld>LzuRV$dI<_n`lRc1M4L
zMxuA4z0e<{_o6?w&bO(uq1#m0l;ry7;Y^6fw)pQSx^n_akOWzf>wAdZk1T!!e^Kt=
z$^2(k2k<lbNyHH5Uz}0D?d8AX+xBt>|6AlB`akzL(4hWC{de;Jr^T`Jn0c(c+B`On
ziDThvaqKnF|61W>IE)X*ALEM&#9%Q27{3yBHQNp<0#=|--KDN4Cux(k0ooXCq?W4P
zuO(=Mw26Y9x*d@fjegCk&0)Xa!(Hk%<ow%Cz18S`uLOR&+=Nqp4cFAP?>EW0WJ0kD
z9Aa-24_Ww|JASx%)7Dpr*tHIom8ECZIk-H|7Dk;iWLfdedpQpt-v;LG)*BtWm9f!#
z(a6@XCcl3%8rxM)sxu11iwDi?q;y@y+s=)A?N9dyzU(}CDltHFQbn4~%<0LwY^u7T
zAx!05Iw%jfZ~5G)%>E{wt_L5XMwKsX$Ls4W*OPL~&a6#pAM6+p{@!TOrcIVZYx7e4
zpS(5phFJf(4O#n!Pd>i+i})j3A`VK^&OClumQ`QMvuQj5rQfAcryKeU5=bF|*;(}r
z<km(fFO>I4>($~y&zltE`0eA4aoE)NLySd*F^z^=@0q9EG2UChqU@6-?LkvdoAcOK
zl~GbjrYyv?G6lTMAw}cL%?MPn7%xF>T2Uhffmd3nToF2rSu{qHJv+dyL=Ii+HCobl
zE5=993isR_8dsq%G4`Pmj7bwdiIy6=BK`weY_U1+7^e(vl={uDGw$mX!b5Q7OXP%x
zIL)j3<@^$<EJ^`C!IA>z#URSHiFIPH%1bkoYlk(==JYwI9ckEHYO@6h7Stt6JYxjO
zrlw}7xqUlVJPMhY`9gU6QhvYiL5&;Lwa}_|5_>!P;e~eY)R~B2MYT}`BT9eF%t^^G
zZ8kda<8Ia3Wc=5~nz(evbE7r;P?>Q(XXMNknJ<$ARA!0&TYGmVW%t0|$8X2?yv8P0
zTUZRV<z63OvGDaIF}G^dEnISC{#$1!X1E75AU40E@DkdN;asgfsrzFb35$351a=y9
z55Lt}GL*C{3Lo3D64u}kUl8u7+8rFZaf9?6lBuVyohzrzg($3kzBQ>UT>kkuGnHCV
z8Zn%Fia4q&lpE6}Rk}IW-};y`e8hVf_sSrh@8T!1^^**d10>?zG1a?cqF@(dI4tu9
zaVsqb`{6q2p_lp<G{#WP-L_P1EpJ~cSyAzO>o#wWg4+*t>4H}LJ*HcdX!pd}CNeNn
zL-WDhTMV99orHeLa@j!d5%DKDPcIKf#@W`0$L}OS%Rg=+s&jJY%+0yO$XzKZ#>gaY
z!F`nd99Woer&WHO|6ER_R&s1ALtXmgcSQDU-QVW64dcnYo3+`~?AZ@)F_4aqFty|A
znFeA-VU~|^iG|#uLjoZ>?6^WO`MBG4Q+eo+)A4)p2xEl^$9a6*4Qm(9K5r}#NK8-T
z!nR&2GG4JC>S|2Q4tnxmJxQnz#yy#K^*~A&FWQB-^cT@*J$dHaBU1>*SybaJuc<@9
zZd#VO**e^=%P&>K)HpeN-xH3Z?j&?{clvi2OG%dzCan+7iQ2-R3nGmPjqAKZsZlk?
z&D?yuczD(o;lXxYZtBd<9h~s2I;?6tAt8b3G%CbeIet11x_`iZ_Io`qSNF9_V3ois
zfmH&l1Xc;G5?Cd$N??`1DuGo3s{~dFtP)ryuu5Q+z$$@%M*<fOBufjQm7V`lN0a7#
d`R>0Xgw;K-68PN`xbS|(+6Vl1-nsbBKL8Gqki!4~

literal 0
HcmV?d00001

diff --git a/tests/f_ea_inode_fast_symlink/name b/tests/f_ea_inode_fast_symlink/name
new file mode 100644
index 000000000..9eebeded8
--- /dev/null
+++ b/tests/f_ea_inode_fast_symlink/name
@@ -0,0 +1 @@
+fast symlink with ea_inode
-- 
2.43.5





[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux