From ee855c041ad0b76c319221263c1d9b706245844e Mon Sep 17 00:00:00 2001 From: Rmys Date: Fri, 7 Aug 2020 15:42:16 +0300 Subject: [PATCH] kernel-5.7.14 --- .../perf/files/patches/linux/patch-5.7.14.xz | Bin 0 -> 586748 bytes .../fs-MAINTAINERS-add-exfat-filesystem.patch | 39 - .../fs-exfat-add-Kconfig-and-Makefile.patch | 96 - .../fs-exfat-add-bitmap-operations.patch | 309 - .../fs-exfat-add-directory-operations.patch | 1267 --- .../mageia/fs-exfat-add-exfat-cache.patch | 354 - .../fs-exfat-add-fat-entry-operations.patch | 492 - .../mageia/fs-exfat-add-file-operations.patch | 390 - ...ory-and-on-disk-structures-and-heade.patch | 740 -- .../fs-exfat-add-inode-operations.patch | 2156 ---- .../mageia/fs-exfat-add-misc-operations.patch | 193 - .../mageia/fs-exfat-add-module_alias_fs.patch | 30 - .../mageia/fs-exfat-add-nls-operations.patch | 860 -- .../fs-exfat-add-super-block-operations.patch | 758 -- .../mageia/fs-exfat-fix-discard-support.patch | 32 - .../mageia/fs-exfat-remove-from-staging.patch | 9152 ----------------- ...pdate-file-system-parameter-handling.patch | 84 - kernel/tools/perf/pspec.xml | 27 +- 18 files changed, 9 insertions(+), 16970 deletions(-) create mode 100644 kernel/tools/perf/files/patches/linux/patch-5.7.14.xz delete mode 100644 kernel/tools/perf/files/patches/mageia/fs-MAINTAINERS-add-exfat-filesystem.patch delete mode 100644 kernel/tools/perf/files/patches/mageia/fs-exfat-add-Kconfig-and-Makefile.patch delete mode 100644 kernel/tools/perf/files/patches/mageia/fs-exfat-add-bitmap-operations.patch delete mode 100644 kernel/tools/perf/files/patches/mageia/fs-exfat-add-directory-operations.patch delete mode 100644 kernel/tools/perf/files/patches/mageia/fs-exfat-add-exfat-cache.patch delete mode 100644 kernel/tools/perf/files/patches/mageia/fs-exfat-add-fat-entry-operations.patch delete mode 100644 kernel/tools/perf/files/patches/mageia/fs-exfat-add-file-operations.patch delete mode 100644 kernel/tools/perf/files/patches/mageia/fs-exfat-add-in-memory-and-on-disk-structures-and-heade.patch delete mode 100644 kernel/tools/perf/files/patches/mageia/fs-exfat-add-inode-operations.patch delete mode 100644 kernel/tools/perf/files/patches/mageia/fs-exfat-add-misc-operations.patch delete mode 100644 kernel/tools/perf/files/patches/mageia/fs-exfat-add-module_alias_fs.patch delete mode 100644 kernel/tools/perf/files/patches/mageia/fs-exfat-add-nls-operations.patch delete mode 100644 kernel/tools/perf/files/patches/mageia/fs-exfat-add-super-block-operations.patch delete mode 100644 kernel/tools/perf/files/patches/mageia/fs-exfat-fix-discard-support.patch delete mode 100644 kernel/tools/perf/files/patches/mageia/fs-exfat-remove-from-staging.patch delete mode 100644 kernel/tools/perf/files/patches/mageia/fs-exfat-update-file-system-parameter-handling.patch diff --git a/kernel/tools/perf/files/patches/linux/patch-5.7.14.xz b/kernel/tools/perf/files/patches/linux/patch-5.7.14.xz new file mode 100644 index 0000000000000000000000000000000000000000..dd75bd00db6434b6d78b5aa4373cdc6dcd46d86a GIT binary patch literal 586748 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

ZW-UM-5;-S#ZCL_d|8rKVtch&i#U0I3lE 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�vmHpT?EWtimfuB=SwX5EI@JR<_vVbNTMzri_X6(>?AOuac z05X_t7{`HPV}B;*Dt74JIllA~;1C+WYQS;@fBy?FR(~K^(uWTB=yB-2vqN!wZR9-u z<1K8E;-;!jWEFw>pje4qk7Y{h>f)RJErQ$_bERchEei#uRJAGT{1Pat%Joii2mgLvpfowC8m_Q z-p2P7&XbIykRF9NjufCk>9b{E5sHyP$@ZQ458R&%$Rn!7(5H@{UQO>=r#;TVVZaMJ zh#bCD7S~}F>yj-Ewn12(1+oA;uDm_B!zWU)5Yk4_Dvw6m&ZaYnhd)#;05lXi)KE(N z!Xj~C(k+M)V4A^lim^US(G!xklq%wT8B4bANq#f)t^UR~+h8)eS%zAGH{OOjytd8! zaw^Qz62UJ*bGwPsUS(iC6to_Q!n}a`8=zHpDBNn{ehngDPx~4xfXBLLVEMp08;S4H zzj3!IVqRZm4G_SVg`hCXY%_-j*k$M#6iw0`@GF8U!)Yi3{T}ui}bqCOw%r zasYs)$W9Ca?q|P)|E$&pKuHLdjzv(wz#w1y-zkb2mc`+gFQeuFM?kp0#k3}pMjaAF zNgB-sK)&c__sVap#_{(fD-e&YBbqxCWr#BI`St6HhG=Vz5?eQSNv^M+T;${ZM7OXzNdiONXIeL!Q@IPv!IcITQ*Ik_cY zbNJ=?(8>iTW|xPrT!x(3h36hO=I}Am$OK25F$9ylcV^fSF7#)?_T<{W2_xDyEM<46 zFJ#oT^iqVfHPjylD$uXLx9D=lk`$(tQo*94<1SjtmwzoUxrb+EyNdb#X*3_$1ak5$tEyYbvg-OK zERoaoScdZaks0-Dc-EL2qavUQSsp*0^me97JL;_Q_i#%KQXo~tUJzzw7Kw@{e4kRa zd(R+Zl5tn<5R*t4BFunS&<7Zfq(^Q?+ph{@cH#hOaE&9*3NFymtqNRkJYWl0`^xHTk1#JHz8vwdi*(Z0Pleu`6Q`vq6|j0YkN=18VhqCm@U)> zw%CO;-EJpVP-+~IyY>=VxJUC0sW}hS(d-4kN=)>OaaGkyIq21ZU$#1Wi1R)Iz`w9Q z{`1wF@muqG1&n2BO5TTS_;PV={X(V>$rI1Ii1tlKywH6Mpt)OM;@Ay6sbc4$#5k|f zdhDFfC#j&p+vD*GA{5x0cYD>1i%biA?asz%lp#2jlNtclZBaa*XXK5184v1nP*VMb z`7;?D0f**thJyk$rx#`@%H|?J;zEu{wq|1u837WuirHi97^|r2g?;~@S0Zu`uk}FU z2cx_l#VvhyMV#?uZ4oZ1!yitJ`0}-k&h<)b#Sh~o6nc7ssnS>^gxZ#wTVp}WREJ^) z;_v?i|DK!WjQP@33yEHIe}F>ChNFRANWI4S7e0R=1^8 zlu=D;!WmVr6clx{qO&}<)Qp&t56c;I#S;WHz?1#O^Dw~suutcu+^9U+5%w=_6*_rB z=mXT_u;S9g4|N5t3^o$wAQMGQP|A~Vo56PQ=gs9tO-W#(Hp(t6-SED;qAB4DwN2)1W0%Ad)@_5kg`B!1m~S{xbq&TQ88!T7j9X~3UMZ8@-Br~t2+^@4lO6BTup3h%z_Nzj*SBg(Ud67H zKIMy#!_$YWSTd&v+~5c;vCA3#pc|+7Il}oj(;fFhLlaWC36p8Al*RH3s^vVzXVJzr z=n;m_0NOKeOepEh?bEmRNy{0a+BF8+T3MoGm;#)CdUllBqajV@VctScU ztBON_a;uJG?86-D(gx7TtL17eKJcK3@HW4Gc6=c?7L@hv>AM+*et|IHV z8RxH2$FjYSw5SMhQL;9b^QV%JI7&5`hSSi|WoPHFyyN5n2&sS7SJqLL=csshFQ=>m zEtr1qveAWO;|{OgLdlU&}z&clO9FFWxBO+v*A%WDVxl~YS&?v z)cd^!L8A<%0`F$S zimC>#kG2>ttp|)<)yrk-ECHgp(Xkzd?jx?JHp);7k`4Ls+YK3a zH5N(!%ax7xWy0b$7UYWP1XsM{CCNNQBai#q46CTc_pY>k_F+sN6a^LS(c$+YKv4df z1UqXx8fA0-s#6Su=;f+TN#yI|x)hVh6uas2bJk7JCzow8ds+Aoug%KHY#%(!-W*2# zl!>*rp-Dle;2_}}WmAo`nL)#9qd8L-(vn0aKWhd;JNtpPdnGcTQ%20`^a6YQ&Fd+j z#c7fD8cGqjQaaku1TMTKirQ&UIKBDhnRGRxeb)bw-BDz&#|Ep=wg0y4^Q-_tm?_de z?Eu9pc{*>m3VS1v1Bl+Zq5l;uGz!~1++**)pF1eXikc=8|T%<&f_PIrcB*#o! z-~4{hrgh%f1SL-k` z<(-6bl;qo!V^RU-v$tbeBB2`1g0m5Q$W|l$xedE_AxoC2L8ktRv~sVGT)-a~U)mL< z$NjJpm`y>Xg28o``%LlRumzB^#X=rXvpcbyFSQga*?iTPHDT?d^Y)<_)K;6?w$Kfw zdyx&7Meb@(h3xfkLQtdt+~q@c*<9XABGLxBE4>&U=?Q;IQ|80BK&)sNyI_cpwc#EA z@oI2G`SYXX-085@Y%%M<;VOuF&V)mYqutJp?T#?rht4g~6V4Q+?=BP%0SYV!CnT_| zA;|ne-Tq&#w9(4YS34X?3*Qr;c0SVHWxRB>P^)nQkI=`Ks@1?^lzsBlVt?xyjp{YG z`^{m0lkoLyV1(k&3E^O=ls@hGcPt2HN{;xMe~b{PP$Uc-{Zr9R(172YT>Lt-^KE*Y zgsz%uQA=}j*chr7@W>WZx%SaoPZ>~aoKS=#vd@Fxv4IiS}8U1iib~E*WsSf^&MRb%K$wOd)voHWC4=Dx`(| zL8&o|tY%M7D-=LGby!7WEw-oxv0R9E0}E-@B<7?wi^@;}ElOn1Q;rX0wb7PS+pWB9 zi$@wE_+o@j1r(>K=gmz-v}(Ddz`tT}m6}z4f+9oT$uu%vjVy)a-+aO~J3rOm-Xq-* zN?4I%wH``yE&`N@EG3U5i)O!_AU_N3(yRhU3D`f?BTi6o! z*6E@UP0MWql@QbD=XKP>9S*F#ZOr~9hpk2adm~8f6sM1lOI&>F{#iaC#UZjVU;KOY zFs=r~Omj99I7jE3SZurkoNz`JZJJ!h;*$gd)3vlRnD2ulU(xle_7@hUCSZg>}UW(u@BmzJhwuxcUNe5!zL6P6D zbamXC2o#dU*xZ|+TKCr3Gw-V%MXb*$GCn0Dnw2v=$r>GI{77c?4ha&*=$ODqJ@zj|2@9cz`vG?#|W9udd`UK9WBB$eJ@i{rGo)b-CQT}F&?AfBt~ z+@ZNriFERI>7;V8F6ZKf=tgWib=quRu3pWpNC1RSq3`|x=`wKxAQ<0dZ#$ic)xn6b zvP>O^SmS?!ZoW!tN}foB`4Ldh^Jg`3@wD#;{`Gtp()+MWMp8$d153C~BFW`kz%3eE z(5$I{>7H*pYgTp>uaKKj+!|kkDKks5k$DWUnN`0d(l31E{&t4M>YW?^vO>niW_}bQ zqz~l$!b4@R^odd$u6^naFC3P7<<6EZ%Dwi7VjYL^)`@B5Gp{lBJ`PQuY^o?)J0ESf( zG=Ko^eBHsPruwEW<&8b*>9W|LMb<_RYX)&PtZD+P|(M%*02NW)6F8Q%8sP9T5d!uE-7JfXDveqHy1wTAdzM}6ERH6 zUFray^MNgY6?+BKH)*TSLd8NHU0opOl`!AY^kJ&g>9wPMOjMw)-JGg%hNzPfF1oUzFdBZcQ5}s!LCIZIOY6qm`fR9Fm{YYAX;Pv( zQA$<}MRIXPG`u5iqiN5A!B)BrKX<6&>6dizVreL)Mnc&}NRsYKh#v8P&^h{OUWF>P zapCnuRv)s?va$>anY-?@<3w6y(^qbd%)6>yw(#hxI3}^1*-2tIq|7aYK;sE2UPT7s z2lrD|sT-7p?=v&)nU0jcIj=%bO~{90O~W<7RES99-UY2~=Y~tjuEuKN;(+2y2x*OC z=s|?xz;jg^{o{n){o##+Ee(|vWGTL4_&yTYwZ*Z)1^8y@!wzO>Mg8xwH;cM@_mv@N z{x@|Qai_RB#`AySq1HoGo=M`k5Z4?yY=9T7r+7J!*(2YL;o{EayK=8sL2|k?}e7 zku9g(b)z3tcSkjzVgZv{`c_)Xc-ekt3%&gi9vM597&DMUspf0v510cxxq@1cN>EP;Gi@!efYUYBGwG9+!;tBnkf+^= zS{aaO(c8Jca5FqRjaJwg{vWV>Y0fDxauzb6lYeDKJf0&Ahkp5G7&UV{$uoBhiSp@R(lLEreBF+g%6{^As{yfwp&)qK zS<^NoYT-`5_T75i7}y*eb@_MN^_QgY#}eb-nz^@+C!=qPu%G0{0WFNW4dSD^{+6p? z0LeTPap0-DNy_NYa)2E5I&pnpfnPk2Mr}9|{4yvrgKSd-9asXtULCljAnibbyEbTFU9vfXKV^78IkhdR=*Pay(#- zO|5(lzE?Q=b!vD?4~-TECbXsE9)b3{QqM7bBo1^j(+G_1FRaCHpLb@tqmOkf8n(Vs znL^lgPm$|<>}M&JZAE_cGMVzgfGMNopev=5_7jV^ifI4Rlco5g0a5udFyJKCtCXZ0 zi3u0lCB>AP={IcUB#`yHK66XiK6bY>)PK1&9JnTd&elxhL4_$TJM_S#edqovfCB8g ztZGE{54L#ThUf?Tqp6xc$57(*G+TgPHK)_4dZs@`mmNTSg`Br%ZxE`emgvQy;@o7% zF`Dn@5yls@ZE4}swHa3Z!_es6fjDD7sb8K!5eCvrKFd9H;#AD4Z#FRz{;i$zs8jbD znde9Q(V24}baD9MYEXEBmU6*Vz`Ui$ZRstZRzW&Ba^5y(b~Zpko@Nu~XCQTu4X*#O zjDd}7g(^3LY|;z~jlOsXO2GwX)r4+xaJDcn4^bc>6H;_EKz?rvJHmMz*_f6fsR9%1 zI~lqG*ma*CHRW3z;bvr~TQ$D`^AA{2OVQK-jwi5}W=Ms-sXO1=7+R>!9p5AOI z#?ol9#QT%ds2^E7(SG5yU9luUE@*DWrh#@_xbK9&cc8dibw+D)!DyQ^iNO`;U@5g- z$JoyEx!`;!u2Z}nxNgklv+x+cIQbzF1Z68o2B0kU@YkV!vx?m&%uVD>C~u+vdO~ts zu?52owZ>-#jW6-SCqoDT+t>8L#YjKsocBSLrPpPdRvs{5o>cKQ*5ySOeH5F_Whu;t z+-lZwjT|0GBZX*k^VcUt+FLd2a-o=Nxx`mYJZ{_Y6ahXk(*z3+&K2OyDt~7hndK5X zCFd>G(yi5B#z!sobGfpF%j#VnG9Jm_tvfPUt$;?yFH9#e1^e65XLUbmG1MOT_#WCJz;W8wx)J=seqZ2J`fDnq6 zL{gL`$|lq1oGCKq#W_r@zsZr?V!yGJMnwwHi0SrshHoJXdRB5iukd84qalsX#2@8W z9vZG($Sec zi|?)H%_y)|*?}+{t6eNf*5jxGG7LQtsonFUu5(dH!j34`?gT|IP|ZRovUy}rs1%RhvVdekKK`+6^gswb^hj)BRv$Ph!T7qU(IqvLG_v&Zz3+q&{;Q!at=wm>t4Q zj)i|tIB8Q;iVUPzS$RFrV9 z7)xunSrwIz!${D@v<_12&Xc)4bCsL z)d>1epWtb@{wm>_B?p@M=RO6AjaqLh7-RolSLcM4fuk<-MU_sWKQ;(gc~x7@16tq2 zPIk8dvV4puF0akBNOX!;NwXPrH~M*TlY~r)j05RC>-VgQ;gId;g6w`ShnVK7oC)tUTsvORv&gN@IHMN@W1%o0Q*Qw zaKJ@^2YAD_%Ur$(!-VC57_ixXcqw`p%hbXga)Zg$zB?qCU*E0d)Sur5=x8AD@TSjx z2NkGF60jojf%3UaQgi09Kf7uGkG)Wv zc%lj32xZwTBStpNQ_652%@E52;^i5Zmo0)d?%M2RY;CkC0jU^D@t@kl0%hEVQ zJ$xY)F896tO5{Va!WLl^a3guq0qu_olj@zB5?FPVtz za;m-HnKiFhOPI=&F@GR&&@vh!Y|C|rvIEO^74Kqm8Qd8114|k94f7kM(=fEGnHD98 zcNfL)?zl~(%9Mm|LL@|zqY!G!54u|MjJi~A|0i~OC^+aSYKAtx0BtDJ4_d0yOcE?T z0)zEY1$_Q)=4~k=kF%amixdjC$~IGZKjK4DlO;Qd>Dw2n6PLBY7+!)lVSeLtROI7d zZCh#*E<&M*sG{BNbJEk22O;13S05D4?Cot8_?Oo!cA{Gq4!6Do1@SDm#A1y$P${xx z{3}MM*kE}OYOHPkJVqzi4jxXdGJydz^pPW=Q)`*_-TGdWin~q+FW71T|F_?8oU2D= z%N7-UX$bOE>g4^oZsKX$b4HBjG@ew~GO(5vT9&~n09A&qJ5COIs6&f|mU^x78**A! z=ei3Hwazg${zRK==~%O#Fc^GGS-go-CDU_B+e32cZ9$sPN*a3*?Mk_U{-`@{0+A0? zD(Rl6&-1MiCG|xJR5tOPLukyWinaGUN7%zuqi}ib4pzs9Y}BW4=+b;%N>g5*NOHEj z!EUoE(Rd3S_Au1RJs??vNAUyiI*7x^pRJ^xTza2_dMw+GJ!C#aUgP{HT1j&dQ$%@W&`%JWht`-Kc^^5{0L90V^Z03~Jfa z;be^T8s&2@eDD`m0k=n&#vfF|@4jZ+`U;LRkmn7|f#%K|T7ESheBFxa%%tu#2GCG1 z92ecN@5rQ0v}J1jyH67t0eM7zv~tce{CePj&WrQLUSl=`lgesS?&mQ66hG6fCRdg9 zzew(~5u4}JCtQSJ@3Ltr^|B9#=it@OQkH!RdCpcCAx4E_;1)g~h};5$KqhJ?nf#V= zh@^(;!)1E55|OFZY{OI+>3DHWOKyXn(DB@Herz5DA{P1uepG&7ahqRdWORLo*BbG> zYMxA5ZsQm&6no5KHNS~kj)|p;|KCn#>5NkR_p%uzZ`t?TF6G#a_P!Q*CfNb8C#8*w z7!d2|_P2n@_L33_s_z)xv}n+{iU+i?@fG|K9QuwMA(mM|-{EDq{V2#CppF{xAn$Fo zD0wLnEB6S?$)lUf>ete9T&NXPV5cCbmPF)nH;ay`{mvo`dP!7F*=1iw~-jUE(Hh}N5 zxzFbSKt@95{!*h~5IsyAheI4_5-7as<&YVZ$Mn~{WM8#4KxD3)JDpBAEhG0UQnZq4 z^JdY$1x{ECDH2KU9qa@@!t5K+VeDlnb&YrhuKYAVbDHuIan>@cs-Aujr-e^Hrc?eP z5+zTi@RJ_|VeZaSQuZF|b14bINUjl~=ZII$AD&43#}ywi=8Gm^9}UW8`sx*`9ddwR zemuKh)KuY;0;O>OCw29Wk*oW+DaXjLVlL1mkvp4!gC0N%^l1TP&e+YXj~dZD5gIz! zuL>yOS_giqs&~YK_mW8ojdtU5kRiS5z;Q^mzT}Uv218Ga9q?q|BAxbV*oDd>u5FZf z@#0RXBZVGc8bInw)F4Sdjh}bs$h8k=apRxlE=}{QWE8SRQxJ zCu!8)$hS@L@y6U?Ck%TaZ1n(IoYv17#`bW0S1+j)H!!#RKvKKFu|rJBCst&?18q{9 zzKs3TX&PEJb;We8FY`e=kBSuZSwI!?9Nz3X#ZjFN{L z8{=$Rt(jMs4<0||ct}2q$JLY^De#-M@A=2CL)W#W%pOw0tlwV;C24T#y@a4M7o}CO zsLv16cDu|2u``Rmb1sTOiQTR(+YzFpFBs8}bl1Z+M9g^+Af2%)K{|^GxgM6xU?o$L z9Q9i6Nxh@T=UV}7C7gX@Zb0s?>lp)zDwF=cCSs(y`)K&xiBZ3u%QzTM(8N_#NYcm# zg5>)noG!JBwohzZO0HA*2iGLr5a$mK#Kmf-mEgcim79?;!C8Jbn_M`FA?54U&A>Jr z7z$XyT%jCPP~`hz`MWxx9ug1E=QD5<@n?glA1)OAZ!bX)_@p1!Yi`!^!y5UEpD}fCocT5sf5|rqefriddHc@$6@l6Za=Kq& zrx(+$n)u(<J9LN-;(^c zs4jro0@@nF1C)S-I}c)DAIwe$P)1otnOd+OeNBBX6@0M{x5~r_{jkIf8RneI`_@hn zaK;beblxnaZo6^p1GH zGENr!a@a!{D`?AO@OGrq=h<_IV7ebvrz3dD@_Lb}1|z0UawA2RHkTd9=B#A(g8!>! zUTE7T2WsKC5`R+Tyzj3aDJLXPfiR*WAtVPT0mH6vQ!t1w*QsLqg!ovsMsuf2N%SP~ zfHLJ(+@>=CdLw%i7XnQt{XV}o|I@}LNjNrncN76C#R#a7TB5|e+>j!NZLR2HJ10sp zvIL(-_)2FG5h?b58DoV+yw9=LYZneuTrHe&argaga(W)0A|;`ZOWf-S7wK1HwKgF` z{$MM7D^%%XSZuEwm+2!J^jc0v%+wAZsr(N={_mk7M_*nRvm&4tkeCnTM?C7rEf=BAlg zo)#>=K9+G>=b!xf0YuWTI0zNI2t^iKsImGLmw1#SgFq~y8Rr~n5)p(dsJicsR^cj9 zXr@Q69S!@pa`PvyvwU1_syV&~&6ST=fEzoZ-t(Ln)Zv?umg!eb=l16&g7wZUrnZX2 znSiy#?O?1~cTI_qjOQmj6qxu6E(kDUUR93b&cTx-|&zStL$6pIxR*)+NUEx*Qnv|Qz*YfN- z88W5{9M!2;M23JEXrFw{EJJBx0i!cgkI7k1sG$8JHJlBjXA{4lknW9rYMzn~Y7KG(<^_XMX*c!F;tB?#_(vLcnf^&SwRsew@n0}veu68?ZR ztQ+DV3q-TxcoSa3Q^G;6bW0Fz?)>6j?(sPdS}y|MGl7!c{Vk8@<`r)0rI z?Xl=D8F46>5z(Ht$VO_R5xEeZM+Cqbp6fz#31EhW!8e7dp;P4f1r1pQrZpzU0F$2S zy|2$V6Sm%1=F1f_?ImCyguDn#;$dRPAwfHoVw_!ynmRYiYY)`n>1tfcxS6`%5t2k( zX4xbYy?-PQOfFRNOSd0l7QF70(7uv828MBs7LF8ZE6Iu-eXSU@f_acAO9NaoaMkqC z{`6v>=|w&e<}dKrW0-a!vR~!7Xn{eHS|Djz1L7*5n%!qO?Ra(aMt7} z4PE}niTYbf(UdLsY2CZlw~kz1Y1`GSw9LP>K&nbwWe!JJbnnE>=N}?i27&c(8fb({X@hH;uLTW;8A_ zm9c6GgAj<9$W+2TVkt6k`;lY1=q+`(KBsdcKvY=NR6o_ta0WVUh42Ay7=rtcMIJ&- z@=%3ow)x3PWqF<97B-O@(x~j}*cec@^B9U0vRU4r4dP7_7BYGJ?~c@AFg8^5WvTOI z;*>mcbuwhslAfTWXzq9PM> zQT1YfrLa8?Q$sH`184$z?VC^yj`~r;!H+N2H|k}*Tzlw0-i^r#4t|lrm*{Vlu|LRh*WG%JS zC2aEpjY=L!Ntc&$t2iSkiJ0qKV?5aH=fj!t+}KS|_Y`lo_J^9>o;a z8+^-)31bn!`XtPp-*PQzd0$#6EcMU9cWQ<*S%JBvgzND&?;R!)W!M_*?LGiKP7XaD zU}i4z6!m&jaug4`A!b1M4;qk!4EhZF?ICTzCU+kkm&YerttW4ptZAf~41FL?m zmnx1axrm{n{1b0)gp2v+T~!plfQTL%N2iF&B_%qJCf68q7G}PXbMA9lZXb%|=}-uj z0(EpjirfB*y42ZZkHiA4mr9Z9Cv=j&0y7a?R(QG#f^;T*VAl=aAssXVYA-I&ify^b zP<3v~^`Pce>6f6uq+Ae@rp6&0BCbwUBhN@fO^h8IY-)F?VU6mp^t7*_G{doK_Ib3e z54uQE*I#)_W8zruTEX?LgOtQX=eLi0dS0$o!Z z{Lu#8(&C17Mz>b;n)^A4XWOPXkn1j_V)r>{N-`O1_{YjW66rMkU*Dl7rCJQX`+Ex z`22K-Q23|+FGiAM-wlQ)9Zg}mI)Q$vY=@CMwztZ%(mJ)?u9clBzy>&-9xLyTYP1udXa;Ayfm{Slp|Q6}DF?dKqJ9W6oiUPyZx_Q6Y`I z2j%PlwrYrwC#aTox*u@ljvT#ZsqxvKHth5d<2iw0SoP=>H>4y^uPNT$ryL){Bu9c7 z?USc~*DTd~P)u6GjWuR#o5(Hc)Im3HvTQ)N6Y9T9T=O@dlm90D%+C>-#%o20gF4tS>Apzanj{mhqCH7({*hvhmT$@&@G*bu)wU`dX0P+E z^}E9T=ET`dt4025>jW2nXc^hbG#h1)$dd2yHHsRGk7boYU~ZLt<){~92v-eG`S-g~ z{<#u!?6KmdyR-QHob0I31@y}@PeOk!fxI|n8#rq}1}#yeNbN|i^a#Qiid;vmY82f& zcnw%zwz5`hbA4|4x8B$N?{-gGNvVkSL(Gj3;7Zm9SjYaow7ZhYQ0bc;rJ)x=(%`&> zqbzSU&tqOE)drn+3TK?;yZL4Qozm%Q^2#aDNyJd~4TtMr8p)c8tdw!iVJf|a+DZzF zaNtA4ahNH=yw~;H5td}V+MKkHso?#uhy`asI6FWyM2=HJve=#*B}@7 z_XoeSsL9~sDJK)a0=&q%$Xnx=eH2fkv>5@8LPLI(?`bYdy;?KG!d0<}-yy;TQ|!<7 zDW?z}Id|xB)W=h!@+uUMB3}N@yVxK+hA7ch>vOn@4I=qQjozxbA{bFD#~7nHGsJ3y z*5~aiOZYTQ+EO}*WP=`U^M-kAXF_4o$)ltgVK=}!em8(7=B?sQCcHGv>YMdNP=*rN zLY=Gs1m;ld;pdV5Pi^%Avoh_*W?db9Cu=C_`a_^$_psXBSDl|ZwO?nr61ofq; z5V`fGSY6DS(y_+~hnPflTtdNW_TLqW@zN=9iabgsg`NnPNeAI%p|ccXZh1gEsp|xv^&|nbBAi8GI@` ziAD=sEvFei^~1aNPvi$$Yp9~nVVZ8{8Ad!egG#+maWN96UE0m?X`_4a;IyH->PG$< zDCDifmQ`%wct%x6Wm8ND0?N-A`M(puN}ij9NnF1vZceg_p^GNH>VpC1>BlKze%1PV z^#8@v7jF(vMM+)w0a`j2V~@>wq|c*PgTi+sd09YFh+#Vl-DrW>X(C}(qH4D8M5x*x zr;u#dgde0Q#{AD_|H@7O`&F3uF}`p9MJo$t6z8SwB2koh1(@VqOccJQy%2X30tPoB z29QD`gd`3~?Bu)GpyyLCExSMIie=0oEVF;k)Eh#|g?(KLs2a(f5#II?07dc}18nFo z^48()^u?}6!TwSLz8A&*Y|-S20hxUg!Vp%dfYVRozKDvtP|F;F(vQb@ar-)=mD0*| zKraF1Vj*4rstsBcbeA?u_s*-Q%$nEtlD7xDx~T+(2?JNy&%4d(ncTpf4C1QPTM4vR`MtbvZLSa$Fe4nXS6@)r+ z5!AYx8pq@PvFou;w>bS#E9Qp|RC-@{-U9OLH49NI5VM?!gnNnsaMr1InYgl&hQayK zE8#qclw$bGQ1b;F=Iu9P`q!0~%$lL^PB0*Oab2gbS@13ZOJJgRn2|}TRvDI-pUJb6 zVr5`mx9cg8J6y*Txa)g>pC>yI4sa27lQK7vkf4Ik+Q0sqh+ z@*)$^tuo29%L?e1e$`h-VhknVXV_^?cCoU>E}$wGab%ThQDZi89ltzOrO&kJK~WkH z8`py&G!T@7u$PLNEj6mT=~Z^n(7Z!YXw@ZI+5153<`Z--^i@k ztn+n@s|KYPf#)X#9;U2O+i3hhA}DZg*6Z@w6tDAXe>vWAC@JnuRm{n%<<4?N&mCCV zbWb z9a@fb{sg*};}Z9Uct)z#4O%Rhk;KnHuK>ZR3Q5+zni%(y@%2bmLiTE}{AV813< z13mJ*(jm##q`PABmL-LO5lU7bM=xp=eNkRY&}k`Hjcq!8`40ire(GoNc+_RI8Nr)!1`h5_Ysqg#TVb(Fd3QG?oTN_BiF?=Gy-cLlx2012d zDXrtL@y9J(Kpd}OeCo!8^q|=M?%fp!Ldp53hJ*EhnrOCXw#+L7XWkKS|NIs4!+^#~ z{>PK7M(U9COe%#Oz-uEem$Xosn5eVTN8EkcwRF^ceXZ=k0z)N04&4>-Th`&vB_kna z?MiQm3D4P~it~)xI&f^3p3m@_6gF)Vclpywub`5GB<|9p#Z+ltd+-gOeZd!XR3V*I zNbFuTjwT5kTgKBla(7=>ef0sYum$3<0>WtmzW5_@N#Rc;RwCYqk`dY* zWIc~>I1dl=4Kzi{g{Vy;Ub*>(k-Zn9eNnqJg8|{ofUkx6az)0aol;VGmHHwl@2-&^ z2$UXc82y(4co1%vJ@slAUBRh=-yY^{?ghLzw6X3>!^P7pbpY6@bm0VRrgu0v3+LAf zFOPtlGJD7I{UfN=NvrNn*-1}yAxBC>9<&QTE)>*HmiVk87DPa<9Qw!pR1 z{jl!a>Zc66vRV6N2FDQr{*^ANw(G4H1{548dzzxSzT}5x#i?&yYK}AG=cn=<`y|*& zCGgo3?yM2}hcYCxVvF2585^tv(hIQu>&B%3s{6ccP=0B=k6r`|J)Q2UtnwXop7%cR z?Ri??!|ji9V7cy-oT1vhP|UoZWcz0Mj>J==7Nl2MAdXkMhgq}lWeN>(>XNrO2*pRp z5IvJ#a|lH_d>Q{y)51i(^sCNM^f|!k2dNJ?qi8Qa8VonpRl0w1g#t=(n)YA&J55O# zuo%}2=8gUqfO%34)<==uUps$KZwQaj`T4O$iBa9ef}=@{D9til-&x2q6;38|{goS& z{>ddIvwYRz&rWi)(({IdoHj*UCLIT#JX!cMb#47f7jf;6MnnoRsPZr7GC6zj4P7!9 zw2>g1hdhY|H}e>A%g9PAcJ>zxnho9oBP+lEsDr4m=Z4~4}w+T2ez#zD)5Bl&{qvQZm zj9n7&>6eFqri@TvjACr?H`=viPb72@$`wv6JcJxxiR>Big!(UtSnV3F)XBd&1 z0yg2;N*Tsx3fOM59ODR!9#LspG7@lX$z73!|L&nQWqs!0(yMR+cdh2F8NFwOwjYJ4 z`m`qnp7VKrSzOuT={I~wnj{Vd(KF766*@0XLig{LgI;Cgd@f&B?S>&GDvS1KWmjHeE(Nw2qB z?%*o%dv4=GH+K6Z@d142f(UD-R>Mb=aR9zgvq{yFY(6>c$d8TF<_Pbdttm|D!s35{VT#8M?D18uHaEC~bt0$HAekk%aUb?yD?n+JZ$0Q8KqqBG72{H}fRi!RF3 zJWwLiTz$l7tXkBtxy?bX-F0?;8+T1CX#ZY CJv9iz=Q|=L&s(MdK|sF0bao<2RWU?B-|O^LSU=~UUF77|#*X)1B70A)u!J7U zw(#w6erz}N6|5Awf0+VJ6A^unAw%pec^3}-THb=VPjQXf{>E@Ik?W)XQ0lz(=A0j& zm)rFR8z$S%Gt#?*qp@{LM9|(_U5WhwLhZmkHxrSe)m8ufj1mlF31rSS5AP7o_1cYJ zjS>S%eyccK5DKwyEwR_!N@bW6>?K;Se394N((BNlZ*^TC^t7B;;DRCn{BEmi-dy4v z709j1M3UP*p*z)|DU`ohx304;cttko@KFYZY*+fdaB4L!fL@5=OJBsUtHKWiVUTpt zst`YBc4prF?{RCOwGL*$q?ms-&e&Yr&mg7S^3uk4FJ!|Q^W6KP$!`w5F(= zPG8T66z?H{hX{ekOo5>Q045#(E;svi$&XfU1|^SX=M9R#|I5HJ{h;^y$07uhG8R=LU1w zrz*Dk7HRs>yQn@2iqfBMC_)jss2UTHdn@Kwv>}0yb>y6YAtP|xuiSoJ9xrlz>Uwaj zi)X-{quDjtzRl7;(z}{Pz=X~1{#wM=UGKoO;c!dfAm4cv?VLN!xoTmgK|EU3aGAGd z(%+%ikm)4%&n*ujyClT{%o3NP&u9OW<$xq#d}4`p|E<6Ht+DW za#Ine9ul|KP+HE6w!hiH6n_D6ll9CB>yc6GsCKh2Q(oSs zq99*;f2ujUfLM>cyI+qabJ`KHnH{zG{qrFLU&qU4EiGR*rZ`Sc(I2JGhaD{Ik>fo) z`z>6QaBu>Wn>LxomI%u*6vnYf^pb%`v667lrYRa_bmH&{3aJlUsvEiK&*ES|$;)J{ zIJ7!HyHAY5%$C8;m}>{RlX5y_C)<@~DGYPJKJ(DK(JHrkMf(-=Fl5`O&u70;(=HCK zBCnbdl?{{MwWG@}XCWh~)QYNDG5q4Pf__@M3Z*fim^mWUOhbZwo8&K67>My4{|&gQ z$Sxv`vj(YVRSA&!m^0CZ3gK5*Kb3@R{r=hq-gSp4rMP~J=Cqvz zHw!=Q=k}iH!Y!3zF=)Xx%mFTlZjQ(Tv3Fcgm&;TUKP&B@A~T&}grnwX+M7@84{Iu( zP-8%a6t_9)4+ADXAk+%cFGgNQ*&gV78eNMUEWV{7(B!@=HLdILmHNmg%~$kx{5V8& z!-~HzvNWSR9ZPsy5D{&NxTb0wh3*oaXWqt-SP3BesYFN^C(0NbLHZ8Jrqkf;^#hJneu=&HFr$;npu(+V_dl#< z^OSN^60w)FHv&LB?-$|J+1v<1d=U`Q7QV~sR4*--mr7amGVabyuMZ9J8Zeo=cy{%E z+LT%(N0&Gnn35MSfMOPx-Kst`z1lRD*P~=302JM=jWVB!*Gw6ni?-DdlE#VyPxH_l z0>MOrzl~HQ1Odb9l2LAo?aj7qzI}DTrn%e=4a|wEDFEq-Z-AthJrwQIM?yr${h!dx zF}L(0rG41Ot8jYR2%P)Da{B8oq{(--jR}s#L5p)|)v~~B(!l409*hcAr8;_1(lY|?s1?pksc*47w)}}&jn9X;A5GBP`KG_OaxM1h_4K@NJ!_5)8d+b zoq%TRhmN=#rA4tXDI1&vjppdnqb3MH1{pX8FEv=bZpQi;Wu-31da1 zBe8&kaU=~+<*3tV=`X9%ycv6H+sWcH!+<9XM1k*8V4ABBB5oUzLHmWs8^6oqCvj(M zI^@P9>hMHlpvthm<{KXDfYsBGt1LsJM#XWm3v zKbbsI&HFfe80t}n9|Z;KkAhq=W&w6e7xqZZ#Mf!zSUL4@L=w#VlZ;vB)3!vG^|0RB zOk4k6(790DcsHd;);H&Q#5G(p5S*g`eU~aJRRn&jqRMi#XN-zhIJWAz?D|25VO++{ zjkID>Z<7yt!&xXwtR2mAaYp7L&xh7)hgyu-M8PCMO*d#8XAw=JC!QJ{R}vAR9rX+! z`*X|qRz2|0nP190gsRVE+QbApxzOgC5tp|mW+)P8e)6`e*G|*SQX0wWm=K%=%bRPE zP=`iKhP?^nf|@aZPz0j&=OaRe1Sx2WNg!rxl7s?3?s+b|p4L!DH1#Z}{zgg}Fm10- zx%qq%N;PJr%3m9oH#%E_fiz+J(0PT%FD!+Sik3}AXcKOTU5v*=!XsXV$UZh&9RQU~ zjf)0i(wM+T`e`MNYTe!%o|UgL#FEOpt7v6>{OL_nw8zn|pFyXsoCtT&e^a#qVp{1StpH#y>#mm*}82ZexAhac#*0vOqHgDRFv~PFB zg+ckeG%A9wU{_1i@Bi`0ACYf?ao~*Kz4?6f1B4zw_+Ykx@qj&hn?-+-0|A`3-ZROL zbp2>TM2BOpOBq-$rHV!h{$@Z4a^UIBjaD)L`paoQH2oL4QYgJx-&OA9CBB9ckcW9B z6q~T{aB?Ev3zEIpM7fmPU2E37h?(q#zTyL=S14e`b0z~zXix(8snHD5X1fmw_KQbC z=RawI1Qt*kEQfrZ8Wofyt5f(El`b7Z#SkJufNQG+7#P>{y1t_25UT#>AJDZrn|HQe zY*Rdb;9wNjD(k(zTV#qUW;#@M@Cdt&K=h;qk_>OCRl=J&YG{nh-nl!jXpMnrx&?KU zgolijsuhF)73z6iXL{J$W8U3iw{?MdQFG8Sf)lg#Dnp)%HDX!1#&K(p2ouVBad+2^ z#|gC>?GAzcG4Hur*eM{y?xu}u)5QEZOBnb}nQ)^+G!wp2#*y@o?cu#-3SMn8%ik$H zuoGJYkSBV8FOsbdy^S%wgnpU!!B|J_8gh-B3j~JqdBsiBSpDg{_rPmz@m<)#Ma4dv zRm7THsa$A4vckdu@G~Ujof0Yh|FiY4z5G_ifWM{|^k{gkCBHlunw$kDKLQ}HcO_-u zjnh@cq8ThUv2RZHW_)GmG-@v@+l(!3@aw(oC#k1ZPXD+4PJzTb)GRQxZ!crQ%Fn1#-?dEqc(e|NJ*n>6DqDjT;FF;4 zUY}!i7g1@m_4-FEGj>sVCK`m5;-h?AVbBm|i5)9-BSDvRw{0zDc5I!i_Gzsu+TYoWzzmJ1jQOXBWP zOD4%Lex?o*8c%JP49JgDFXQzluuHLs-+9psnos|?k`CY1`&V!KKx7{yGDCG-$UDhh zkk81K9#IqhYL~SR&7S~T_0fKeUCoj!%DJ)24qf+#`i!DBPsA^=_QF08t;GxbU7!=6 zu#N!Z<91iQB`IxntIz$>wB6!?U{Bc#DPRR4n z@q_JqG&T{AVSw$uDC6MfO>=mL#$}F+P?Afj$ektUwPJk4aCmVhADaS%gA9DII%TIP zI8ze2r>c|TyN_u-QB)P{a-VaJEF`#LLjEwfuLq9n9M75s95oCl+Z*X2S6U6%cO)-s5G5GSBixikSijt6&dwdO=geEPg3#tr1U z#O#!-e|7F7Y_Ma%VU zNvHA-sBBDaiyI&uk7?ExmB6_5r}m`YLn{gqjrLP#$#&iu?zDa41rIF;^$HL0|BiY5 z7}H$wz61o(H^v@{h%c72!&YlzWF}LBY}eSrFS|q!jl_>Ue6h^2|Mbob99Dnbba0 zV2%CmriE}|>wK6N#?=}4<<_{pQBemBhFq`Zh+mB3<Pr$9+vmj)O_>=G`p0Wwed@o)ZqL8W&RzYOcmu(8;_(lF@!ob*`9SWKZ$qLeG zD%NUF2biBK+)yRHSSrtkrjm!j`e07lb!ku}0}P6}2pSdaXhmRBlIhG~V^x5W zcmm-int!*PrI7)`@nNEKXpRK>3kUr6bM*C+y)BfHyCk@(qRG8F*zMs!jc=4hGS@6+ z#T!R@1P5cU<<`P{$VkWjL~wl>$GRA_R{W0i_ZeFg*2f&B76Huc>kc+;+8k%|Zg=9K&h<$@{q)INVRL1lv_9L~PElY=zfe((_pB@_9qqK@88NqZNs6E=cs zRg|1iU=r-1YGwgEDws9V?%T2M4R&CivwJ0yF?VHQCJaX!GrDx3HC3cKwNq+Xo!MPMkx#gRLO z{n?By0X;|HknjgPo(aj$a-#`CiTXcL0WBj>o=qX?Xig>DBymX$-B4+I-^zVnxt7E~ zM1IHy?2kK2Oez&k@{@b)euC|pFJ>`7>Yma>Fx%%J6*P|X$J~h#Vn~RXO$gM+s zT)D|s1npI-I_Z&Mmb2K^b%>U8&>#GufI8j#a%@z```;m&mb_ZvGJ~%PxKy;*BEv@1 z6ETsD+L9d};=Cfd^%{5w7{nntCZ>5#_=ogIa&y%YYs7k_&AXPt2y7tcp}sZqyZvO& z#|1y&`KuX5#>~@WxEIAs6r1Yu2#?G^uk63l=mY_!3f20yip0DHI{3B6kaP zEXl!<;9Udbm*3yhy7EcgVEL@VnDAL1G~|#7Vt?7YFXrSHnc2|8cy}KT1cNC6Fw3;L zqH=%=Fca69}F6Q8FyOE)SOw-1&S{k5rWCHzw;m~E-TmAAOuLtylA zcIA=xF8C?qJFV^Ov3g)B%dLacz4X^=uOT=qJ)3t7%OWgx6GL92{UdeGsBU^Y=pApZ z#IwCuGSwd77E9o=b`NmiV6Gw)oC&@9F;9MB;Xw{*US8(;e!*WeXpC}Se8Oz0!0YP6 zblm8OJ%=M9Rkxi@sJ)%Na+~(7w`?_h?`Ms&81HytgyJdY(G!a1sy?or3i>$Q`Wo3l zii-(bxg`g0Ky5!1I;!0)6eCgjp4NCIQ{Dfz+N)rOc?Vx}0p&S;jd>$m>KtSGb34nC zXg<*KewLR-##5rh54l7njpsq}c-hX;y{T-uM>libeH{}hcgz-_~eK)9hT0}|B8H4UzC)F535=mixIn;)y7JA?yst z+#EvMimx`CL+k zC;U`hZ~f!#{JNg=c7A4a%UJr$Q=+Kl*ObNqh1+eOx4HzW-B{}^W}_`C@S z=-#Rp*H=SZ`WVU;n(@7J(8KZd2Tr`!t3Bz~v=(AyY>xp6G_*qclY*55*v z2tfhrPA3_imwiob<_5vdLO|-=4T^a5H1*k(nRfLTG`7!$E(gulWl-1nc-N0sNh{mtFyN5q2ZGE;kdVt5vW%!!9u%uJ%l6>TYU`}a+i{#w&)vJjn>cn06DWpoL zEq62@L7>OPqQpF3RsszDn7L?j(XoA>($L`)965ZiVT;=sf!PW~fG}C;r0(N+KE>wz zuWB`JI?{!Vxoy)v>~#L8hM_RMHL%?#yiDyQV4gr5RdxWHDo89y^RZYLsQcd$^d(d_ zlb2eMzBZ{OHll~xZ1o-nD5ArkW~e>w&{1+6kx4!9TBx61Y0Z}$dhVQ#Ri-Q*h1GTu zV_Kb-`ATvj7P=&hqo!4q^&uh^)Tu0o(=pCTAOewg&hH-W^kcf+SJ1=P5`<|WgnHSn{iCLhXsD4-iH8~Gdaw}*`(~#Iu0NH zj%H!{&$P-M6nvmB%d@khzVR((netq2rsGr=e5BZO$5YpI7}7+Z*Z8Eg0KnRU_~tR(EeGy zT!uK%7oB9b0KQrH93ZKyzqmREuok%aTz>op_a1YL??4H1h8?oh*^(jPo zsgk5Y?WiyeoyN2#DXzuxRAV0-Y+rwG?Twk)y#I6pKnG%sS6o{F^izv&gu1s)yij8_ z$sjgecJo*lHCLl`&SYVsIo|*$P3{)q9bHSLfr1rGP*9;TbqH~RGzMO;_)Ab<<&C!Q zRHP?FtOq>a9#=*wb*x8F!yz%3w0x*>A}0w=qfBW@SvCk6g5U%XkX;?kk1!75hPg^F zF=*bJ%n~obX))LI?hmMB!2^k8^k>*d)wzfymgYWKz@u*(C))yc1J(WqsNwj#+%I(g z)d8Ro(yR_|R>LjlYuhX3q+|!(}Wc@yTU)Y)P!kd?MV~SP3hfv{r zxRET`V0Cm^ZJzHCAPi}2sB?ao1A{eph1f(p<+2UTV(-(z5Ix2o7r`Es9=t7y2fj)n z>Ic-b5b$?J(8YN>w`6o27gQ6k3Xf}+?$dDUAl4t5>6Sl!s-wHdQn*Ahc|}jPQs=R7 zsnPrJMQ88{$zuciab!(qJ&bodmwH>C3asu7J>fHSXvD0~jaca@{Zi zG?&AkW(g<$M?N;=&B}d+){kTyI}y_WCMJ;k7}Fy2yQ{f|zm1Tg zrw5*x>1$A7Lu&?uA=h<2toBtwJD}e*(3cnEseO*ExfA>@?j7XWGR2#$E>LjRqU zNSBi@^(qGUYZ=jBu@J~pm~Ne)#BH3K2k`%c?&`n;a-4LxhCgsM&%nHqHaQv*7!#EVckVlId6D)X{zpR*wjL(JDnIcNPC{+HwmtVPB5! z%KvsU%Up4kw(Fx*_KG-e)L<0rA*iw)>C%}QB)wN&Q&{Ty*2sn%1%s*PyTKSX(k@h9 z%ycI{0&Om@#3F`FQA$uKHLD2rbvO$2iVT~vS5Uzh=>p*m_Adn}Y9FhHO1%|CbRet9 zSF>~pK;+WD0|BvwIhbcP|B~oY^Q!P)Vq3?*G(3@Kb+NtV^Sr^h1)=xr^(9ZGzyx5`nrBti-a6Sp`Z8rR)B zBGnI;p;U`V|2&l8V&C$ln`*+@Y1TRo%T9%U@n+EGw0d#iY^JQy1W>&&*0_@=Nrz({ zkI@qw`}UW(MA6D)R9<=RgL$L0@rxkY{0-J0Z^-HPk;()tz^u2M@75$;6?72u+{xo9 z1`Xp1sycu?(%e%lD9t`-@oL6NF6n&Tlt6@Be*|zc@N*yJmBe+TK0A!^qL6LcG~y*F z_t-_wVROj%)eHEd^h}%zI*)xPYI|)o*7R1^CLr^3#(U{(_p>mHZB#%Bjl{9O*r5hhO6st4(kTwby^ z#~2%o$I>xJ+$Mt6y$Ick)Zya8+msUtWZ~eTO4(%}wUN|2KmqX@+&YR;dz1W^$jSd+ z^8nK$dCNa1$xlJ#=wuu$=&ldUP&SX@zm^x)`F>+b4LNWjljX$2?!lv^PIX(ecEGH( z%7U_H0?-K}Vkk0gY0Avdt~NniU8N|1$F0h(DejZ)HC{Vrj1p2jPwR#r+^#K?p}BcG zaVbQgD+lj0T2b-r>)MGN2}qzjnxuY|ikq;BAAhiAnG7#R;s(Z>Vfq7udbcMG#J$Qa zH43@5=5I~)qG!2M11<{e1a4c63N$}+z^^YE_sE>d3Dm&=ApEd%`xm2PFD46v+_Ep* z;_fXyRl6i1xDHQy(N9sBE0`%M6P;V&3KJHde>Wmf<^=>hyNN$smmgK-K)%Te{cxs` zY;$)bnoUhw4@{Ciu7?~vfTiV&>YP$v`@Vstag)a9PWaXTga+&YnG?JrJN|zB^T3e` z99C8`53FJKbRTPVssTNt=|;!@j6@Qn0U?g`6WZb&&%9K_N!?)( zsoyvZH#fqtI4Go`B#zk;a_B%JUaC%%N_0yH8+2IZp-^3xm}fq6bd50q**n}ogYq&E%fH_D&Lv}(k;@F*o$UZ= zK{A9~+@hsoQN$^l7ridSfeE{HW~Iu#E)Q`gKx4+&JJ^k>xTJop<^!xD#!m!<36xTR-b3*7)u;+;WeeU6!8zd z+|6}gwucfu%^5L{Y-Uayz|HmSt)0Riy1R=FSs~{K(nH-gSNRqw10wAk%fQ7g5k=&Y z-dw@whVk=O#+BU&CFax(5%4-x2Y=meE2@p!=iD zxQwBF<=8kmHv6J75tAj`JROJw%K+{<%Un{T~%!sxD66Fcft= z;&{V2;*jwr&Z{GVWU;#p#Q|vh7SPCCs5drl03(E$i7iK zz&m${(k<293mWWXFJanidH`xTbLDEtviKA92TrJulXZ@b(&<3w%r#v6)b+zgyKzv@ za_%e@(*qMmwhg6W$D_^LYYYCQ{#oYkgGKYqvNOG~-vjiEDsk)w(#SWQVxv z5$e{MKSz|KhYxG(T`IVf~Fi<(_qnJonX93ItZ$$09ptPe`3nMyt49-?bQG02iN|ni9^Jy&`VYWCO-c?^p3)8*+T0hx|g{ zL}rlgioxhaHhYAE<9s4k)GsoIeRN3NM8^XzeYFNr_#Y(JVvA(f@u^DgNDk3@EvwgG zlbs@6_J!mj_1J4l0mrlA;j-Z-ar{G`^hf>coOsE~?S>Z$N7EDenfYzC6YXYUibGq+ zp2cl$84c=+nLtXrFlBA_2>kgX@p5!HA>{hBh`ZT=VtOcj`((kB0xHTua??trnc8Pa zT~9%PqdCe3Y$yTy7idqc$Z3ZDjFZ#O=^w6mDoj@>);?LgRnhs5>)_COV*@_lPkh3G z+c+QO$S-|wSGn0v87vWX#)AlOHWk#;JKk$#twid=`{S z7>JjZNANyWR+_*VWU@!ck$RPING1U^%jQ zf@uwiRWf$N1*a29{}&|eX+~rKg1~5T4AI{t+J{KUV8KC6?Jc;)h>iCvJ~=^nWtYK* zQdz@jljP(|3>Z^*ut5wl#qbar>KY>+&H_mpz$c^3C#z$M;vzAonsEawOi7dyb=$paex;wX9JvE*AeUHe z9Oy5>vb|nKHICD8*6wIR!6ExDCx@mjzM36W{a21t%Zz)+@fvLz=sar zN`~;hrF!+Xg{eh#vW$rzw)luqE{ySxuZyf3L?eN}?k~4^ZdbKR+pZId@a{+^y6L>` zYbA@Ph+Jis0)fcWvY`0@znQ_XJWr3Gi3YNw(?csx>8J)`ujXMDQ^0D*^C?e$WJjFNwDi%~QZUqM%18sfghD4w%V@-i@q8sMZg^i27p z_!g{c$Y20mu11_hK1kv)9_>@|r>>=(BGx=&AfQJ#Io$8b;xM^DXE4@Y=nh^gG2P1K z22sbAR-_6;O(bQ1(r>cg!VMc;>yU@|nBlLI&j@gpvpEIzQu2}*U1dM;1;37RWOK?n zaR+{-k;aaC=B1WqW+v?*41ASTh`Ne5QiewD|7D`GqV;`Z(9Iyo><$R-sE+u1M$@{~ zgqgZY;F&2DCFwUA@-U#9!;$Ad1z~6 zpE5tUJ#Z`y1jQQD>44<5|vkj~eUCQA00NdP3<@ZTq$2D;_&@l%Cc1F{6_vFhJbn z6^#Quf>;J)SGw+vz2=K`l)^<)l9xn{{I*JTX&vJm2t3^*)*(6%uU2sA9U{ah5G?q({-LD ziocOW4?`m5sr|eyC3j|7vT}txZnH-yYatSQ#JjFu4gR!sz0v!D`5npF*AQ}t5SEOq zw>=w}6e4mLwXoGDUDD{(OA465Mw^DQa^SG5>;WTH86ue!Cyzzw^dkJe-Rxc8)OIi& znPryKcbP;=GqJ~78mW_}DnU_e^W!gfb=?!Kln}Ew2=KU$PZ5MZ5$apBhXN?n3KGlR z5%j=lP(#pZ#uGKsWk*0-Td-Gr2g|))Ze9x&S#xF`#|;tJf-S+w5l4Xvoa0ZW zaxxSK7&?I7i@rzI!&TY~rL?!+s(oR$m76)GEIV7M^ULBGB+TyrBc?*@?!)RUeCcR` z^a;RQo5eC@^`?_Jh1&Qp!hN+PbCmWwY@2P-HQPsQw>EtWrDHVyz++?jS2Shd2(1tV zBUgLiw8E{5s_Z$ET2O=*ND_GxeE_25usU05^^*5{7!tkLMPizzD z$0vMvY_Qc(DgU(Hfx}|c>U9-iX__{42c0?o;wd_hb2W92MMt>0;`eaASaF>+oqIB> zm-ml?1M7`pscQ-j_f$G`Cx$`y9ef;F_r!-1sF&jn?yJWfW6`$vBy>M1P~#3fWrx;C zKa-|nLU;uHu}u=3EuDX5CyfHloZzMt5F7WgQD?$wIrCUN|JTg02{)xMB`~zf{Gb?_ z`h`G}WKBsKuh(UTv4o|y0JHqB{0I#$55%hQ$Pw&idAW(kO>VZ1AsQFw;c*2MZ(pkR z`SfpxxuuPWc*#rK7EVHR^%5SKr;7z{O^df6cQCbb|`GQ|<6FMAx;1g}VtN z9i#;Ek22`;tq<+hxSLV?w;2kZZ@xWyOS4+)w|C$>O9{`$cOvEu=mhm=B|j&XY*$j1uz5| zg1t}>+}zf37Qs&`?+|}Fvu!$N>qU;2su<#M5zzINX z(tlG}?)yt{Xj@XYW*RsLfvofo{mBZ zhTvG_$&GMD!W9~v-LDT|zRrkwd1m^yd1!9Q5eM}cv-^1l@8jmIK?skLX3!jap)_+` za|#&zQWn%^K3!$j!(yMK(If2>WNIvcHe)IIi=Q0YI5Qz6#XtHfrSs7Lt2<-+8s2zZ z^0WXRLi;nK&zHA2Y3vZ@2U?f3ifLB1hd-3=A?BpeVRvRNFYArbbVe`1+;@}Mix5b4 zr_-~?%_x8av=S=ww1N37IOKWbozC^UndZaF395vS&g$u`Fg<*@1fe0d^^C#sskFvy z9&$9!JRKMIY%-^blT$q2ty2V2Ex>XWM9@Z{q?Lf0p3Um z?$kGim-ukWj1}Sf0kZ#7yerbJhf@*%p>6no+E#=6?_|~5U-2ghO8*_%9FjgH95ui2 zmLG8<)owb*!Gi}fXJ1w2XT=wzH2+Xt3B_DdfM_{t8jb`>YEf{g7Y+|MfbMdy0VI-Av zv-_Uqf(oTEA%SZVQFH$EgSqPG+3Kr$07!C6hBf)smIj~?msfZv*@(|UUAR_JZ0BDxdY9{YU6!X z$HK8{k}|SCX0Br=na2ko&mV6*yPxBov(wD%(>v`1e_QNm_IHWkF8MoO! z(KG`9f;{JU03bRlo7fC^@4!w*=q7^|MV|`+rhAFTtr(BN3uSoi$^G<%Hw|cciy$Ca zVYE|kMr{ekIILRp)0X3)bzl%8weYukq)D{Yq=h#E!n=nlWHj_2Qe{h(;_~ojCv1Uw*I@k zASZ?5W~VJK%YxcmL_je_{Cfk=c!SgA&)?u3RhGS>BEU-t|3j3RQChdJc2iD5@DRm@O7~(~3=6xaO7go(pM>z=p{$z@orY zcUdBv=1v37py9BuKUWC(Y&yW2 zTSXIESlq4gRHAX{sN2(Oeqtcaz-+BR{x>R+F4W9Sxuo7%BIM&`fZpraZ4({)s&9`x zLEumV_c6xF(xY)~KX-B9{&zUJ)d@G)FlXnB z;2FUahtfQv2hrE!&$%hK_Kf;V6V|(U1-^PP-tdShE^4FcS}w$cyZ%pW7fIMjCY0 ziw-9hgiKSemyx5S&eV2!szkG>fdL=Gub0d8E8vIAgT#)zd}O^_X@8pce6}Vi??xxu zD44I$K1bgIgYGVJ9WkXM$(1TFqNz8>@SHT5TejsE84=_r`u6diG?2pr4&ai{&Z!>1jP*?-+F z^aH#F`wrI$eM+VdV^bGQzR4XHmv!Hf$X@fqp4r>cIh4)JEF_tk2*T>Hx)fK1I8slU zBM|~pRVZT?8M*$GGF%Yq{jnbY>h>t+@Pxtf}&MA0U62cohb#jR#jS^#Z-6v6fn*I z+s_hq*C~6hQT3S}h;}{YUoyOn&WEKMkl(0fZQ;=HBQcbMnrV6x63g5y0Pu-KVWipq zr<;OTp^xLB4e2=6x-@%wAIT;%{ksj2X=oV2QZu#D<{6`;hist4CJ<$E$!%!{&9)up znIv~x5h|ON&Vhs~M5T4H!d{_3VuopjSF2wv9uD>&oI*VtV{quQ7QMi_v_o6~>9Uzg zqytl#UgE|PD*yQGH$UzT8m^--Dga-AcF^@$^;56e(KX5|vz+3;RI+h7 z&+p~9%2!yLPm*`f+{)Q&e}*N{*7B)ry0+swPko?qH0;6X;?}WBG{DGp!=}ZkeZI*F zd-K0Ym}yic;4*wkBre!aC@7lSoycncE(f3cJ{e)jHd1YcgsZQ!G3zI(N~1liYSHI4U0LiXU0&Oe50Y!8+-5UW_LcFMKeZf!80JfvM_ST%6#X z=_v`AdePPVE_8JO_&(T~_7m(IIK)|oPl&-*Z_~q_>|$t9(^lg@|A4L)9J9IQ{sLi) z>%AF^d?>vravaJ8u$p(fMEN2%OkU% ztJ`hkHjxS#N)qBn9>R`aWlvuJz6zdjgE=*Ygh3L)JX0qMYgW?!k_6MZ?MZ8<>}&6iq;-yRXL8Qk2ik_OUvXph*a_iZLB}i&ZO( zscA}6pG}!+NsDgKk4#Br<32gn8-a zhdNC-;U02%>xdYZDFHxs{6A1I*Yl9XPb#r5_)tJlsROA2=;Oa6&G4Bsfq7D{OcCpZ zK(EqVc@OM){CveghP5IAd|Tljx-wz*QK3aH=S$NQ+*6c6ZdnNu7yBV(hb^~2?d;*( zi-}5^F_6ZWnqa1AJn8qLf!~TLirDzE^`|XPTu4|m+{#8jdSiG`ZjEthd0w`H6ykAR z!6uI64J$Yvx}TG#h=Dio`^f=3f^6`)9mRRU8F*kc9iPgS_t@<^t{m~WCx|}t#xC|P z=`LwU(G>Z1N=k4j$-TpG>|)=Y_wi6|uL+2O6SrVDez5BY=`)-O=~6|46!P$pPyR~< ztFx^Di)v4>pc}3#S#X!z4$cjy@Fi~Rg*zaR^Jbd-w|iKSyGaZNd;%yPCD9a?vQGRn z=U=eyi4H-GNTgDU1J?+`p3c}a$rzX69#U5SL0t8VO8QTJOPgY=iU^O+$dDM69uEAU z(UFt2ml7((zWz-X^MK_BYgV9!sZ-C4VUmC#(G+EH^%*N!W3n9_LnJV+c`TAS4hG(Q zY!2FR`}1O=E`;JE)VomC0g~igntOlXX2^mQdymU2FKNz}Ybs5Cnhg?L#o0w1yT=+1 zYU=)Ez+wlZ2}81(x{7{!WmI9?wgt-$TT|4NDBHoj+@R81oQ(n;$yBWh!I)d)o?cX(o0CPeCM(fTJM>PxGIctyirzrl@hT4d!>sg3 zm;85DLogDIP87#<1>bGMzO7OYnj>BbClN1fflQ0R4+A#vNHF%+liYBrQ_it558|UG zseIOkxcy2jYeipfvcbb>)s+wT8YU0yZd$^qr#GuB~0a0bPB)vu;6yJ$RzVt7O ztIu-wRw~+Cq6T$sOrK)xJ(uSQs4B(8CV{bIbc z^e^Yw;lDM{81*uMrht!HM(Z3d8vEuvVn9@RKjLlg*D?cBxyHk*=W#!#druw}R#y5) zgOfa&TXE3$!R-mV;hTZ_!&5&aT>&zpvFtxM5YPzBhMp6^9Mb zevYu*s&fxPP+OVmHp}uIN&aQEi#0;81q9_$7{nEh!3BM;Xamb3U`Qh>gjdzsS3@iZ zg=)oL9iSQN-@Sp*uO|`B0|4KVVwu74i0MC&3t)2bxNE>Svaap_kf5yTV-1uDtH69% zs|z#a5aPDEtN=}37>5)ES+5<_`>`{ghw?+_MUUnuFPs0Gcgaq1c?lGh=tOTE9p z5mztcTmXABg#WQ^VW8iD==x>9sRp!d63Kx)1sn$`y^z}8$E{j<@L8%P;Y<%l`H2Id z=)q#>QUVc{Ahu~;0EkO0LSt7ur~cbx^PjD@Kv4_r0R8)OHxfUWZKi(r z7V<{a&GZqobc6A-ychhO_#J1}3~$q=Zd$2jn;jRU_=r#{@cx= zE!uDsE7;sw3=;Hejmqt#!&){v20e>-aNQ27`98)=mzT%r?Lst=M=Kf;Uy$X%?ff) zYqd3N%$tGGb+b2|V60Emo-=SK93!+92%PJPr7Jpil*;XD7C>r=TcuQhwGkJ3=!yLPpt zmWCZB3G>?76y4h&I)OfEJSxEtWj|AO8nx|!M}dhFgx5doxT#kBXq1y5;O}JrV@LF( z;D1IIG-mdVTS2#bCi+s_Wi;l;w=YHbXP@eI2trt?%Gc|p8;g}fR2>T|{Fa;kV?3qP_8A2m5vO5> zC}h{LcQwB#;#}$N)t^y1$<>E9a({3%q~9 zRbCqaGW_U$4>*UngA2@rN7DS5HXqIJKrDz`(C=(XBd`W3DBkB&UC?(jr# z#a_(~jbPD!y%N~=^7(~JE4W^UDvBFzKk20FZ}&Pcm&JgDTu(ImC;AXy?9%6%Gp|GQ z%OrR-SALz0D6^syJXFOi$%iU!x!3GG%`EWh$yd_M;2e?*_HZDP-}-dm8f?}OvopCK zyQqh)9yHZ7)L_2zboJIGC;JC|HK<2AAkOH8sR|c|xb#1kF$XU28O_dVa|5-%(>vS| z8DtVNkG`9_xf*SWGocU$)njqgI-<`TSTL~r?UKDn$?_^jj{qs76VK&aaWI@C|1C~# zts6Pe*Ml^t`}aB3UZu-S3$F|6#1F^8&i1t|G|%|wHMLBl!c8eb*J2-JpHI%NT4fwt zF{_~^FHQMCJl8tbt!b6Gw1)Z^ii44W<-UVy$l?yhhaxr+g{s?)AU-+HmcN2soz}~d7!{f^o zF3fnCJe<9h2S$|Y}o zrb{e(JgRj&uA%=rQ*LWy?HLMYbUG+OoDvU+bLcp16#YGaEnNS4^ zLyJpYxx_b}&Rr&?_wAT;uK>!q8{pUe0L80 zS<+=#{d}KyT%G3%pxQBQ%HT?x*c@Jc@p)~9!vj^oMobH&UC!}?@0mS_oEQstnsVbp zup|blaj#((pSxRk{MD=BTn|?g;JUA{@cn z$t6X}lQ|MU@(+X)37g(b>{@K>qCG$xV9p#BvRcveIyaaGLU4it^IhiRJ(J)vZ{(cM zj6=(D43vx8cM(RXAs3dvq)rafDC=361BaUCOs%gMHMw%?U$DC)0zLA+m8<^--WJCK z34ulA5HD`jYrPB+j67sJY9OCLQ*=Qqm z;k?=wrsDh_WGSikaYZ^7(BTU7??L1#=Ts3ERN$`#v99O|B?!|8U^b?M%-x5-zGY+; z-GMKZQuj8&!9)S#N&+%2$sJFL?YwR3l&XW@g$EB}!lKXc@w`6vBnzi%;7h+zjmMjQ ztF9Y{-FZTj;T`|(Dh_egFO*Baq+qO;d7Lc;ncE=Xlurp?D@~7i6yo=e1e{3(b8C3q z+%;#WCqgupUrkk&A+20HFa1pH{q|qB{1XjW>cj-%zz~z|Y$liTa+?=m^9 zbf6>knIRVdiuVGxdmwNk|4!Ar+Pzxgb2ZyAnSZ%rk0SSPR7or)jvX|L*Y8A=ca=qz z63R7D@&4+FIPvQschbb$s`vo1&rIfo(Ycc5{%WspBql8wAI`=`(!3K@l@i`sg1-zBWrQ9#GcEa{RdrewOcQj2VE-7(5u^d|!fARvUjn1FAXzh@w^L?Pux_nSIg zWX%YMfTtH3WRiV%a66Ib~<8J2fZ`JcGEPBb0kax+bWND6aMqkmxzJwT?eZ zM7ADqI@XwnKOSe@IKeMk$1drXZ?H}QcPp((76Q%0xR4rcb?N8Ol)KH@&Z%}OuxBXB zi1F*y4+%oBHj)t6+2<^%&^{N6$&3jW-&%OxLMv^H5{%8mC=WdeT2Y+$v?!Dh*n_4( zfY$SQa5Gah4yv8H@hUgpuO&q9(Dlk{rdT0%qb4x1i+;Lk#g@=`la#0uymgNB=jUi0m76JUgvE=rQiyMxO#J%Sri` z28a8FUy4C%%Y58Jx6RQAXp5@p;3I zxhPL?+tv-%v}B<;%_pnr>A%Qp_&Xww%;8_>IhfD@`jgOm^2SR7JDH4KNYQ+8=TGW> z@xL&;Q(woev@^=n|7)DXZ5Eg6!voyL5Wy$oQfy?T{Wcz9ykHje_gTauzWXV z&&uex11YWdGhwic`l`Q*bKn?k2iPGcB!t{B*%=3ffGFx&Wm)<~%v(+8p4rP8z;eD) zU%O72tCui|JFgxNf&MC;zp>s3XXguGLV33t!)MtyXm##dsVn}b#WL0k-BU$nq#6z+ z|6zz(gXWMO7{zbdaY;!T)no=7@P6wfn?yvF!)E;f3VgtXIEnYIlMk^Ntc(gi;7bdh zr#6mEASS#&pj`#hxWQ4s_ugkPI{xQ2%1(39@a2ax>w}mdWIm4Vw@VgS`-syy_CJ{! z&^xgcLE|1xm6`>T!j7ek)er=i3y5m?7dAuh*$B>M6BP>6IC(N+lz5JjcFKE6JfmDF z^a2rx5wWOl6aFe$?~fiSgDi7^zf{b&4>{LJu+(6-4K4SH#(f) zyM1&k0MgJaeV$0CFZSuB1{@)hG`OsyCHBzotzj{-u%@+RmJA3{d)(iRk^$;v+LBi7 z7GmiS$rXgCmnIvBd2X0)pZ@}z0Lz=Px%=4m?~CTy@Z>>k57yN_@lN3R#K>Sa$395S zExi0O=igl@Yp`8^J#+}+g)`SoSTI=)B#6-@rE(Y6Wh04ABW*v(E_W5aM~LGr!xp?X z|C7t1CMu18b@DA32Cw9+&v4F1JeR1EzN@0<(^IpVyJgsd;yJ%CfW z*?ZV3uPcQ2r=leTKXTR$arfX-f)2)&8AN9s;D`Rt@dJ%p#vD)L%n&m@Y0r2UPkt!f zMP+MI=0J@yw-AKveEqRVNA7d`gFO3NpbHp6#KDi>HwoGnj)jk{?%8pf&@W8zmZMK6 zF$&*=_w`l99>-X~RVsDpuJfLrYX`+>d93NEeO}Px3(8ltk$p91?0;c)EUW#x)!#l~ zRl78D=m&gbTZW)r`hI^rK^4@FBX^ZOX@@*C;`KXkj%Q7$nP7k$_iXkRp4sV?0aq5s zbw(A0pF~E^x|COjDvZv0Qu8XZb^)>#JnLo{LWg>Thw{j z>e%?I&%$#T#9fDjRktT6rfqj3!O+6mh<5<=-Zw|R#-J0n4wu8s2~J$Vao}c1G}m*) zasDAzQLH8$Nt!r#eUoldqnK;(Fc1ku*+A?x>0wgS^u{RRv$YW?;v2}ejY@b=6VuRW z`(+74gHb>|5U@6mxMhMUq8s*jI90y$CTId_zsG?kIK1nQy@y_r{Pj|32}$29t=Xd( zq93`sv8+mT&7YoJgqo~n!B<&5!rK8v{pxOsbS$|O%?|NMMth;%-+*+K#p(QHgucLR zgYJRuC_zGM*>d?Eaiwggy`QH5l^A45C|lcQ4xl~ZHFe%?rtnYKC{|%v4aM#?N(>^| zUhr$ptm5qu^!f@zuUjR~w6B&TRHRN5Wm@Rp`K4HVUCSCQ37pe#DIo2%8_|6vX`A)r zAFoFUjNKM1mQ6V%3HX;KjXY`KFVlC;N<%6TZ)hYc6eVp9C}sEZ9-apCVIS+s@6U^= zPa!(yHL>e5L)zb~V;(3>xndakx0slTX#S`;61Yz9UuR%{gEakVWwj!6Lk-*L*b2z% zmo@XM_wgiFz_363ZwK@SxT{o-FH0H7XXCn2KkH5KS5*Vf4C0PqaX2R-3%Wi$rgoSe zwzRHsetge{v4s;u)2`vNmlQ25_)z(xuUkfW6RvqAWFL#d!csIgg~IY+P2!LNZWeww zWn&){!WOWV*Fo|R!;Kg{0}8>1~*Gu&f!X6UtG3nep*@W3_?cqGIt7@epD zFO>Dn#AR8fxm8_F3Y;)q?!6>iAzfCK)9I6m~F|( zsHY~_)!|6Xmj4NWt)vaOy#ROsNYZ)gSe#<%^@pvV<6C`=TOCcWXO|SC@7#R>P<|GH zQmCaQWSn20E8iY)Ku6Od8)kYx{n|RK4m>}vh%?Y|8LAW$E&A3LKLPD-Ts+qKr;_4A zHr%h7GyOkE2O@l;)KzS1?Xs4sCbJ*xu2AB0V``!5J;k=T?P(ohxF?2X_jOlN}pvtOu!hP{n2dwU@G5B<1C=~Uqs zp@TZeoOyGZ#$@S_wBD;0NBSYAO+1tKa=tsX;((kR0J9Ey7bC4!Isg@~BfJn|rDCI8 zY));%$ET^zYnB$y{bif%=p!895FC>|EtM`_oCfUMztP^Ap&5y!{Ap>SFudrLtN6MY z!K}GPZ?u8o(+36G*6d?d2BQU481lJ$trD()=?s0SC@5DLj-+=d#b8ksaiZJ$hzBni zB|Xd=Iu!isnQKR}&zcmHR>$y5_oCuCW-m*`=X5j8DIg=^!l8?>M^Nbes*oZNt2i?Fk_A_ayM1tJ0Ty=YCI|X0(IHanOo0-JsMyw=oS=~ z3O1o2YH&|)u)c@|k3+^D{Cn|QXYoZ~(3%`iA#YiI9_ka+`&FA2x79pB0*=0{pmu^4 z*EjG~ULABB3=YsT0Bhp^_61m+ld|K{Hk^yHXXu(zA^@Ly;y45hZc*6w^x)b^2?8L| z&c6Cfkez?7jpt`GdSLI+5La&+vA(u;v)1d_y9Isya1>%)E|6e%r9dqo;#qEVgTGOu zV`b1ib=CxIqI~fAlDiI;xn=cDaK;d_&_kp>ie#nne;KA0H0H|#Nd5T=QCW^^B}JukMz zNx}N-x%HFKap+g|IhW*8zp~h{p1sWYsKJvac{v>RQ$}$|gZ9=U(?W020sAMZK}j{R z&U`D!L(Ucx(6pc)*V&mRDn;xOsES5oGRWCTL3Omo(m_q8ow#3f6+rdrOknk+Fep5q zlt#-`jr%?CE5WYq(>za;`@ z*BYGhoHt<&Kh=FMCFg@SY8Zy{*69Uv6FmHm?*}+891>;fP4m)CDv|wd)`?|_7tfV5 zs<`2GgCztRhL+F|mSs+PlR~3}PZDWHiw>79k|%p$y?=U04MdrC+H|Bg{qF@zJJ@@3 zP3&W!m5yuT!c(~y!@G*Exj;qHyFhVyDh4Zr6vh6$%^i|$?QP?PYZfv^RW~myNhbtX z$;^$?Q8=*anSg$_scy(J&sw&t_g@h{+=1zZkzMu{ZAfBSs45w>;UdE?Q!aY}6*Gm6 zlZpE!hexqe(IwPtE2vuhw*Kf|zeME?I=a-s*z=RI|MTN)>-O^zjM9TJzL_df4h+?l zQlWbzQp@ay6K~9vX)u~TN&A0Ql@Lv8b>j4o0rDe?Dtw$)^BQiA zzWK_z7rlz0{{{Z{Y)wG$9prs-IaM4vdKHzZ(`AkXy*m}0d9X|K@=_FzCUT(}Z!$&` z%>1B5hIOo4MV&<5b>*L4AE&Ff_&5e^&(Ujtm4L_!3bpi@1<&49$jgWho17zELZ&MF z={Y~X&xY!e4vt+h0(m8))$>?&Gz*Buhb{LZ3Ojr{YGZ;_HsuLKM+sr3duG}V zRv8{}(ds@wr)5%`nnz#tdIAI-x_Iy0P?!%XTEf}$;(+3vsga%jhh>fJC9GbZFyHF@ zgwXD--VBR%2EJYk-X0Ist8cjfNj-Bh1CDRx%-9;fdxNJA_P4aiF&Ge(`+l_5EYaPs z_F!KpZ|+tFGWjqivrg{%UeSkx`Jxz)9+TK0=*;{DKHh4!uhqL_9jQwQ1-S?AJOjT| z=}55)hsA85=1-nQ$a)-rxDi8&S2jYOl1WafkmRhv)$3GkRwU`LxYEqUPHMno2DB#K z6ehyRq)&;SDsILSS1eQpTYK`2k$39SxgS>gnVGczuch2~St&Z{;2{D7yi%T0aB|3^ zul556l2eC*sJd4Ar`APDz>ZN~k|_;k<)rp~J$p)}B8SAsfZ(XiY%@DOLvr~#wMm(` zto8uQ`Y{|!mTj|V&B><#CEC&jrh*r?r_^{l?I4l>ZzCMUKmfZ~eOxo^0=Y4{fM=r^ z2nT}4p24Y{HOK8cfNVA}KC*MdgS+rYNT*4@Pr2iM`L#79&E*UCgDsnmH0X5lbN!JBpz!Smi%N%khP*mf9qHh1jNQ~#vpiUF_vN@O?&Zi$jb9ja4zBVH>mPA zn2Ay+;>ahhzOESi7c_S56PL;!+fr`s3yZ{2`Y_SZ7~YrM$FaxEmieS)J}O2}KYllO zXa>nHxGe_tSPAziy%8l;wmf2mafHxDStV0vZQZ8mje z$AF%@iar>YHQXE!Ej+tCNW6rd7Nay@-Cw(%Ga-OYqA2XgAK+b$9{;YHDxX4j>U5d$ zbN~2G#xO-AWwTA*o6uM*ht3XPkCzf{0X{m^4oAlkS)Tb8SD0%0*GXD#_5>+FM;e(0hsd9H?GfK1I z?Mg3I-;P*x8MfmDCot0M7nIhEM|dea6SN$FM&3y)tYdGCGr&>}8@3&kzEPjXG((__ z7NmWIwWk6W&~i`Q&PW{Cl;HW|A11@Dm!at-ut7bm)p%DeGFpc*pq^I_Wv zy^X;#Wr@k{w~w}@S|?<&=q!|PfGPgb@ycwd$T)pBqf~0-^|`G`{L~P&k2-;&|5c6V zwAulB&c!z&`H0!L@uYUXH=n%D>T`alioY{p{UzmKeYYC5v9h$s1e%NbL^R}ruM&}x5ldw%)ZMXrz*UFH> z(K+#`>et$V;<{B5SP+5zZb8lQb8M7FP>L;HZl7P*`Ci5Ga;~(al+{gfxGimvCFRW) z!G*^+NzfKxW|3Q^40oVY;CG)YCfIFJn=uTmNW6Pl=GkmMvzlrayL9!7c&>2*VLO<` zAmLEC158nN6lbgvMX1BGq=zq*ub|z~HGW*YsC(Wi$r^^IWy3 z>v>_P`9sjX)t#q@xj`lNJ%Q$m zbvrDNq+F=BVCu9{%#~(|-+E-zvtrB0fVy`hl&=4D^P$9V_zV9a-jIZGa0R)#ugk7K z;tu?#OC7iMp2VcC1>g}ZzduiUX$`g^nB_Ykq z0IAxzCxHViC^yxq@Utd9cUy8;8$!a|{T0Wci^+39fJ$Gu)GB>irO!?4lNX31k!d@* zl)M6ouMPYj=1R#e0!k-^N7w58vD{6W5nP>B|2rpi3u0b8>>{Pi=bEK++=;brfl~S3~Bn@w(72 zfJ}&Fd5fDwR%Yrf`udDKwCO3#K0II$UNxEL7+YAoYirF0ld1XdZ+t1ufA4B>9E+~* z?__e{E#RTL`^O0uo5exRDrJ_gX)Bn<_z&j32m}BmIC@u;0O2-ozTW3LTKnF%$j@x$0exfNt8K zl3Ji*(qd*AXs6auPaRt#2-qg`(Nyz3(n&la=z$h$;*qI=&t?^{Snr$%NyE{SYfz|Q zXn?Huj7l~oHW-5OLuz1aBgV%E2Ba;EL|i7Tpt0EdahEHBs5T2IA1=}vmV!XZ1Y|G- za+W@zUXY@$#5{D@2%a`Vs6SrqtB`2cm;l6y7N$@pN}p?`)y_!B+O+|)a@HIkh+t8P zRmW>}K$lfaz+3~&aVJ|a9xn1JL%fE!45j4g}SJmo( z`i>k*D7c9RL%+Sm+yBfa6Ov)xurA6gOMp%{fyRS}c$6MN9VPP9TrV;wwMD!BNaC>X z8@ZxA%cQ5s0crdg6#aDR8+7|!+)Xw})bRyVvvLX)UnBNhLK}I0-(*@*tpm4APUOB` zQNX1WWgZh+W)=rTf%*35j%F`G&NnMs_KK&C-i`h?XpqF~!`z*HP1W}%-4dO_0F$vX z66b>m2L)&f!K6kfBe2H|#@BPogsgdBSwinwz%9XWTUnams`X4qLZ z_a_k+B<=6%rKZ0tUQx`UG)-R@!lv}0mr#V&w#ffZZC?hM9rG33RqKL`g1LOlo44j9 zv3nYmFctaqcIiF|#HrNMc0P;M*jKEr+bF+y8HogQiS1dDwF=d&oNuuUTd|yi$WTf- z@6sxbqrrf%w99ik?DyR_x8&d3AR-^@sLUlZ5R* zSF@(YIYrsi(#Y;1$aL*?$U=K2_^j2pV^(Ont zOae~F*IV)N0i%hO_#$tQmEjcIW&-b2GrSsO9V5suABX#{%!AKFA`acW*5Rvr%&Mx4 zPdKjkKpU)B^F;;%GBi9<8Ts*>^d-UhHJ5M7xu`!~8wi_7M{RJviI3y(oOEQ;%@Y)j z_dCbstk;~zW`LmC3F-p*N4ck8KO;Kc~R>U z?k#j+qiRk%6yOh?F5q*BVe`ANbc!VpWTr{D;;dS72pxEX1Zrm${RctUbOz#GuolJJ ztKBEVR$#>lVz7Kg1y&EL0t?09y+n~ws%U%k22+rMOP;FpIrs3>MtX8A?nGvU0 zDQ~|x2&oIoQaSufk5Y9@`6$@#lV3}FdU;cJ{z0O2!DWU)ZZx+V`sJ;MX~0-o%u%`Z z1mz_e*D0=cUK-66G)qQ~V2LL)4C2dlcl?{SAv`m3<$D!hjMxqf5L1uDvMj3=R^x;> z>#4-n=-Pj|LPF`>kO3CF;tUzW_1cj&CIIB1Eq0Xhw!B;Oi|71ZQvMCLya{2^Xab&f zM?_$g`XkL8YTh#Q*tI4hi z>|cS=>INtP5mh%4Q-On=5%f1F?@C%_%l&Xi(l5kygs5{r2$0-70ZL`)7rG-JQ0->- zjE>`-xa>@%1+Qw1A9s2zNUv~$L4l+$mxym(pS;<=bh)*@_W!p~gu$C)4C-aa#Vlj> z={V}>K)uDfn*TzI=?Gx#ZOw7p&aLy>w6iBCucYv>N`2P#e=O0aV~{)0NJYuO!Q8a!>9Huyg(3zRsB2ZR&tDAz zdcg<#TSt!Ng>=XpAv=uf930r%!`C(FA{kNI!=r-@h3PHBZMLNoIn*xij)=M926Xn? zEOnUs93>#>T3Jc06pMVtKrqj1Dx#!D2H z;eIJQOL+u207SLn_JR87J{dri;Fb)opmd5U&D{@${{hD1Z5p7!ciTG|Gn4vE7S3kH zsr9O?h+{ve{FbL54G1gW%?0LmQ|6D|ZF4z5vS)5AXul=3(I}V`cYZb=1M?R#k?MN; zrAT#c($oYbASU<@Q_^LZ(lOW*hs^(786uOxJxw zn9|V(HWr+fwN$c#5f*HssdatNso8-RX>zw@8V2x8T|M62%;k*7g4WS`y%cnMLnNp` zj7{13$rf<1AcLfVp3G>0%ilwCxwpiDW54X|*HxyuOS8MVL9U(w-Rcqs(7vUNk!yGx z5GA=EIPmYGvxi;gpyvmd#wn!Eqri^AZM(}LoHiBibm(iN6J9xORo3DWZew6x0E)3s zcTQv9^yhrOe>bVJ?WDujHR8T@cF1(cYLd0zVFJ(zKjlY4s8l;edw%6lDYPY$(vcj7 zOUmVs46g0BB0OM#{@Q8NmN$WpJLH9m%S`jdV~Ylc(ZCaw9P1q{yB3Vv2P0xB$ihU+ zs{*!duvR|;*2|$FoErlpTap0DBq21LdS-01hdrf#4CAvpm|@CNGwL>`hYHxJ`KeXNBy(K@HwNKBvp37?ZXu$ivHbk zNB+&g^z4|m_6rlX zg}WS6Q!UPeLj`3dc^T&q=rrd;p1iAZc~WUGpx3V?mw%92HCKopWt&_ngzMGT?cKcR zkk3z|K!g1pP%#5WZC)oIyo$&iEZ-{JdX0V~620?BT?=UpSlGIWl7-pXFPa+FB9Mf@ zc56eVtgy{@6!+wrFlYG0T=rW@v z8u&WQUk&faK2tFcNb06fz+ZYC03-m8d=bz$=(PVF8zm4YT1gQ-zyS@=B zMfCh>zHyeFko^+__|M@yl$R58_a{M_*3GJ=&7S1?5+e~V!0y%~FzFv6XvPK%~^R7lUiO;ARZ=?;qt}!!KF+r;|lmhre!IUSi z`2*$m6KG`JQmnS!=MPLDz0f>8(`5R}ahlhZqW|V6C5JUvAXHl@WX|p4 zRQ^h*uLA$Ujqoq&9%j;n{CssEUb59TUzU(lhGi3GdGe<9xZw?x5r zC3eoSdlFb)?sgvnWqzr3x5q-IQTT~WEb~tw;u96`GVTONW zR_SsYB7&aKw06U(tKr0giY53(^5$MMC0SH#K!DkPAY6NAHMLi{`po+4aWN;qoqfZql$IUFW)b-e)fTj5g9SC%QH%J0y$P}}QLIMkT zK5t9DIg~`H8oJ}DHA~|-q6}ZF{0B2#tq}NiV^XF1Yc)CWc2k8MUBFe33PH2Xz8X*Szc>rKw+_=_x3qnd0^#J%;(jYs4zc!-GvkQf+TY zg=qThlfQr(d)g2yW^!W#_q5=rn%q}j`}7#w;V+{qvuUzehWnvPQgT!274I-hdky4n z1tS1v*Y9|k5Go0_7}a5Ju=M-id7@vDWkKHLy*~D0x~v;IXNEC2iP;B{Vy#Pqzu#!l zQ13>Uc}3kN=m7KkuI)bp!xjqlESsa0%!bkbtF7xFyX?s96w zK7F=jYh#;^{oH^*{-iX$0<=$QVyd)Komy0Vz2lo=l`=qm-~^#&44FT$)i5;{LIw@l_HWj{qIO zmJs&Hs{PRCF5=XJzi^SUNYNrhgq&01ld1bPDVY4U5%LWdJwvNXs$B)kfuNd5xq_r! zqh`8U@x$Lj3tjy?%1|#^u&aIWE->F{gpR7}FKFZn99<6d9J zT~0>=M^QxvXeVxe`)+7oUsY90;szhYR|p3`%dw~f+s4oTR`9w!vIopp$;NtP!nZ=( z@dqzdzLhzg)D)HzsPL&DvHZ%EOSDP@qTZE5Lm<5 z*^|Al$o#3yb6#^D9MDvA&%qfIJY2t!)p?BBlUk1~HVuI>&r6c1Wau70-$YYR!%2)R zqX!_K59jC>HjZPL;MG`cMBQqlbm<-?PxCv@M7f>?#L-(>2$c!>=)WhiZ>xuGQzgpB zsWCF4s~jRBd&`=y6c7{8h}FDzovf1rj`Td%g&O*_qT{97wCw-wjcmF>+GR>QE+RT# zk1!w<$@=OKiTt}2obol2i{nGyM7)o*Z-R;Fs4k{0VU?(9Fp0=f5tAObwkWjbKZKEa zGYfoo?Jo}w<7588*>AyNmeXp*vU7~eu|tFPpf6DuGv?jW9Cg9@c|=mm0R3F7X;{#5 zm7f=pQn@$n0Jfn|)gcS;8(v)NG>Zg_0egNO#t0@gM%={rQs}8;HHSQ2Fh$??#+zc4 z_FMsZgx24!Z|BxFq#o=4YF>1G|Ea$!a-C(UDvp31ib;X9Ps7zVelAMH>?w7>+@WYP zMaXg1_6Qy69N~x+&^oTExjQ8Y@IQsG;JKIhF^11#BvjHLs?24 z;uSvB_>xnlQE!S2(sQ`!vu4=Z^ao+TEM;Bs`kd_T=x$&G1gWY69K0o-2qR=&K`0yf z8FM(#h+1r!t6DAI;JoKZenG94pJg2IRgK8bE=}QS0&eT^=)&)IO3D+5?fx%A@+_qt ze28&VA8C!XQBy1z%>3u(3z1V~35ZW13&m#MElo_c4)(xYAPOB~s?w$a*XGL>89#s| z7j*vk@ci~0wIZjt6Xy9gT2kAzeFUfgTm16IVIl7ko&;I2N=r{?D=`=G=YIQwT<~8y ziX%a#&ycxh=C>Q3&kvQ=ewnE2_;puiO}9h-pbYtl6XM;Jz*doAM-a*t<~W-aHv90l zMK>l+2B9+4y~Ix1f7p%tuzAEDAhZyvBClbsiY%0OhbYEljkIK_klt2OnML2=j5sWD z9K_8kIFvC}zvh>=SuDvYU$}FjOt8g96z^W{JGn8+9K*R{4q*#?_<>v7%-e{Zq{QSH z>C@`%6rwuQh)9AGBRHYmpEWEXzje9{7}07V1l-?Jab^H>E6|;Pp@3&TRugoJeuMIq zV7o(Hfxc6hJ0#W^YBXH=Fl7(g5KKZ~yDr;oJxRF2+uBw9Zcrxs^a6uF>Av81qcdDK z2tZ7T`deh?*BYz2afYyMr2Hy+1*o0_X{nlqxx=-(a~%eez_Lgq8J4r}Q@AeBX=Q?O z1ikr%C%Bk$974*kEJ#G+WdZ;sgUaM?bV)KarB?TZpxtfqQ+Y6eiC4V5(kUFxJschY`KkUVB`pg-1`2X_}K!#(cvnq32QSta;(fb3}{_3n3E3s+gX8tndrn z-)&1qO7Z9Y_f9YYj;RvhuR{8sD4h$_x$#GF7@bl#wv~ong_72%C6ecsX5Y|^>U!!G z_&Z?0X*&X_Nnr;%4w^r=Ks|Lf7lC6~$C8$~2;q6W;&2_B#tk8zn`P@NgeVBC$G-n* zn@-F;72yB!sk1(@SE0IK%O{8P1XHwRvm@W3O0Hjb+ZJnnWf`oM(|tZp%U+JYoO-wy zV^RM40!Kvq1ht}WT~T45E2!N+2Sj{jht}G~;Z;)y%1aA2XZ@Z4dJdC5hMzpP;CglR z(Me%Ha-K;vSLd$INmsUG1Zc1QusT65Ov5r{SB_%Jj}yrCt}vrrhv4wq_R4i?sM%8q zdDdIp4C`&zl1P;Z8kEfc5GkML{Q2o#wAE8x4ry^#71{0F?&X5;%(%_KEUpVnEkk?_ zZAfD5MdLaFykoTgizefE~u+l{xssP-Ku4pMz{~AU`i|Z--lAzCUXXo4$1}i8F9x zll3i67*QST*=l0Ns7TI&f>FJPvx@>&hRbc}t*(|?A$sO~42i!2K{zeO^B#079{z>R zk%l8%i%hLPDTlY`bsy-TGk9%+-%*B5*1_QrJp1ioG8X zp(+hU5|3PdhL_BL-0@{^x#9YXyxttrI(#-#Es|i}3G2bSyoO>jn3b!87WTQF%EgOq zJN^U_CHaZ&&P3WnL#iIrc~weJe9s)tb^k&JB?9sH?F?^xpH+hqLAgoo@x#y1(%>MP z;Zl$k{Ud~XW%Tjq)gqC;rZ&fja4OF+FwFHDN^n0csCFv zuWymEkYd|y_%+sXr~)2^_q-ILL^2RkGr%he%39DKa>5|>vJZ0JS@8W0EJ202R+@~u z{P0hA` z@0C1wK@X-5u2Y6we4N`z7A9i;K%D}i zruX4*1-I!Y2K>qRsWM_Yr}%J}RLNTvm#e)3@of}lY7y&HTx=ga$MJ)4W7~9zNK=69w!8iERlg)IZ?^Kj_6M>VOxto+s6D}hyPdCP&=k{ zcX`I!k#*PLo3KrB_rga@Bt8eXWP|O~MZg@qKJpr^)d<~FxBuTxjoyoIlIL#YG(BV7 zWV9T~yRGWLwBTHy+lF&O#kolV1D3x>HQZ;$GBLM#5&LpfuVe4(6UD%bsUh&ti0TbIh zBNWSp4Qe8X*;N`n$W(L|w#FXic`Lq{r|>@3F?45}bX(Z&Q136=5*wVPElbS*V`$je)*`)GWN4{;^ zi`q})JXXcs?=e#-bqt$u7Il$3FUP*kA}IB1n^W3%7BOOgNP3tTkm2jnd!`65r2N6L z14MZH{|#N&-P3w|jZ05H`U=dEra{TK)5KME3mv;6l*{qd-J+Qr5W+22^r4GZOrnKJ z!TiYe?2PL_1_Ah8cMAQd82;Y-I)0D7R+%!D`$sMUI-h%%HD4@l)tCWg0_n^d2W+3& zIV@bx6pDC4^c;I3#$-dQ;tR0j7$!q-HA-0Dx`B%rzA<7f&8e1!I-F=jpI2yonWV$8 z{A2Ho9&U}nc_26dLqNR0nd5D{5u$xtZ{rj5GMKatSxIg_sS^_UA=vQfuv;59_(_sz zTIkOB_}ow)Xo<_F7yWcQvNSXe!WTpcGk@dX$qHM9QL%D{}_ z8`{O8edCa=Dd-GGAta>Jo5(MPdK9;c!Fh5UPZ60>gzOkE452;QwSB$=+od1`m+7|Y z@N#rxI>5s#&qRde_^?=1C=UpPg@>J5sp3EDC`qMJE6ErnC|LVSKP>HL5I3OrQSXuG z3>&6Ru6GU`BK^@K78QOi^Z8Xx8oE@qn?*yUYH%3hqQ{nzPb*I>M(9>$Cm#bXZdR&s z1dW7*Oxj?i-S7Iqm0w#hA_aCIkXod=lg56wJA74Le}kMG0VgVk zIb{Ii>QkI35L!Nj&Y;d9FC2l4En>wZaRpw!J-qb-0Tj)_NR;8cdPF(C?w1E>lyta> z*2F9Ibmwy@f-{J}@OXGi$@O$!4(mc22&WSj9XoGrz{`@XAyXtblXZM7V6f%#vLi7 zx^?)03W@&`X{3^-pOQ>d4U^O-U23F z{BmykS25wp-B5{?GY>uD6n%8kYF+?asTpVM6S2~E6=fRnk;<4?=0Mf0p`H5rHdpKE zO5b@BkU51WBK?EeW+vOJTXU2~x*Uak%9qaN9}7#pt|o~Wthb8u(Hph!xCyb)2H+$K)) z@&3AelskqG^5Z3=S=XRg(aDTPeX4U0U`#tc|MJIIVjq339;Dp=3Dg@-YWx22B3yNL zNob5NVF>-4GSVB58;jb!rD-9QJl+fI8lFRz^G0m+sw8Bpb*5cW{fSYeYT- zQ!TSYUkendlyt7f>Q5t;niQPTvUiW-l!8Aoj0C4LRl*oBn*|ZyA zHro6@e*EGU8zJ7B24eVMoxzc>eSWf!LuebN{aNQ0-W zecjZlqJu6{iR~1INB{<5*Tee$ijwb4nwiZETvTcUl#`NXKYTO>{22ypM~g!w>4(TK zU0RFqEuo&sR*@T2cA6y*FckE=2Ar4&Q0glhwWvL(TJ>2@^A3LT~ zB(04;U+9l|5jR)fixcpt4^!5)ow@h^syMk zlx`O_B>pxT5i*rh!A07jm*twk+SMRD`BMsfpxi!df*C!XtSQk?;KG<@MMz%Xei=_f zU(mW9*x&Cxt*5=;p}wpW$ilyiyacl4BTrq~_RFIrCcUmPH?F;;hj9X*IUq$4PBA^N z`1W@=GLbvO0p0vrERpG(YjkBmn(SdAw32RSQ;!;}*<<x;9lY4#H`xt;d}O%+1A#Hiy;o%7|?`S_y1T z_9lb0i9h({S1HuMXaV-sLTl+A(NP1=5m98xg}8vM3>6Nz0S5J0PrCTmToO&5{6RE! z@hBf)^Q0#Ryiei?KVUu^wHDBEBb*&9Ua(f&A5;`ZPv$13HXFuWr)4dwFKKc%Bn%X~ zEPB@gMcUM!(d*y^mb=a16H#oj+d%8tln8K#&E)M1vcOVs7Vw#5^^$lPkLV6Y#(Ggi zdn1iZJn~Soi(yKWktuQ^#|lF*)E709 zDIpx^wkvUQQW=J2+_K_TJ+fYd+QjCwhLNxYn=(gJ951mp?FcEa`F|z{S8GuJl>es= z(;f^YIQ#kZQh*y0oWP8C*4jNne7EpLmb{;2_+8Js*(8}}Ql@;Llr+^5WQMU3Na(|8 zOQ2|!VlV@IK779Kt3GW`RQX}0LS~1NHZHQg!(-Sr(}Sx?hb=4|aC zAtmH79X#1;nEp&qPAcK{#!uxvZ8_bsw5<5MRL`E~d!Svb$+5~H-wwyyC#4x-FKMWb zcB%Dsr+~Opy0t;i1FLN0Fd0qWh8)MlXFdSAkyO)5a3q+qVR6Gq0x8btADO2)l%W+s zQ18zXQvYfV6Zw8Ib9A$wJJS$~{7-B@3gL)MH23CeulLQ+e767PhpiREM8d?r@VI6m z4FPxfVDYCVDGicT8}iX3aaR`HPgF=#_4VbqY{bNk_cpl$!ZTRG{R-*^EIc5{;t&h( z?w92IG4AdO-v^0VP}K}2X|oIA-gsGox;n$WYZ9QlUwbLw@aSJl=imirOLHCitaq56 ziHvYFiZ2E%kKV2xVg|ausro=j-SZ0my$?=X_J6!=teIS+>i@@RPlFvM)j0lT5sEY0F5@ zYp(%KZKqw2Lj3@tm1}JNmRd4z2xv_D6$RvoJe1`N+EUPVXq$nB7^T5e+Hd-hs&|g2 z2rsvrAaLwZbl1gj(V~_`8FK50Umb!PiZ-8q0TK5i=cdU4)RM$(6cOeb*w-`RIma@m z1w^}c4UXI_Y~>{`F!utj=eb@@`Nk3hgxPtnG)(|yj%r`h7%_kPz9gf1P1p%nq=JQ!2Z*< zvB;+0&DNjjm#g~wx0dcG%pXR3NCWTgPeY9h?jmNT!g1Hsj4fWkpp0+9k0=R;baIr* z?gZkrkqSom&Lm&G>su@1%M^%`@F_y}Az%dk@+jWqxkJY*R5c}*lVDd;x=>U$ClH~; zl-io7^3cyDP@n?8VH$U6i#9e3Et!`ljKK>yOfK&geo>O!%5So1VoN*tsqchFM^FF8 z_!BdU-n3gaS$_rbp)UDvJCAm(Cit)Dn`8ijp%pz9?h*$sEdNpo^bYySD@v5&+#=u+ z{!MFmC(=!wzHeQeQ_(f`wX7!N6uzzs4lMn#e@}&cNn2xptK^y9Fn(Um>KDvqGq&$a zg-*JX7p0o2`;Na5J96CtJ1Qp5n28{?1?pC+w{cQiBKNx=Fjz6r`T6cJ!ZeT`GOg2J z=M+qU8xnSi4a&fN(%;0LN8PTAp0vvp|950!B8R^M&*+QAgA;;JN9_&AkVrHo7Lw}p z&CrNpj)2CWH)|ZFU0&0|7Vbkpwj4I8z>d!E6#<$d?K~p0UH&*v^SlvwWrdX=Yrdm# znPvjrIG;mvRsA_w**?pnuW}E=W2P-x%LuP`k%hh>G=thFZka%kO8jwqq?HifgLLuEhZqM{S9aW~VBycsUiUTBtarbuhv6ul{LNZHa;L(P!+Rhs=XG*s*(+TL zSO^(rbZHJEf|n~sWx%6DL`xzKNy&bA-TmQMtK}`hmKw$RKucL0Wx;p`k7P4;lbBQO zsHK|@L_2%P(*HZ)HnppFwgwYoTon3 zfLeWKY?{?9B{-IsRW_x{kAjYmgLl#a7#NOLV!qy*0k8stppVA}zK%Z!)thUN_PfaG zVWbW!jVav1s?v-WoEo0qZNTLEWk8rkX4+P+hcSgQ=W;LwZJk%=*(CaYPdat7b3@$n zvbn)1)*ilXJ=fQS!+3ANCW^?uy*6AG0A?h-A*u6FmWWy>$#lKhEGb5Lx|eMfgIt`s z{vOrP?_w!?_5yGKT}K-UZ0`%u`THebDrW7f>e*;w!7nQZsy;6?$()IgA>S3@^vot6 z%65P1@8y%J7EP(fO*XCkVa4cu?o1|WL%pF~C+j6HQH}pa1#~njgDly}Da>}~&K?>7 z$j2mKjAJYE6n=c!RjI3puKZh@&S9Hy_{}VY=v+*z^WhGe|u-wMpZ&+AP5=WjdY3VH9 zg$KuZ-drD~IcktkFp4!X8Km8`9EC~*)@&buGu@QMh9M@bFE1rH2R3VW9E`!R5KA=W z0P*n{O6l1^4`NR~5$Nc>@BBQB!r+o^dC@zOs^uOg{xs>wmxnQ^8|>EC^bWbi@lXR! z;3-)-OQsd{12!I{LyF5QPGWEqVl;$fF+I+6pX*iohZ2!8pbf@@b+`6@f-*GQcV6s< zo3ePmBM$W6uh3b!gdNU`%A`I%8WYAsp(_6h^;JHdj7NkGiEN2N%-w;(EP0HYI+Am;PF#jQTecU)%j3nD&y(7c|h@M{NhDf zLq@+4He7aQb}>ZF4|2XhV1A(?U1gD(+^}4L*3EHGruz0l1C|Ob2%9cP51u`Njtb*7hQbNQd`w#> z0W&2#5g4L_Bljxp5uISd&+Z?&{lePgQr$q4n*_$w54eQ=(pmJ812kX2P3i-DOkmKk!2d@WY9e7ml{r#-okucrOj2c zz#1mH51Td2TJ<0& zFIKo2b~c#F91D!^aneFvtG|9_GrkEJ$dFI$wb-7M+ zW^X4*EK?L1UTK+y`+_15j<`?$x1iu5$__}O61^w&r6G4ZgYT~VrO0_7^l6<`{`*uV z+Ea$U6QX{<$aP~sua$W_#(4;DP-vdS0%(nSn29zcxbhA`BI*^L^X&)aIyEUVcRWx0 zJ7p`5w^kXS%MA)3bVe_60pW4t4T$c}7?^=MTXafiq`Jjy!B%kP>GqFwZNNYA=s=3o zfE5}o_&9m8SEBoX>t!}@LzX*MH4~k)VYa21`w|w$LN*`ooozlwT;JS2mp~gGhw3NU zWyi!u5gIhoeE8%};7#$w0Dj(Ed}sFvE?YsjYKMlz3eZG{g7qfy+S?lUFMI@#EF03j z_AFyLR8CIJlV?*{Q_`l0`$?X;Wb-2`O(y2+QsgcestqRvz-Rpq7oBz@FXpifK_(9# zex^%0;j=&)bHjiZ#R-K^r`F;_4}s_RF+0AT2LlV7gCtKX=XDZLghSG-=3++4I&xtS z54Q9^Yo-4P(hRkolXk{0Al3-7lsR?*@}HP)aK$Dr{>D5rjnsZRr%<3H96{UU&LN72 z{r)IqwBug>V~}+S9@Ud7A}5{glNag%%kH;R{SFIu#-4;lTqtvauiHcg;scS^erOb- z5Wl#8-uzZ7$qza>J*4-2oyt^>js*tLRh!`=@sbi*->Q>7z8&o})um++kHsfinlN;k z9@S^U-6E6R(z{I?Dph&g3oT*vBAsb`$Rr}C2NR|)E@S-^Np^jGAz1#%ZR>PjQ!mFrQ^X8lTWY*J%qt za?d2*qu1zm#B54g@QB;*JB4wgQWWpZYA27$#Lj>@YPaX6+NOl!1l1ZB8*UjF4obSW zr7+xS`?-D!Mc@KxV+L}j2u4#IQk@Q^lW8l>VMshDKSyS} z%e8$MS9uG&EQU(Md}Ya;49R`22|=1SgtBel zrA6oh-cdER5}Bh@XGo3|(X7lVBw3@=1apZ}NZe~4wLQV!$%F_M*n1#WWWjlN8`p8HHclBoiR3WPPG{qdt=}JGDBMY|&&WBr)iALW2;6^Op!$J+E(OI#@gUv(*~AmWG53ddBJ$qR>^ zkFIr=p86bog_P_XIkf9u=%mGRmaHI|nN1;)e^I1JR2ZmMphEbUM}MEVx1tBZfFh@~ zSX&ch2oP?c@nQEXlM3LLq5l-?i)tpk!248)07RDsG|(AGRVH_Un{9XLIDVR8=rTi` z$~kfXau9r=vg_Ijiwkn7`Ydl#Q2zo5^duC&=$dk(0qsLbzkQ){L>!rikfOPNF$(s) zyjpd)ey}}rJhO?ikhTjS(lV9CoUm7+nw<)&>GP7*ee-XEqSy%eqRZ~wOB?@f3aVK^ zd2?-Gic?&W@!LfL8;F!6!+amXMS$Z(nw6ekcna98et=0a@De`5O}G0tlyiAhkI!WC zWZE+p2>X9g2VJ^3#Cms-grYy{t^6=}+GWD-$BAV&zq$i20i58_I& zXOLOSZ1RN=nP;T#k_93B9cQU2ll8)^VT??TsvSb-t$YF6ShaoH{7pw~?PKg|L>v=^7=>J;rD|~_%MKrn&EaHBuDWviw%|TH@(eM9tMX90 z03iKegO!uCPcAjf#j1)k&{B!A4a(0-cyyW$G%rhDt zzwthWN9otP(yHeyMd#o~=_D)g+I?kW$ctD>Dj{-Y8-FO!3;42*qcA)XOze8(-kP}R zzzJ^k<9p?Uo!GZ1p2Au8CCIC_Rmr+lKIfhvu7$Bt2pp8aF;!j1x zEN(t6O_gyWrdkJ9S(b;_2ekyyMAj06BG)=YQvZbzJjc3h8fWR!RA<-$;$Acr;uPsn z2mDY{6(%;6eis=}c-kpt0|9L*Ycp7QLJD-*tIHDhfV*8*ZyWO_R!E1^Y0|jNg?heN zh#i)q6aLVXFky@N|| z>s}CJj~n(8uAW#Pu?OSkL~iX(U6Lx}sU4U8oSRB_`Yp{?rF8en!S06Z@vY&a{xcE> z@uHD^tt&~Rf|~W*G5E}NrL7r4ty_b)2FjcTqt<&ju%)|c*VquAp%nOt1iGQk-H?KH z-KgBe@-IY}d1B7M>Msfx5Mr%-kcdwMI5Rbx{TYz%h%XiLK4RQZC4F|HqD4%poxLo& z5?-R=rcWPxUX~@kQO;slGPGFIA%pQ#fx|pE`(DNjgledqb6`w?30N1EF_t*O;7a#u z-2_xK`(sUh4o7&D=%oAk(UD@_hR~#?SYWA!*sGLFyN_kZ&>wP1cEjv!*7G3My5K)y z^NCyo)xbvGT+0DwkS7IE)>yS6to}f!MOSx1DLncAcSgPU|C5sZHRPC=o=aH3E;`9J zfhJxkOhZ*J7qjcqwOmtknR#>|_4o{pSvY(o?iU0J0{MD@$uBmQ1Evod+2?Ec8DUHv zQ|>F}hrm=tWuY(oEJM3ckGjs`IIP{SaJ^Yi9;vB;4$bU{R!cBFbp&>f(d(&$<<7btb`If$%XR$+H<2MIJ-21tdEo_#-R*6h`Auw-JKCDK z53D2VFvr(h>D`KcNAC`4Jxew@^q7mjrNhEFZFacc*)0M0+Le}@EY!(UY>_tq{vyz+ z3P#tdV$~6cajvh;RaiP$#rALfqA;dg23t^z^Bp|G?VRRyK-+A#Cd5z$E<%VsC4OgO zl6?0*Ok6hI36z{rrT)CrIf#pCd+njp3sR zPqG&ZA=-0V>BQt#@m#b_`k}Ix&uxY``3U2$Nvab-{^Q~A6(89P@x2cflPkDIn2&PI zIsb~C&>;|Zt+v$o(|jn7N3Ih>Su^pe`Jk$TqwhDu-CRfD4S6p5Y5LdB9!KL7ddBMgA&{S)nG96Bm+(EzzsZut1ksT%9& z0N9Fkjr_NkF55`r4ryWbK&tL3!E6{EZ&4G=wGT7LZ8PAoz5$|?Urfow7>bHA0I&Q9OgxpO^!nG{Gyv|&)WNTVoW*;|*fBW}MfJGTCmj2mHA@1hbTgR@PYR$r zJhRg14SUpwK0Uwu;{OcM*kkNO=sN;aCd6!1?(nLQ=C1dB1L577e*LGMS9&@4Q+8wu0DexJ?OC=t(M zYK!XY$!BL(!nLU*(hw$s|HhDi>0U@Sbxe}YO&<{922+1j8WmiH;Ma(Nj&n*CUwHtS zprATA1i#btZrg_JO$A{(nT&qNDKn9z>^f>Mf~P~(@g`0h;Av7d+OyKc2Fp~hF9=q| zdm45jWJAF7LfL@SnybGkWVaHQ`N0MZeT1<-AE&7grVkPxS4m}9j!_u@Jd0SZ9V1Bm zj-CNrMGAjRaB!&rhKq1=`(ynVar-=kws4cJ-uX;qNpoNed&oyM-va#`%Hy!R%4Z^* zBUe-^wBnrZXc{<}hh`dA7Yi1l@F~4o3`#f=dees9jqY1UB`!Cn)oUsX@Nm^AT{bls zO&-%U>@VXwv@FL)dXz0Ymi^_g7D(iHar1>SJ)Odrma>BCyCTVvzMQathAOMn`+^P%gK@qR9 z!;u$F<9HiT6c{np&8bPIQj4TcNQv-w+dX?NhWbgN^}SOB6t9nrKVS?jl5BJ2MreP| zp#7y08$5byWE<^U?MVN{7WTin;;JII2g$w}!Rk~PbP0au1yvvb{>OhLIDaXf-zHMr z3q8;&NG14xV|#BY+q23qMW;tO^@rek*gjsMr8sKJLI()=W**V#vZ*}OlI%ExSv@lk z6(P*ef7!WG49yh?-xo2$n?g?xfH73LbTMZ7Ohw)Am|BKk3|}Ir`Z?)oElqmemL?X110TqBy>HLTaKdb-tuQ>9Zj5u!X)zKZb(*%x zl7pGoii^^!xX7hM%5r1PWIPc*M?aZ$w+&aKxB>d+PK-++K#b4DlPEHeJxm_tmiot7 zI!t=bAzk;MTF5arEkFu>9XAYYX8?4@m!wqG`gh|$kOOxdgViCxlf^{PbdvEd_I882 zR#U#2y_->7d6NlL=4(d-3melm)_vT1MK(JI=ddnowA#lqR=+qzN>U zw@O($9L45HL1>WB1Z8;p)}axKLho+@e#vnVz4e1wFB0V8CV)LD7A?)*w0ETBC zqukk`?vE_UaOG38Oq-AB3=aTDn~+=(aCZxQ?&f2@;8%5?V}Iq*apAA3lbaNjT1&@7 z&y$y2CdJnw&l20Iw@WM+MooFo7HntCiPHrelqMNNv*u=+1k&QyPty+Xgu|#+9mVv~ zh0jR_$INH&SlR>KaX{uUWkD9Y9(($97F2d+#jPQhqGcn)x_%8h`YIpL$~mqPg%a1c zZZADkJfSzk!^T6@1b7d^`dX3zZOXlOLl<#u?h7aD{;<{gXZCVt>PunMbm%JMmJYrc ztUZ;DMaUnj*>@dIz=y5JbRROvV1iHYHa4LR|D}~yr77s$wqge+>xQ+T zA#Nuc-&PLDM_}?mI>$SQrFdY6It9Aae z2kAM^Ac;=gjIEJUU~v}$i;ZM$1~8TvM~a;UXWn)M2jC3$?77s8nN!GZn|+ywL8SWP zGKu{MCta)P1r>VgRLwOm#PrsYPdoi14R2rODIbI?+I1r)O8iwHlz{csNJs7x?6}Ua zLl`{1$MP%Q7D0|G_xWN`Iec3rDz(okWiBR3= z$f`tx7@&U58>(s+88eh9Q>t6)(J(MJv~{=S&%j=K2yYbgDD_F!g2!7ajjyYqJ7W7i zgv;vTK<@d5k-P`-FHJ$xu%9F^k4+5B9H1^XZ&|$L0r{G>fi79o^A0vk+{p`F+5N7q zXb#F>^7H(!Llj{HjfPq4VENzbJ#u9mrN-$g+q$s-Ko$92_`6Y0bxATiC?8ngC3wqz zDRT%~qcqsbOx{Yx@P7xq0GD>8(guHx@i{+vj${+9ji>eZN^d5ada7}v3KUV3;x?e- zPE$%#7)U*J5j%Fzr^ASETMZ}dZr&t1$^f*}BMC?2G$&445h~r@e9xB^o``AGz!Tpiwf^FF1FG$ z{+vEoHum_46fjR{){o_uiLAF}j#hbj=h@N5$CYnfGNsiwq&!&}M>Hy%i`ziyxSNON zhjcURf$od`7&zlzzY+XBjJwj{Ai4}FR(6LEbdwTUp*V*UR-c z>oSnA$A_J3z!k%#Boh{m%b0-^6GYKLW1)sJ08=MvD;p|P7{1m730Ry^mU2El!@1Dx zi@7xQFKE}gf{U;Od2Pr|k--%C%9Bw#WP$PhC*l@3SsTN_CzTGOe+bFH=4^&59Vf+0 zNK4IQAHYohhq%=qt^FTjz9EY^@8DYovV?kz9*bmPe3lGyrvkCB$^0O9NC5JKBAYAB16-qpKxm_ENckvYAoa!ri5@0hPM3* zRZ4&<7Lv{>9~sRJd$=IQ#t0O`In5A4aHXWwwXPjb1evs7Zi^Td5#jr)A6PFmVXiXz^PT?-1VGv$u9GNd}OF1A(89X_4 zZ8yO}+`m&tf^0YP20BwU7x-azkbwkePW~lr@$5KEczyfup~9Ga{-}J5W~2M9eu9V( zA(7LktD8EbIwSA|tZ|Z#CNjg}D9>6GmkEkl?2`8bcmRrOVuYTm=c1#-%4z}`t39-o zfD@T@(Ygg7^A8{c$3qzl(xihIwwf|AXX1%A0)Sn&fh(6nedaAzkQBC9U_plbP=J&9 z#)8&IR?~Atlj8JV&lQ}w-Nm^l03)qz4#=DXP4eu97h1P>dFtk4D$&o&eZ%4=~8y-%w@Cp7aB0z^5_yh`4@-fWIIe=jLe99l({;a(d9a zOxBr~KI*2bCrVVkasl}PN6h0T5cL|81L$B+d#}wJwHcQI2_)xqWECk08&{?xt&ac< z4gl>@!mlZ1Q|j0{{UIK%7tHxN#%N+=JsR%)-;R9B_Ci)96V2@fjku<4w0QO0lag}4 zm_fcWbhYHM33}`}MM*uAeZmGtUjdX=%%xXPJ~MyFNDKQQ;+xDCAU>F*dRu*Z4%k%m zo!{RnNxHID&XWeutOthyDD+)`9vuuiNa47KZtOC+`Ks}-b=pL&psoR#cogkC!xa0VS z$t7K`_W7#^h%(f)>HsoKtz_)Zcc?9&IQ-kp34qYugXk7Ydj?L3vVZ&xh zN;i19NTk4m1>AWY*#_^ktBYP$5S~p-J~`#Za;$=wFP8v&2Xjw8exv(A+g`=x5D9|z z%txb7ic!1OU z{0|fGivY2-$Lse;v6trlQtxe~+P%rnB_l*J)FQjuDKb~8>G2eg#$K`h5&{I1Cr6^A zr`z2zUDJ}d2_6Rk6A(HL-RrlmS-0{OHGN5i8AJFt*A=5bg!I7LK9A_IYQpx~YXG9wXshXVOQB@ zd{d#L!C75@lYlF(E7=4pm105)5`C1!#C&tu5QMucuuU9<@q!PEB8Ao6a^j={5yveLCaToQm$=s9P~; zN1&diB91vUhj)u{*<$>!9W%z^^;TL;k57=?r1Kr~C^oV+JZXn}u~Z}hytco9l0M!$ z^~(G4nMKc$0m$Hq^f0Ux-+`uh1sXY@)3xr6tfg7zW76Sh3+m{W$n+Y?wIUIa+CrZ* zJAsX?*w~fdT^0QGU(J4|-9=DgOG`l)(0c9N<4InT4K0>~2ZM$J=?K8f8_4<9&W|1e zlQ@<(WM*rxK~#r}$R%rGTn)gTv30$!T?Em)GfuR}GDSBQHF?6uU3?(PK{^qH1s*dW zpw?iwYV{!GtRo#Rwe1!gx=!E!zeCivg%DATu@LNdqt=3}N;X-vT%-s)kLir1S9-3} zE2CHa@pOjV!h{ehMfHW54nhm&D><+)CID<-hALpB-N?aRpZ^=lwIKLFi!{RdoKk4Q z)e22Co!D&Nh(-pqSr1Z8L`J>vaa}`AH$3k5>OovK(My&ZY||GDzH_7?%z^)nUq2A4 z*N%grfN{X2>q4`+)}N484j(svw>oT+TYV)6 zNkg*;7!`v2mITDPQgf2NwR01|Ru{*cORonf3erW3(}J%5Lgo}<5jSCr40Ex5Ldp1V zi9qvMx^PpwgGDO!xeeW{Ln_nf7Af*RP_5Y5O0Pi+>n--UOeVQE*T!3wP;+WD<51KGZy~zgx)@eLC~*P z8!%UfNLCu>rV{f6oNYwZ^O5= z3QKlYv0(6G!Dj8I{JjEBgzVCCVzG;5^A|7RM^%X|sNxd2>B%$zqa@3eCo{(Tkl3ca z!)`Kpnpb2M-Enmkx#|6AFs4c>+}YTdV^vJ3ae44ETEn_@zq8YO-lP+rFLiU!U&cO@Uj z_J$jF0VuB{c!JzkwIQu;>VZ|=g`Dk+*1j)R;ucI-YlB6lr8Nc}-G;&mwO2oRex!_o zzHeU>tjT5crf-je_Is4}QFiI0-Pls5b@I85;HF7*SGoM^8HbtVS6!C{-X39mp zaH?j(rm)APJG-5>;(MhxRSI41sq}Yy5)=0}a=&^h4OkHg0cWYTy?toS@=f)37whPw z;Y(QgPl%V)^{rPY-N<|Mi#k0g%z{V)^LPP&>4GF|(QauO`YYR%y;U0&0?^5m@r7w1aLOG}B~HP`$1Y2r@& zyQa!#mzg@S@vhhfY#)?vhTpnAJXF1706#GOm8eY6g4KZBvQ!prCSI z6K&ZM^6Tb0yjlQ9T0fRc0XFX-w`=4+Cligc75k@WNwIO6fs3ih88`If8}Nb6-~4uG zKDj`rIH9?48WXxdVU;n`5vE)|bFc>u)Ut8dZHciCSh#01CB;I*LGg1kBqjS-p_wCI z8_U*~2zfCCcbSu4@y1+DV=+S`Kf+nH6{2OC#RLOp*~SDfuDdGyWdZhktc|l(#G_fb zoYq%37we~{PN_TjJbVCEErnqKv`64U|D_rDI@^0sl@E=A0Q$XbeZDk7o%NX-PL0FZ zWQ65wWxKy%>5}U}p^yzGT7dNdQ)^Y|QQKeO5T!0`h9CMhpoaUA`^3GOb#x7`(>v?I z3Cu&iP4lUA?b(RVuZgYAsw^^bZ4AQ$R-}rCzT-S%D<$hi@+tRd7c@#0;#{%g{wXjy zrna+!H;&=8yCkF9)ii491QP?&$CY#_cpGV)*5G={^l_3VP93{qo(I|hQ=D@?9Q)ff z{1P&&L68e@ZmyQx`s@z4mmx%q%ww*K6iX+GO>D+3WDf<9o5_!A8wN1?MS$9k;-b5j}GJNWXeC z!<^zW+@KJF;DyR_?OkmDF-HJh77(e*I)#vMHnxj0UrMU6#`zWP-2}l#f(!J2E7H** zIG7^a8p*3#ni=K8&$2Ef(5n}>Xtoaxn+#M#yyl$f;F(3vm zv2%{L(i6WoDNDDnecL;xXon?1FE0d6Ouft_G|bZN#5?N@bdLkOBbBD% z!p4~6YxH@6nT@zxA*WuH zm6&j4R}$ztmV1Td^$jRV>->jhD`Q$-J10XW0^wF@Hoz!sLcaxvM`kK;q!#4{$BG^w z-c%H&dEz6|s5CHzW@4<}HH%-ddYiq5Y5ohIAZBj*r@Og0&u1S32TFaeKGSUZ9nBOD ztfh1<1hy}No+b7+8j~yIHSUb6;qv&03)JnzG9bv#8M_?unfeZ{`3cv|=;V$2!yiObkgL3YYfuL4okCu8(0 z(XXfu(Ef1(QTKq`dwkU_7=$ATaL}hT^sykk4#8>|rjv5xKG=pA6lGsha1u*`R;MX! zH7i47n)#aHKw3qo=wKO znQ_8j5F9apBy7L7`dIuIFxhg#>~vP} zoj)_Ob=!+rhBVF2aHM!oWcQiVpX&%lw1vsS8?WpIL4ACF4dCM|5q(&Gl5gz_r4Vto zO-9P08QLDN`q9fGbX+g5W4h9uGVnm49(fi-Ib|w&0J+cywZfJL$Ls>%>Gw$t$?ZgTr$ZXSxY+m`<{q0=DEiOHMG@-K;#^KO_Gw5b z)l{NHjArl6>70Bz@+RaSJ)Qr%MK2IY51U{(SL?ikRxGc2D87?XRCo5pC|w{Z#GNd9 z((f{Mc%w7!ka6$omJP&reWAiF4lP32dc$*jGF!>q*|scLSy zcc%LtT1y?8HxOZ52RAT;v3s+3hjC|ON`7WjF_c-;9^-s-5ROJB9x_W~9QyR4NU%PU z`h}ePJ-T{~yxgUD@5}7_A6%tHnNPHhK6Vu5*Vy7z#31nSg15+4U!$41xmd`*-1%MO zfB{IQ%*bm%F}vs82=$BBIymW2)5u@4lIJ~X$nkqHg9o!IVh932l}99kap=JLq4DF4 zlqYXE+I0;V3<2P%iRp3s>gV80Nd=`w`nBGveJaW)^?0+wkJ1P4N)eU#Rvz=<=1?=$ zDR3uC{C5*&B4aDfM(#x;GHoPylI?2AwiocEUZO@m5+dJL6Z|Pc#=6I1U!`55@afNr zBjw-{O`9g3DA3XNN{(%#Ih z6jV?UiWw;xw#It%$Od7hiib!|Ec)>gLjVQp!rJPDo<+$Td`=|E%$F20}F zP#sbw!OJm+n|7n(VQnMm5o&cT5^D4(LjCs;Nh&|_xy0%+xo2fU;l z@|Er8D9w2t;7=3Ew=Is;gIU&RUBtS}VL!w z$4sCoyc&uhMs^lYR;F|WO(G3V=_ZfVxAf+Hao1B^5Kih)-y!`S$Lo7I%!1E=YILz2 zqd+eV9jb*6f4E4)o)izMBCNR+vxk;q4a9|wQ;(2&A;QEzI}4R66cw@zbz%iUdH^B5 z46mem-M~4JsB@>B94yIaYICUsl%3tk$m(HGK)&V!-*EE>DjwLOrV!%R|Cj?%hh){k*YJGVM9gfGpHi zVVwdPJ`%{l8gx&`(nK3@KyE%ql-cc;r=7BsjQD+BU&%`o>!`R61ui1pEQi&53k+Cr zp&RH+5G`LJ!#maRh)GCr9{7+QFhuGd@>hgSu8^>$j?Y#hzzERXCP_0GC_<%yuCE>t zJFQ8?tzMGxOC5hw$a-!HR;w^}`{pHGatMLc9OR@Z-&MpIq$!evTS=;Yc$E&!ar-AK zoH=bIs=ka?ft`EA^U~cSGhE()QYc`dSlGmk0{}bujOaXRPvwFIv=5O6d$&$0L7VY)GfAHFZ`Uh2a_zg7h}-gU;_dbc02(c;TOG`U;_I*mxQN;_57#hz=0|1p@^ zss-Bi7U}}xKDtdtTGI{Q0o`J{Q>L_RLn^(Co@*Qy>cvbyvHIn?pC|vr5>ACyg||=7 zx)S@k&J#etyK@jjsqur0Nsd~1JC1}md$z5z-k0GQmcTb{;8FutX#v%X2yXe zKR+K0q>AtKZCN{aw?oU;w#k$!hE&~kTD-%{5lDn0v@<#r|C3SS;SBU(T7V}jK#n7} zj&-CyfFgjh)POluo#41o!5DY~s2u;Cg_z7Ntvw^xM0?AjVA(Yu49?q9F{Q1Ew_R(K zy#-9VIPDqlM2G@(^|jL1+wHfKU|xt(U>(1i?UeQ0i?3hQR6%`wO7(BvIRHD;sYKr7 zRUtZr5O42^VB$|N`-abmCBfi{6iDQp8S?#(zgIoLgKL1vQWJf@_-NXE3pUe?40rf~ zelX6Q$dMd)Rk#5-gq#4qgq2*PxIDMp_MO?N==949ZINRo6~vIl*Xg@?>~VSAD}QF^ z`07M0P}){V=2TRlaQ`dw;HOLGEZD5EUu6El2(JO!K_RWoWHs)_=osZ^)@YT102d~> zH)Znrp1^9Q{8yetKSvns9`heGTQ&E~IuV$*vCJASDF?!ro3;yc#$pwu3MDqKUaDV3 zTxnyXze|JMo%*HtgJ4qr0AN)7oT2j>7%zfAzOUkKKl!$-oDEzG{034YIar(fbwH=*=<2I>Diuye?Zy$C)SVoXTPd~F3X`fKY;YJ-Hq$4GT0%yR(2LO>! zA>V34EPqdNG5HQOOFPX;Ua13=&>XuFhIw*$ggMurn-iZ8_;yDVUeVUPcQ|pc^uTo~ z^h82A$I2A(9XPlm6qH{7DMaCjw*u8gGync=Ufw;JwdUA|cIF{7t-~Qw%QNIGt9nf&VrM zDfr8o(zzqkOXSBQk_-QD>JW!cg|cUVBwke#5SK-b?(J<~JnmCp@1$?3s;ai?BRvp6 zzXa$$NdRx8_8^c=V~WW%j`nBRgPyL%sqy$xi?OAl`yX+yXnu%`iBBGx3jyIGel-PS)jGZ6+8PFn5g0&S^%Ucc;kqYDHsci-aUxjkzEM zC2lUguI+ztVZ@3*i%0I9V1bFBm@-3{M$R;-a=8TN3AqQs@^;k0zj`q%B-V+M&?+#; zV#-rj*b<2UZ@b1wh~&dOrl>sek|H4KMIADh37rD1gNp`S!P@v9CrDhADJC#HlzOP)vJ?UI}-{_d)fdL`t**-*la3RtSV z(b9MQd8EqqMPM5=egkY?YeXDJhExqLh?O0HF8xpMuAb%#Hft@eX7Od-)2RCCKJHKJJMFnZ+~;>bFt5KbR2K8@L>C~75I6_ zIZPJ+5P0s*pz+|JbX5dnTm=2+)}KxBp@N0T8@(tC8x>ecky6$m%|QW@lNYGS{&T&# z#hnP5sT+-bhm_0QJ>`9l><6C%r*;siVL(3#b+W4_Rlt&QG|znudM^17GKI@9W>8U+ zPGw0GvH9m8uB874@96Jx{d&AG%{JKD%`*I+H{;mhINiLaK}WGLt_fYcl#2G)?*T3E z*_;~<{ECnR{`aqds=K*Txv&mK!cSBb+5U;nwNKRH!4n_Qp5Hi0qocJ8RtK+pmVkH@ zgT_cl_8TTlZe91ZE?}ID@T%y4Z9dtTh#*&5*%&sQ$vBsKS)|3BYvd~#k??kFqr+J& zkG~uANKF|g?{0g&IiFK22kVeu7gif{nu8pd1QR|IvDguKnCq_LVau12SsDso%Xa0R z`1kjBywrC+N_!vCv_I4^ZKW4Te2t>;veSrPZes{XM@ z2B#MXS`M5uU|oX1?17}rDI3HaA$+J~z3Yr~lQ~JEI=@{c{y?(6-B_l-;=JZX{-x5D zYiBMOo92R_%b8Vv0>3bOgo!ckk%Af&3W*Kb!@g0{oh-B>q}!Ol5rUw_f-OinNLl;W zt`LLpE>ow^q2?`38V;~wp6P4IVPXB#he)Az1u0}WDz#T-H!~6lvOoQS$Uw9kweu&f zVC-&wrFF*VWW2J?A4|Fm#^XKTx;fQa^Oy93VOih*Adm~p4*`ClccQ{qjMtO? zI3V@_fO-PUoNak4UZOTh)IqX5u~<*Iqkemua6DtZer&QNP3w|-qoMv4oy56Q{{1k5 zKgvhN(T!^kB0q*FFM=3uN$6>wMLcs}jDqY*7&BYK`uRS+H~yWdN0D6iAxtjQ|8msz z6Zlsuv4Nx~czBi#>A!CZqEdk`Qzfa<=TZr3v7*J(uWIPoJEx(O9@|vh4z<&A7$C;+ z=a>)yVH^6&MTI<@Kj%h#JMxX>q)q#_A$<;-V=*vS2H@DdHSP-$`!4}reAHM0?!oPm z&QPCO3YM;JpL$udl%|IPcLAt$xW+5A?}>=Vqk)i9S3@Aw-O5kPqKJRlI}q}$-^T9J z&OfFmBDeNDeq|0`VW^MkX&W*)!AYG#=$&-qS%G$o4Xp-_MAsYpzpGu=f=R^1pnTc4$j|8{g~sbvOyyhA-N*aAzp&7RaQnqIv%!4b`5#RLRhB#SEb_^gfw zc!{=>B3M<-MQ3XHP6>k^yJs&yuAOgw|LGIw^@$I1)=1} z@8-mtwcdrby2CbdsmPC>us=8C5Scb#D|hyRzq;u7+Pd==+FKR(qt1E1$@HRmYNp0V zr`GG*2QL4Eb*|Ku18BC9!>GEPtYOnmNQIo2IIuSYh$P9$p+|qfO~tW-Ds$)LZDNa{soSj8{P^<5D|g z8*%W8_ztrt8cZ!Sa*zn!`U$H#4Mqq6+Y7#ag`~V-3u2Xa``$8(v#V7u9!Z8ocfcxj z`c;Y$7m3FZU6LvPymil!KJqQ-^IVe%Yuit3s;S>%ww|)Twg2zzUZ1hu%X&|n02{m% z!*W@_MVjem2d^|2Y~w~zS{el`zpoU3F_N9Ah3sjuIGD^X-{vowmmjY2XdDYp*5Og*EF1`Bj^>HE9TL(y;{nm0yy!?Ny%Y{QIO0!wo5guBMUYI6pLIe~tE$Hmcv%Unlt&ykkUgB=&R;E_lT zAv7iTtgV5=w`GwENPU~$c?9hWg{%r2V$S7I6Lr%80v~kLpp+&Ia3FPmAq`>Q6??3l zgv7Bxg}&**a4OWeQ4|ibzT7e9?lKc5nj|D`;Y{gnd9(=ikzr|B-v=`kQj>q$D%|p z{!!K(1{Tc*`Hyk>NMotiRKKXQi%BB#@OKlhoTu5&*bD2?-hAV;Pjsgd*ca1RUyibf zi|Cy$O+D6#?l|xFvKc)h>D*Z%(um6z*<+e0xb`w#uj2yxPv5)m&QIrK)0LkK2Sjixb|FvRFqZNkC-H}f;4I4r1}8+O~t=@ z=4D;FqJ5+xY!-~?v+4l`h&)A1u~WlLs^=-blLnQ5 zZlFqfRK5ubFdl;SU9%Iw7m`{IrF}jx34++sHauGPe+S1r<=m;=i8TWpFVr2-gO^%? zM3RSPv{D~Z_$7irB43{rWrSJWWXpV0Y-HCbYv6bP5?V-3Amp|{n6c7VLt1P<{jF{S z;n`KOkZf-PL?>%R3X+9XKgF}}ngNS%(!gFR)C6feb2eoGT-e-Bg4(g}a{WKNi{h=~ za1?sJ-4c!VoR21!pX3?`tb4bDA_n@~uqtbZ8oV{`xV%h20o^7rzc+`SqIzV}#mAr_ zW9XStg9cK<@j0JW^-t~fEjeF`y7qvHB-!cC9nCM?WB{yRj`7qBtkUT4(m|9AtKV7D zg4bxqr-`M#yD#9&{bp&S7r#OQX?CjY{&dS#b`3AL0bR88^iWeV<(RA{&QaWe8na0} za+|DluEI1-XJ-wTNm*a8d-Y_l&d+H!A+IgEd4BPPnSCue3!JJ{p4-eVTBzksO><=z ziDHL>ch>80u8%K!de9O|VHh-sw}9B98`MGX^)`2HrXYzex9a8&MUtc)93EMr+!0rT zRX#*?FW##CBWW^M%nc}qA`I2=!&@2PUB8S^VkbSuF(kz>hS^~Cej)a+|7P<{J1IYu zIcx+_;4vB*wF7H>-zvRNi4}kl!ZI(uEisV+dGi!d5RlW-@v&pp@R4d7x?yAF3uHm# z#)HxOw$RFuV+DttTUu6ufWZN0tM=4lI09NCfS9ppXD73lmx&K z0uxI^F;Eh0vs)%Fc7IxUhG9B?T}bg}7b>gla69N2$8rW#KA#(nZ!>m_fKS7Ze~cc% z1Q3H>bNnpvJw|hG`%<)zD9Uhi@qB5`?^Ke9b!z9qqR$EwChdN(Q&T90L6+f_R>;3) zCA}eM-YD^#|B^fTiD8sjlV<=k;)e3NG`MT-e{Q(3H%qNGITgzKkESt z!gChR_L`J0o3&6M5S3|>!33-1g2_-d2N%?na@_@B(093_&RW(9*dJ9~aOlpNm#GYU zIRH2U<|w}@ofg#yk1~niK%c?Mdh(x^zg@K7&TJuMGAV&92<{B`Y*B1DP}otQg*R8L zS|B$b1n^xT(Rn7^{>oau3_ApD2{?IOm=U? zohSS>ExVx=q)y!)qTBJ?us$E6&WwZAPEeW|biD*sT5|HN{hYacAnsQyw^Mnw<)o*l z-8 zW;-fWXHR4V-+0qP5MfldCR0O$d{(PUsGJB}!_{Gm))`8`08;G$KR!7qYLCqAMPBS$ zTsyr(W0PFfD)+TM;VIt>kx7#3P%&%@W*RkV-1Z}je+KGzlr3zn4OQ_0;I1z3?+o0} zk}218y6x1ftBrV=C#4-TK20SBZXs1~WJDU{4*gbtF9A3AANFt{XXyJ?@HPJkr}1Wl zKqv$3sjFY+aEVYM7g|P&DASk0ItK+JUdf-nTW5YC5+&_DNb(%cwF(y;C_9^#C|yjn ziwn+GBTjuTJ-vXNLoo?LdwH!P0igqCC;uF5wzEXc6;#2>R(^y?{7!7u7bA*tcy01Z zX(d?>HP75=#w=n?r@Vbsfo0l_;9vl*F}LCtD#`UR3PXI#Ok@t}h@%JK_OI-gbOY&} zuce8^@-E+Lg8c~=G$B1`nQ=aI3~QJwNycfdbl3ZNdTmGTBzLmA`cuPk@3Y(`4F6Pm+bR8 z7vDjmTHjz|S3EE+W!PNxB9SD3D9E;O4v;fP<1&Xn5Ps|<-&X61lo=-!4OtC7#iu2& z^HwR5eq2FM)B%dSLD#@kA%-wU@xJOyN&`nKmCB8w-jd!^jk4 z@J)_5iKJMlN&}>0kzRYmi+)(oa$Is~OFul+4w;(IV(+a@2xp`sS}E`mtKaJAsClxC(6Tm)EZA86G{}6GdLnJW)V7ESPdJ1IJE0t z<`{OLK0CeOrh)ZMzd5bNy#=f7VvlWKvZ=5e}9H&jUtkGXw1d4P(B#v>y*fssyJ zp3jXkg%IqJbz=aCFdyuGz@51QiPSoaYT!TA+%oT#c{4$ZG4vsuRnx_Ce$TFxd>8i_ za|(RPaH5o}bYdNpv=#8eoDnf7O8#JC0mepH@98Mq6KAG;0a9nL!3dSEXmcj_meEM- zrMG~qHapGyGGhzIuittxqTzFd{!Z)V!y!TRb)Y){#P0q9z0y1OErU+`d;5|YhglN; zk{nnSZ<`W>R6A%>YHjH121HVuim?!%4MXQ;z;QD(+4%p_%o{yA_eP_HQqBMjbU$m4 z*wW?rdG*Yw0m;vsgU)W?`2lGS|#IoJOS zJ&2+XRmhT!W;)4r5Nq06zyUXt@Wc*G;5_b54I-kJKodgRq?y@M)Y6`PXfrlOo0!@s z@Q_+o4)J&Y3CNe@#-3CWiS^NF&>?z~U(m;dpuzp^#gXogbjp$^+2F$r(K0wx?xyjW z;!^d#TeR+4X>-2QkmdluZq#z%+NCC+TZPOxd|)rs2YF(Dw1inQtDC&A5iLJh!3Q5E zk%=o~X&sgb#N!49;^}q6t)2dcBsPiO1*SC&VwJ6DF1=K5NEiudQ%XQ4uVO*+vA;nv zA}cM@ygvbB1Pk7)QW)17fIL)+3^SW5&fX%DF#TEN%oar|drpe$fo#vvjH-gD;o#ME z3t;_DCU2kabM!BF#7X{I$aNdf2Y$H6?6;C2z2_MZdkw`QR7(soP<8Y2JLd(Qk8+J7 zcUA-k&yQvnfhVuFCKI2}it!#H3ty_OFz}CxLs?Fw`h5c2MMARFR(})29`qggd!Kng zvpu#I24!E_eSLbBAS@IL+5zX4uT&LV>9+G)sde8OLQqbcEcrSM7lD9s+rH=*A{IE5 ztR6k|jHig`Fe`Z}KaUrT>2`E9#*y&}<~9>Zi{oju6A-o7gcWB`&i(T$4S z#bL2p`V;wP|4*b!q**rCqxQ|aJVC)2M;o}n&6*hrqPq#3R^5w?IofA_Bcw5~>eB^k zVplOs)g&TprjgWp!oH`91=#_jTHYm=AMZ1+^Rq-ZzJGm4Uo6J@NNlAu3q^^XLb%s@ znUfcs{wPm}@JPMMZ^T0DfJPAgTR(YPv@7poJjXmpWS`8?M@X}L*j3OOe5!|rI77K+Gpp=rldP^KpRkR^?JIIlPqT1Go$oJju_qTTkwkWMS zcobi|r_F}YpU+(Cplae3f9D;26lV2MehBHB$aWx)u4q(V?8%`_y+GcXV10-FAIM9! zQ{zS>gBnyp?bn;>(n=}sJBpmC`|DGyUB4BaCyqqV;tagimkvii?tu_Bh`~0Q*7Xik zCvO>d8dpb*Hbw?Z$;>oSaxinH8t8Idt^8N3tPyJ^#>0u+U>Tfkv?8x7I#&rFf+e)F zLxE<{>xQ`)-{h(*F$Vi#Zt8$fsTRY}s`wf<&>ZDmM(r>!BCM$GLk8;88ZDGbrA}<@ zOZ#RFvkDXua_c5Di#Z?&Z{}S(SU3#)uP;6tcBAuf|xH?6N{u~l;1!dBPUd1!2R{$iPe8Z zYTX%I)fy{3O@;)1$z_Wu3oZLHombMi!>~FcIDq|AY}VV5cP$7q+H%5%-YbXES>e9r zEu7y@RmfV#)t!gU@U$Z%4Ap8Yw&?gPnvh5f7UV=7P#Qp;$RTy;VXm+XCUCW6J3I50 zye@zb-?es&Ze5GNFs~hnP@%k--&9aM$G&!<#V%}lMs;an0v%3cKs;@(CclEc(^spk zDVQQ0SrxX5im6O!HIr4Emi*yt8Gb;LSQ^4eKtBNVdp;iFy<+z0yfr`}5^?{&y*8U~ zlOF{k=A)p{kWj6pu3V?R`f{db+RPZg_mmj%{SBp|VrCcr3=k>cvn)UNi%c1LG36pb zhF@V(h&`_+1cglu*a$1DlZ9g4{cx*dxjap`F%f<3=o}jp2ba5DIF>vrN7?b2+vSO^ z5nR*`8g9EF1)*~!MwRYWKI7y8#?gc`vDiMGIl2@m2t$;u0zNr^geyZDUXlOI79@kR zh*i?arVus%I2zjQKB7(KB03H9W2N#MU!EouqB{aEn zr1|-n4qHK5Vw&Q@@xdwZ(uMnK5`(d)X$=IlH1PWSps^Vj^xWQqsqAfl8d2W9pKZn; zuF9wUjsPY`mgbOdxu$W8F01|_Gx=$=KT$g+&|=Y;EnHX@e~Hs<97PBBHNO>u(`_E- zR%3T{YbNJ^RFhV`@IB&@64LQ+P01N38o(FvtZ3$UgiYGv@RvleAab;Cg*W|L8QagL zBnah~^@d&*L%vT)@#vktLN?tUFA`7|3;cM{E{8nZ)sCmFcc|tx>FYDof<(1YENWJV zQwi&>jT$x1*|_oLj#E!>TE>$XhslCTzZRwSR+#c(g2977hjhFj++i#QFU2ze_h#+FaQcJ4^7Fs( zcx>h+`y>f%jJ!9<3?0_SU?}99BIi#nzsK8P6!UY5N3|Z#r2-#p2Wr7Z0^W9^D!k^&1ax{lUn6F2w(VHnA1ga6{mVNB zX?$O<$7kM|A(awmd6!vf$2uPuex;)k7AOPM8wThAp*v2B<>rKao3af2f_K%ox;|@e zw^=V(hXRXElzVDPqE{#4AV#8`!;g>_et&o!e5)@S>{lj`V|uhx)mADR7M+_oue?&| z*g;a<^sq90alY-r%r3Zr`Vlw|W39w!R3Jawa@XUTV)UvQ!*~iQ5Fwbb5$k`jt6L0n zxK4DCsH082$$M$=ECPTUoD6R(R-q&vH$;Q0bK$H;sMpE{S8IXFh=R9?VUJv?-TCAZ zw?^1Q7yEycwIHO*dJ^U&QJ#%Q@w%)1&5+3fy25y%ELsBQUM^Q>ZiU#U2minwv-t;u}fmSo86jLdXO5Hcrh51k zHXV_3(E3k8FYzY08t$Mfv?h|cv|pb-D97Zi#Cuj^XXU5iS%^qM`9$<3u8_tjf<-vA zXCa>m^iVW$Jnj4hoO@;7?6p$|F|akn2h`PB>FaN3YNd1xV*xG!j1%XaOAE6MHwOcDx-`S#+?AC0c7Fc9x*fuPz zbottImx=8*(m~LfquPl3)p`9|XdM=aN@*Xinb)XcwDz&YgszKJs3p+1cPcofbCWJe z8;lUMV;CN`>*zBbOE+1#QS3ym{lUt4>M1pP^9r?PQxb5DmR2W(Zu7n*A@9^lbW<93 zW=x0G^<(SXH~^Ifgmubz(7^BDuDzt zOQ}Le09Jl*fg-Lhp_pt1NrVXg@4At^H{;Rty5|H8NK(ew$2oc)YBAJD+~Vh~iYi26 zT7)`ke(um8uJobUkQQp~MJ!~~e3dJn1U*SHC2`$12@acD5LVeOP8V=*5*KK;BsLQD ze7bLdmMQ?%YKwomPaP=cR-=WHyxNroN0=%>{;pHri zNnOp&<3Epx@BEY%P34#dbd;liNLdbRm)&VR6l4t7KS9;yjfSHz-SGqbBWa|+&%Fj* z!yf*sP+H%$lnj40M~Q_B3nbq~F->Oaf8=W_@>T0l*_bb73gDn}Hhne10p=g~jytM} z_JXFOvL69T;v0nLazBlBgn}9AMN?L@F&sO91TJ4L1Q0)`9lz5VCD{K#cF+_A?7F;M z;H%zWc!A1``CIx=n@OoD2V7$A(*Z{;woAamEGiuTyWcpIE9MD3)T2A37NGSRoWlGL z&Yup%C~!WDW3@Y%%pk_k|FV~^G|uUJUzb9_wK!1h1kD$^7ohVnHgeiVWT}Dkvdezx zvFXz%S7<$c`9Q|uE5X7sB_UN<3hS;(ASCsV*$CDNk?Z>PdEA#jriv+@185M7x{Ml! z(I45GEt}RM2VD9qTSpp__y79kkFV7Sfy6y?T^32ii+9anTx&5v=Ls7P$c8(hTJn^r z50kNfOwO=D_=|ECAj#Jd|Bo8<9TuQhl}tj(Ba17xIUW$`d+x^nr%8go@ve)+9TYA0 zpec9Qy*fO??;oeR#&iqSt=^>QBFx6yer1pCC+pixRbq|*DOKoxkszDwQN^}n%eW)Q zjUbrMMSMcmcb)z~m^+}w#({7(Xe29Jc{ph3F?o~t&R;W=d33FnBXkZoW{GQuM42ha(A-G_-Htob5umhh*O?uvc409;wFvrFPxev2J{{e7 zqCnCK9%*l3FC_y0QG5nWdv#Fu3JtsC>C+a#PPOmjI_Ndl?d8&Kaym zJ#R@Ovf>xc*Gd8GxMbVqK$QXrRB%(dG13Wov^=K`JH`*%Io=tBq1%L4X;GPVtt6*G zMq=19jS2)9k0Rn#@MkQQPK1(lKim)wGG*cVfc~Z6)j2im;(_3?#P%UN_8Wy>>|M%?D^GHV=?$< zijn)>z%OI3>-GyKncrHZUlKjJL8LF`d7A$Cq-T&$(wiQ+dN{90WU& zyxS&Rj}IFbJI|Uju%|_W`=F-tnoX8nF}8YLe|hsn|chbW8Gt${w0`zDE9_qtvVehf^8ZF*5(C%y!VxCDkRU_Z{5xvpg{9Wk$tb; zDBTeZ{PQhQOv`m|uJj~?!vVr_Ucj-7;!7Iuh>?2cc11_) z@!0>i5pv=&3b#1Gd(qUJs8JiKo3EJUD1pa+Y9(%G9zGmGOAJ^7q|ZLfN~WWH`B0s1 z^C=?1P5*Fy>|cOPRWG6(vbF+irfHe$ClAjwBp3w^t1rYY6cb#1&r5nw_A9atlPUDv1Gtq0Mk)>ScFsy-jyZPg3 z_Uu3WtZ568unGnj(|+#nCiSaHj?6B+4&FElRBh^i+etK(r*Bhp&RAW5^_2%?%emrP zU-Ub;oN2We zWA#w~#n{v~;Y!6h)ImD$^zz9W3ANH@0-OmSjtmE}F-_mB;aNt;BmvYe)m5e6klna3 z-@KsCWJR$O^@E+X;QlA;g02Kham~*0f~T7i4yuAON%ln2Rd`^Qp#B-qD&oRB{xXED zMNh=DKz#9vp_qv1BT%~zfw_#+Uoou5n$*H&!}f?kb|{QljsqK|+$1FU45=viV8D|M zS=<7=epoV=ZO-tssb%}hQ@5Zt(mda`nkK`3ws-A==Cc)hAR|nYnuYEFBXnRMy{s9j z0MPS9nD3Ow+T&*~nVBgqom5Lv2F}*_z_rpI;_D>QC0M10;y~8>!3hFlx#>?GzdXLF zo{Cte(+8=^NE_pk)&OPQ<_M__x-YM>s2hCtV~~|ru8ANE<@%QmGroeD-g!Cj`qKVo z#}+4wPK3h4Y>Cx2ZGTj@FIdmY0!Xvd>N`% zJFlROfzo`g=vO$SE zH=C9%l+S796T$Hn(&|^UhqxGKJ3=#Hj0(ptN1+*iTqT};3zd!umHT24yCx@Rrm6El zxhBAw1yXv=gODPTl8?Rd-X>4v$hh)P=On@-XKF>s>N-wr-5_5HyjV>pgEHGXwiB&o zhzdo+aoC(3rrb#K-=eOXvk&(h04wGw_=lhz88pWA#4!9Wfo8BJmo;0hspA7M7<|t^ z;DPy1Q{1sDIAeI$pb6Ue3RAiX(lBXn^|t~y-_pQfZ=K?(kA%H*cDKR-q9dvBhqcN- zocSEI3OpSCUZAtA+xo|8pD#v1JK05QlGx4x(UblNruZ^JjlavHS8~^R(CKrsAr&>t zA>Wu;NzTbHN?VUoGb@EWf8U>L3^_~%9mI%*!gVHtFhZucY+sVuC>w>$U+%+`Du?H| z54aq152>Tpd8u`AwXFs(SLJ-F1BOsW-mW70Nts+M|2Vu(zX7dqBO3*<5+a*Vqk5^y z2=yJ8LSyf85{#?ad)Ea9bO-CC*S%97Hgt$MxSA0F%Pta4Tc~ct`fkxf5~(v+Ok?Hx zbl@r~ES)@db`6>T;Z_-P;Un(@MnJ$Mc@5ZvfO|XvYl2QGaR(+5^3YUt{?(@~I&()gOb z585dA-K>wSyGI==8s67zyBOlHbiXflrLNB{Anb2Kv(^8lgAs8qb|;)SSFt&!5$P;N zTv54D`{_KN_LDLbR;F8#l)NySX-dz-yV>XgXRo`J&|>(M5)nGTE7ubfyVq)GU5hoz@DQVguQo&15D@$4ILKKF;c@z(Mk#m=W=vA{Z0>00)~)$z1B419`J^Ka;K}hDsNrDdvy~-6N#w<&i=r zI*15+Z4UVu7_IG#=urhCk?mZvGCHE1q5_@uHw_&5$^ih&NjHdF9-D*hbFXfaFy=MR zS~eygc1Ja#&>(H9?i_V?Jk!8_P<6=GP80}6{5vFi%)3~}LD&}b5?#U2`QAv=9${tS z{uGVIR4Zgh)MCBo#(zr{_dPhqE;{`V4#U0?w~0$_>eQgzWU8q<`7H(oJ2~w>>5kRD zH+k-3i10L<^nb(Y7vL|bvIfCuv?{uc;uIju(3B(KZtsLjce6+H#i`pC=6xtJ-iV$f z%esEJf*-fRbr_(4v`xrHcOp)L@8_*Yp7N*nZF%f#uv0JI1Kw?S>s)N63BDVWOAUG^ zdizXOggZx({5jk$Tcu#5?KF}_U;K#uRi?Gh}rh`u963YB2x z0WT%rtXi%I^8Z;jW*<^NAZS@ABa%;$z`!VVqszR`3KqL_rT1+tRj3L=T-o(iuvIMJ zijz2pHv&@43$oC8e(TcwV(x-AB_bp05R@z#``Mw&)>8bl=R}EhI1id9vk{Dq-8`-b z`wOfbgcG$P2>XEvbTKrlK!dpx^?p%QMil=$KtsU{?-O=f8{&2e(9yw*SQ>*7d#nv_ zu1ej3tbfbd6{+)UTNOJ*@U)o~_6xhsk=K;A5_~a;r)G!=x|S*nH4OpF_$g}8@?Ya# zC-%29N0J*MDhC}@CWilrwfAaT-AxuA^!SCyp^+j7nwlk13%zFlo34gJj7xaH=DoI4 zDov;zaoK1~$PU=vdpRJ&2P*d+xG0B`!C)P&Sw5YWRFh{x;-K}1F!LRXH%v_YC$J9T z53|FRS23O!jQLlBXSru^kZPU@A;Bt2BYm!umX-6)IXtm@bRERa#Za&wM3H_jIKggH zgeJ^PC3Cg|cOp;8n0%&`HI)uVxj+a(f;^F8RQ4qgf8lr`3;0%s;R&;bCbO^Xn_I#I zb~wb^r?1K)jvM2818WOdi>Om&1LWD3eQAYo*%N`F#!ao~m=sT

3e)p(=kU8X}z- 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
SV-vG_d_jKpN)DlBBqLR*V+4uk-lJ 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ʗfL&aI!OrJi$QBCfnA*JBB+ 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 z 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 J00004Sz20(sWJcn literal 0 HcmV?d00001 diff --git a/kernel/tools/perf/files/patches/mageia/fs-MAINTAINERS-add-exfat-filesystem.patch b/kernel/tools/perf/files/patches/mageia/fs-MAINTAINERS-add-exfat-filesystem.patch deleted file mode 100644 index 750af05704..0000000000 --- a/kernel/tools/perf/files/patches/mageia/fs-MAINTAINERS-add-exfat-filesystem.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 88ab55f16aae90e2e974eb67cc2380edb92b0661 Mon Sep 17 00:00:00 2001 -From: Namjae Jeon -Date: Mon, 2 Mar 2020 15:21:43 +0900 -Subject: [PATCH 12/14] MAINTAINERS: add exfat filesystem -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Add myself and Sungjong Seo as exfat maintainer. - -Signed-off-by: Namjae Jeon -Signed-off-by: Sungjong Seo -Reviewed-by: Pali Rohár -Reviewed-by: Christoph Hellwig -Signed-off-by: Al Viro ---- - MAINTAINERS | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/MAINTAINERS b/MAINTAINERS -index 38fe2f3f7b6f..27d912bc5ae2 100644 ---- a/MAINTAINERS -+++ b/MAINTAINERS -@@ -6240,6 +6240,13 @@ F: include/trace/events/mdio.h - F: include/uapi/linux/mdio.h - F: include/uapi/linux/mii.h - -+EXFAT FILE SYSTEM -+M: Namjae Jeon -+M: Sungjong Seo -+L: linux-fsdevel@vger.kernel.org -+S: Maintained -+F: fs/exfat/ -+ - EXT2 FILE SYSTEM - M: Jan Kara - L: linux-ext4@vger.kernel.org --- -2.25.1 diff --git a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-Kconfig-and-Makefile.patch b/kernel/tools/perf/files/patches/mageia/fs-exfat-add-Kconfig-and-Makefile.patch deleted file mode 100644 index 674116ff3b..0000000000 --- a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-Kconfig-and-Makefile.patch +++ /dev/null @@ -1,96 +0,0 @@ -From b9d1e2e6265f5dc25e9f5dbfbde3e53d8a4958ac Mon Sep 17 00:00:00 2001 -From: Namjae Jeon -Date: Mon, 2 Mar 2020 15:21:42 +0900 -Subject: [PATCH 11/14] exfat: add Kconfig and Makefile -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This adds the Kconfig and Makefile for exfat. - -Signed-off-by: Namjae Jeon -Signed-off-by: Sungjong Seo -Reviewed-by: Pali Rohár -Reviewed-by: Christoph Hellwig -Signed-off-by: Al Viro ---- - fs/Kconfig | 3 ++- - fs/Makefile | 1 + - fs/exfat/Kconfig | 21 +++++++++++++++++++++ - fs/exfat/Makefile | 8 ++++++++ - 4 files changed, 32 insertions(+), 1 deletion(-) - create mode 100644 fs/exfat/Kconfig - create mode 100644 fs/exfat/Makefile - -diff --git a/fs/Kconfig b/fs/Kconfig -index 708ba336e689..f08fbbfafd9a 100644 ---- a/fs/Kconfig -+++ b/fs/Kconfig -@@ -140,9 +140,10 @@ endmenu - endif # BLOCK - - if BLOCK --menu "DOS/FAT/NT Filesystems" -+menu "DOS/FAT/EXFAT/NT Filesystems" - - source "fs/fat/Kconfig" -+source "fs/exfat/Kconfig" - source "fs/ntfs/Kconfig" - - endmenu -diff --git a/fs/Makefile b/fs/Makefile -index 505e51166973..2ce5112b02c8 100644 ---- a/fs/Makefile -+++ b/fs/Makefile -@@ -83,6 +83,7 @@ obj-$(CONFIG_HUGETLBFS) += hugetlbfs/ - obj-$(CONFIG_CODA_FS) += coda/ - obj-$(CONFIG_MINIX_FS) += minix/ - obj-$(CONFIG_FAT_FS) += fat/ -+obj-$(CONFIG_EXFAT_FS) += exfat/ - obj-$(CONFIG_BFS_FS) += bfs/ - obj-$(CONFIG_ISO9660_FS) += isofs/ - obj-$(CONFIG_HFSPLUS_FS) += hfsplus/ # Before hfs to find wrapped HFS+ -diff --git a/fs/exfat/Kconfig b/fs/exfat/Kconfig -new file mode 100644 -index 000000000000..2d3636dc5b8c ---- /dev/null -+++ b/fs/exfat/Kconfig -@@ -0,0 +1,21 @@ -+# SPDX-License-Identifier: GPL-2.0-or-later -+ -+config EXFAT_FS -+ tristate "exFAT filesystem support" -+ select NLS -+ help -+ This allows you to mount devices formatted with the exFAT file system. -+ exFAT is typically used on SD-Cards or USB sticks. -+ -+ To compile this as a module, choose M here: the module will be called -+ exfat. -+ -+config EXFAT_DEFAULT_IOCHARSET -+ string "Default iocharset for exFAT" -+ default "utf8" -+ depends on EXFAT_FS -+ help -+ Set this to the default input/output character set to use for -+ converting between the encoding is used for user visible filename and -+ UTF-16 character that exfat filesystem use, and can be overridden with -+ the "iocharset" mount option for exFAT filesystems. -diff --git a/fs/exfat/Makefile b/fs/exfat/Makefile -new file mode 100644 -index 000000000000..ed51926a4971 ---- /dev/null -+++ b/fs/exfat/Makefile -@@ -0,0 +1,8 @@ -+# SPDX-License-Identifier: GPL-2.0-or-later -+# -+# Makefile for the linux exFAT filesystem support. -+# -+obj-$(CONFIG_EXFAT_FS) += exfat.o -+ -+exfat-y := inode.o namei.o dir.o super.o fatent.o cache.o nls.o misc.o \ -+ file.o balloc.o --- -2.25.1 - diff --git a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-bitmap-operations.patch b/kernel/tools/perf/files/patches/mageia/fs-exfat-add-bitmap-operations.patch deleted file mode 100644 index 5505b30868..0000000000 --- a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-bitmap-operations.patch +++ /dev/null @@ -1,309 +0,0 @@ -From 1e49a94cf707204b66a3fb242f2814712c941f52 Mon Sep 17 00:00:00 2001 -From: Namjae Jeon -Date: Mon, 2 Mar 2020 15:21:38 +0900 -Subject: [PATCH 07/14] exfat: add bitmap operations -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This adds the implementation of bitmap operations for exfat. - -Signed-off-by: Namjae Jeon -Signed-off-by: Sungjong Seo -Reviewed-by: Pali Rohár -Reviewed-by: Christoph Hellwig -Signed-off-by: Al Viro ---- - fs/exfat/balloc.c | 280 ++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 280 insertions(+) - create mode 100644 fs/exfat/balloc.c - -diff --git a/fs/exfat/balloc.c b/fs/exfat/balloc.c -new file mode 100644 -index 000000000000..6a04cc02565a ---- /dev/null -+++ b/fs/exfat/balloc.c -@@ -0,0 +1,280 @@ -+// SPDX-License-Identifier: GPL-2.0-or-later -+/* -+ * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -+ */ -+ -+#include -+#include -+#include -+ -+#include "exfat_raw.h" -+#include "exfat_fs.h" -+ -+static const unsigned char free_bit[] = { -+ 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2,/* 0 ~ 19*/ -+ 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3,/* 20 ~ 39*/ -+ 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2,/* 40 ~ 59*/ -+ 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4,/* 60 ~ 79*/ -+ 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2,/* 80 ~ 99*/ -+ 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3,/*100 ~ 119*/ -+ 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2,/*120 ~ 139*/ -+ 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5,/*140 ~ 159*/ -+ 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2,/*160 ~ 179*/ -+ 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3,/*180 ~ 199*/ -+ 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2,/*200 ~ 219*/ -+ 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4,/*220 ~ 239*/ -+ 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 /*240 ~ 254*/ -+}; -+ -+static const unsigned char used_bit[] = { -+ 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3,/* 0 ~ 19*/ -+ 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4,/* 20 ~ 39*/ -+ 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5,/* 40 ~ 59*/ -+ 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,/* 60 ~ 79*/ -+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4,/* 80 ~ 99*/ -+ 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6,/*100 ~ 119*/ -+ 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4,/*120 ~ 139*/ -+ 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,/*140 ~ 159*/ -+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5,/*160 ~ 179*/ -+ 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5,/*180 ~ 199*/ -+ 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6,/*200 ~ 219*/ -+ 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,/*220 ~ 239*/ -+ 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 /*240 ~ 255*/ -+}; -+ -+/* -+ * Allocation Bitmap Management Functions -+ */ -+static int exfat_allocate_bitmap(struct super_block *sb, -+ struct exfat_dentry *ep) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ long long map_size; -+ unsigned int i, need_map_size; -+ sector_t sector; -+ -+ sbi->map_clu = le32_to_cpu(ep->dentry.bitmap.start_clu); -+ map_size = le64_to_cpu(ep->dentry.bitmap.size); -+ need_map_size = ((EXFAT_DATA_CLUSTER_COUNT(sbi) - 1) / BITS_PER_BYTE) -+ + 1; -+ if (need_map_size != map_size) { -+ exfat_msg(sb, KERN_ERR, -+ "bogus allocation bitmap size(need : %u, cur : %lld)", -+ need_map_size, map_size); -+ /* -+ * Only allowed when bogus allocation -+ * bitmap size is large -+ */ -+ if (need_map_size > map_size) -+ return -EIO; -+ } -+ sbi->map_sectors = ((need_map_size - 1) >> -+ (sb->s_blocksize_bits)) + 1; -+ sbi->vol_amap = kmalloc_array(sbi->map_sectors, -+ sizeof(struct buffer_head *), GFP_KERNEL); -+ if (!sbi->vol_amap) -+ return -ENOMEM; -+ -+ sector = exfat_cluster_to_sector(sbi, sbi->map_clu); -+ for (i = 0; i < sbi->map_sectors; i++) { -+ sbi->vol_amap[i] = sb_bread(sb, sector + i); -+ if (!sbi->vol_amap[i]) { -+ /* release all buffers and free vol_amap */ -+ int j = 0; -+ -+ while (j < i) -+ brelse(sbi->vol_amap[j++]); -+ -+ kfree(sbi->vol_amap); -+ sbi->vol_amap = NULL; -+ return -EIO; -+ } -+ } -+ -+ sbi->pbr_bh = NULL; -+ return 0; -+} -+ -+int exfat_load_bitmap(struct super_block *sb) -+{ -+ unsigned int i, type; -+ struct exfat_chain clu; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ -+ exfat_chain_set(&clu, sbi->root_dir, 0, ALLOC_FAT_CHAIN); -+ while (clu.dir != EXFAT_EOF_CLUSTER) { -+ for (i = 0; i < sbi->dentries_per_clu; i++) { -+ struct exfat_dentry *ep; -+ struct buffer_head *bh; -+ -+ ep = exfat_get_dentry(sb, &clu, i, &bh, NULL); -+ if (!ep) -+ return -EIO; -+ -+ type = exfat_get_entry_type(ep); -+ if (type == TYPE_UNUSED) -+ break; -+ if (type != TYPE_BITMAP) -+ continue; -+ if (ep->dentry.bitmap.flags == 0x0) { -+ int err; -+ -+ err = exfat_allocate_bitmap(sb, ep); -+ brelse(bh); -+ return err; -+ } -+ brelse(bh); -+ } -+ -+ if (exfat_get_next_cluster(sb, &clu.dir)) -+ return -EIO; -+ } -+ -+ return -EINVAL; -+} -+ -+void exfat_free_bitmap(struct exfat_sb_info *sbi) -+{ -+ int i; -+ -+ brelse(sbi->pbr_bh); -+ -+ for (i = 0; i < sbi->map_sectors; i++) -+ __brelse(sbi->vol_amap[i]); -+ -+ kfree(sbi->vol_amap); -+} -+ -+/* -+ * If the value of "clu" is 0, it means cluster 2 which is the first cluster of -+ * the cluster heap. -+ */ -+int exfat_set_bitmap(struct inode *inode, unsigned int clu) -+{ -+ int i, b; -+ unsigned int ent_idx; -+ struct super_block *sb = inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ -+ WARN_ON(clu < EXFAT_FIRST_CLUSTER); -+ ent_idx = CLUSTER_TO_BITMAP_ENT(clu); -+ i = BITMAP_OFFSET_SECTOR_INDEX(sb, ent_idx); -+ b = BITMAP_OFFSET_BIT_IN_SECTOR(sb, ent_idx); -+ -+ set_bit_le(b, sbi->vol_amap[i]->b_data); -+ exfat_update_bh(sb, sbi->vol_amap[i], IS_DIRSYNC(inode)); -+ return 0; -+} -+ -+/* -+ * If the value of "clu" is 0, it means cluster 2 which is the first cluster of -+ * the cluster heap. -+ */ -+void exfat_clear_bitmap(struct inode *inode, unsigned int clu) -+{ -+ int i, b; -+ unsigned int ent_idx; -+ struct super_block *sb = inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct exfat_mount_options *opts = &sbi->options; -+ -+ WARN_ON(clu < EXFAT_FIRST_CLUSTER); -+ ent_idx = CLUSTER_TO_BITMAP_ENT(clu); -+ i = BITMAP_OFFSET_SECTOR_INDEX(sb, ent_idx); -+ b = BITMAP_OFFSET_BIT_IN_SECTOR(sb, ent_idx); -+ -+ clear_bit_le(b, sbi->vol_amap[i]->b_data); -+ exfat_update_bh(sb, sbi->vol_amap[i], IS_DIRSYNC(inode)); -+ -+ if (opts->discard) { -+ int ret_discard; -+ -+ ret_discard = sb_issue_discard(sb, -+ exfat_cluster_to_sector(sbi, clu + -+ EXFAT_RESERVED_CLUSTERS), -+ (1 << sbi->sect_per_clus_bits), GFP_NOFS, 0); -+ -+ if (ret_discard == -EOPNOTSUPP) { -+ exfat_msg(sb, KERN_ERR, -+ "discard not supported by device, disabling"); -+ opts->discard = 0; -+ } -+ } -+} -+ -+/* -+ * If the value of "clu" is 0, it means cluster 2 which is the first cluster of -+ * the cluster heap. -+ */ -+unsigned int exfat_find_free_bitmap(struct super_block *sb, unsigned int clu) -+{ -+ unsigned int i, map_i, map_b, ent_idx; -+ unsigned int clu_base, clu_free; -+ unsigned char k, clu_mask; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ -+ WARN_ON(clu < EXFAT_FIRST_CLUSTER); -+ ent_idx = CLUSTER_TO_BITMAP_ENT(clu); -+ clu_base = BITMAP_ENT_TO_CLUSTER(ent_idx & ~(BITS_PER_BYTE_MASK)); -+ clu_mask = IGNORED_BITS_REMAINED(clu, clu_base); -+ -+ map_i = BITMAP_OFFSET_SECTOR_INDEX(sb, ent_idx); -+ map_b = BITMAP_OFFSET_BYTE_IN_SECTOR(sb, ent_idx); -+ -+ for (i = EXFAT_FIRST_CLUSTER; i < sbi->num_clusters; -+ i += BITS_PER_BYTE) { -+ k = *(sbi->vol_amap[map_i]->b_data + map_b); -+ if (clu_mask > 0) { -+ k |= clu_mask; -+ clu_mask = 0; -+ } -+ if (k < 0xFF) { -+ clu_free = clu_base + free_bit[k]; -+ if (clu_free < sbi->num_clusters) -+ return clu_free; -+ } -+ clu_base += BITS_PER_BYTE; -+ -+ if (++map_b >= sb->s_blocksize || -+ clu_base >= sbi->num_clusters) { -+ if (++map_i >= sbi->map_sectors) { -+ clu_base = EXFAT_FIRST_CLUSTER; -+ map_i = 0; -+ } -+ map_b = 0; -+ } -+ } -+ -+ return EXFAT_EOF_CLUSTER; -+} -+ -+int exfat_count_used_clusters(struct super_block *sb, unsigned int *ret_count) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ unsigned int count = 0; -+ unsigned int i, map_i = 0, map_b = 0; -+ unsigned int total_clus = EXFAT_DATA_CLUSTER_COUNT(sbi); -+ unsigned int last_mask = total_clus & BITS_PER_BYTE_MASK; -+ unsigned char clu_bits; -+ const unsigned char last_bit_mask[] = {0, 0b00000001, 0b00000011, -+ 0b00000111, 0b00001111, 0b00011111, 0b00111111, 0b01111111}; -+ -+ total_clus &= ~last_mask; -+ for (i = 0; i < total_clus; i += BITS_PER_BYTE) { -+ clu_bits = *(sbi->vol_amap[map_i]->b_data + map_b); -+ count += used_bit[clu_bits]; -+ if (++map_b >= (unsigned int)sb->s_blocksize) { -+ map_i++; -+ map_b = 0; -+ } -+ } -+ -+ if (last_mask) { -+ clu_bits = *(sbi->vol_amap[map_i]->b_data + map_b); -+ clu_bits &= last_bit_mask[last_mask]; -+ count += used_bit[clu_bits]; -+ } -+ -+ *ret_count = count; -+ return 0; -+} --- -2.25.1 - diff --git a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-directory-operations.patch b/kernel/tools/perf/files/patches/mageia/fs-exfat-add-directory-operations.patch deleted file mode 100644 index 857c1dbb66..0000000000 --- a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-directory-operations.patch +++ /dev/null @@ -1,1267 +0,0 @@ -From ca06197382bde0a3bc20215595d1c9ce20c6e341 Mon Sep 17 00:00:00 2001 -From: Namjae Jeon -Date: Mon, 2 Mar 2020 15:21:35 +0900 -Subject: [PATCH 04/14] exfat: add directory operations -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This adds the implementation of directory operations for exfat. - -Signed-off-by: Namjae Jeon -Signed-off-by: Sungjong Seo -Reviewed-by: Pali Rohár -Reviewed-by: Christoph Hellwig -Signed-off-by: Al Viro ---- - fs/exfat/dir.c | 1238 ++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 1238 insertions(+) - create mode 100644 fs/exfat/dir.c - -diff --git a/fs/exfat/dir.c b/fs/exfat/dir.c -new file mode 100644 -index 000000000000..4b91afb0f051 ---- /dev/null -+++ b/fs/exfat/dir.c -@@ -0,0 +1,1238 @@ -+// SPDX-License-Identifier: GPL-2.0-or-later -+/* -+ * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -+ */ -+ -+#include -+#include -+#include -+ -+#include "exfat_raw.h" -+#include "exfat_fs.h" -+ -+static int exfat_extract_uni_name(struct exfat_dentry *ep, -+ unsigned short *uniname) -+{ -+ int i, len = 0; -+ -+ for (i = 0; i < EXFAT_FILE_NAME_LEN; i++) { -+ *uniname = le16_to_cpu(ep->dentry.name.unicode_0_14[i]); -+ if (*uniname == 0x0) -+ return len; -+ uniname++; -+ len++; -+ } -+ -+ *uniname = 0x0; -+ return len; -+ -+} -+ -+static void exfat_get_uniname_from_ext_entry(struct super_block *sb, -+ struct exfat_chain *p_dir, int entry, unsigned short *uniname) -+{ -+ int i; -+ struct exfat_dentry *ep; -+ struct exfat_entry_set_cache *es; -+ -+ es = exfat_get_dentry_set(sb, p_dir, entry, ES_ALL_ENTRIES, &ep); -+ if (!es) -+ return; -+ -+ if (es->num_entries < 3) -+ goto free_es; -+ -+ ep += 2; -+ -+ /* -+ * First entry : file entry -+ * Second entry : stream-extension entry -+ * Third entry : first file-name entry -+ * So, the index of first file-name dentry should start from 2. -+ */ -+ for (i = 2; i < es->num_entries; i++, ep++) { -+ /* end of name entry */ -+ if (exfat_get_entry_type(ep) != TYPE_EXTEND) -+ goto free_es; -+ -+ exfat_extract_uni_name(ep, uniname); -+ uniname += EXFAT_FILE_NAME_LEN; -+ } -+ -+free_es: -+ kfree(es); -+} -+ -+/* read a directory entry from the opened directory */ -+static int exfat_readdir(struct inode *inode, struct exfat_dir_entry *dir_entry) -+{ -+ int i, dentries_per_clu, dentries_per_clu_bits = 0; -+ unsigned int type, clu_offset; -+ sector_t sector; -+ struct exfat_chain dir, clu; -+ struct exfat_uni_name uni_name; -+ struct exfat_dentry *ep; -+ struct super_block *sb = inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ unsigned int dentry = ei->rwoffset & 0xFFFFFFFF; -+ struct buffer_head *bh; -+ -+ /* check if the given file ID is opened */ -+ if (ei->type != TYPE_DIR) -+ return -EPERM; -+ -+ if (ei->entry == -1) -+ exfat_chain_set(&dir, sbi->root_dir, 0, ALLOC_FAT_CHAIN); -+ else -+ exfat_chain_set(&dir, ei->start_clu, -+ EXFAT_B_TO_CLU(i_size_read(inode), sbi), ei->flags); -+ -+ dentries_per_clu = sbi->dentries_per_clu; -+ dentries_per_clu_bits = ilog2(dentries_per_clu); -+ -+ clu_offset = dentry >> dentries_per_clu_bits; -+ exfat_chain_dup(&clu, &dir); -+ -+ if (clu.flags == ALLOC_NO_FAT_CHAIN) { -+ clu.dir += clu_offset; -+ clu.size -= clu_offset; -+ } else { -+ /* hint_information */ -+ if (clu_offset > 0 && ei->hint_bmap.off != EXFAT_EOF_CLUSTER && -+ ei->hint_bmap.off > 0 && clu_offset >= ei->hint_bmap.off) { -+ clu_offset -= ei->hint_bmap.off; -+ clu.dir = ei->hint_bmap.clu; -+ } -+ -+ while (clu_offset > 0) { -+ if (exfat_get_next_cluster(sb, &(clu.dir))) -+ return -EIO; -+ -+ clu_offset--; -+ } -+ } -+ -+ while (clu.dir != EXFAT_EOF_CLUSTER) { -+ i = dentry & (dentries_per_clu - 1); -+ -+ for ( ; i < dentries_per_clu; i++, dentry++) { -+ ep = exfat_get_dentry(sb, &clu, i, &bh, §or); -+ if (!ep) -+ return -EIO; -+ -+ type = exfat_get_entry_type(ep); -+ if (type == TYPE_UNUSED) { -+ brelse(bh); -+ break; -+ } -+ -+ if (type != TYPE_FILE && type != TYPE_DIR) { -+ brelse(bh); -+ continue; -+ } -+ -+ dir_entry->attr = le16_to_cpu(ep->dentry.file.attr); -+ exfat_get_entry_time(sbi, &dir_entry->crtime, -+ ep->dentry.file.create_tz, -+ ep->dentry.file.create_time, -+ ep->dentry.file.create_date, -+ ep->dentry.file.create_time_ms); -+ exfat_get_entry_time(sbi, &dir_entry->mtime, -+ ep->dentry.file.modify_tz, -+ ep->dentry.file.modify_time, -+ ep->dentry.file.modify_date, -+ ep->dentry.file.modify_time_ms); -+ exfat_get_entry_time(sbi, &dir_entry->atime, -+ ep->dentry.file.access_tz, -+ ep->dentry.file.access_time, -+ ep->dentry.file.access_date, -+ 0); -+ -+ *uni_name.name = 0x0; -+ exfat_get_uniname_from_ext_entry(sb, &dir, dentry, -+ uni_name.name); -+ exfat_utf16_to_nls(sb, &uni_name, -+ dir_entry->namebuf.lfn, -+ dir_entry->namebuf.lfnbuf_len); -+ brelse(bh); -+ -+ ep = exfat_get_dentry(sb, &clu, i + 1, &bh, NULL); -+ if (!ep) -+ return -EIO; -+ dir_entry->size = -+ le64_to_cpu(ep->dentry.stream.valid_size); -+ brelse(bh); -+ -+ ei->hint_bmap.off = dentry >> dentries_per_clu_bits; -+ ei->hint_bmap.clu = clu.dir; -+ -+ ei->rwoffset = ++dentry; -+ return 0; -+ } -+ -+ if (clu.flags == ALLOC_NO_FAT_CHAIN) { -+ if (--clu.size > 0) -+ clu.dir++; -+ else -+ clu.dir = EXFAT_EOF_CLUSTER; -+ } else { -+ if (exfat_get_next_cluster(sb, &(clu.dir))) -+ return -EIO; -+ } -+ } -+ -+ dir_entry->namebuf.lfn[0] = '\0'; -+ ei->rwoffset = dentry; -+ return 0; -+} -+ -+static void exfat_init_namebuf(struct exfat_dentry_namebuf *nb) -+{ -+ nb->lfn = NULL; -+ nb->lfnbuf_len = 0; -+} -+ -+static int exfat_alloc_namebuf(struct exfat_dentry_namebuf *nb) -+{ -+ nb->lfn = __getname(); -+ if (!nb->lfn) -+ return -ENOMEM; -+ nb->lfnbuf_len = MAX_VFSNAME_BUF_SIZE; -+ return 0; -+} -+ -+static void exfat_free_namebuf(struct exfat_dentry_namebuf *nb) -+{ -+ if (!nb->lfn) -+ return; -+ -+ __putname(nb->lfn); -+ exfat_init_namebuf(nb); -+} -+ -+/* skip iterating emit_dots when dir is empty */ -+#define ITER_POS_FILLED_DOTS (2) -+static int exfat_iterate(struct file *filp, struct dir_context *ctx) -+{ -+ struct inode *inode = filp->f_path.dentry->d_inode; -+ struct super_block *sb = inode->i_sb; -+ struct inode *tmp; -+ struct exfat_dir_entry de; -+ struct exfat_dentry_namebuf *nb = &(de.namebuf); -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ unsigned long inum; -+ loff_t cpos, i_pos; -+ int err = 0, fake_offset = 0; -+ -+ exfat_init_namebuf(nb); -+ mutex_lock(&EXFAT_SB(sb)->s_lock); -+ -+ cpos = ctx->pos; -+ if (!dir_emit_dots(filp, ctx)) -+ goto unlock; -+ -+ if (ctx->pos == ITER_POS_FILLED_DOTS) { -+ cpos = 0; -+ fake_offset = 1; -+ } -+ -+ if (cpos & (DENTRY_SIZE - 1)) { -+ err = -ENOENT; -+ goto unlock; -+ } -+ -+ /* name buffer should be allocated before use */ -+ err = exfat_alloc_namebuf(nb); -+ if (err) -+ goto unlock; -+get_new: -+ ei->rwoffset = EXFAT_B_TO_DEN(cpos); -+ -+ if (cpos >= i_size_read(inode)) -+ goto end_of_dir; -+ -+ err = exfat_readdir(inode, &de); -+ if (err) { -+ /* -+ * At least we tried to read a sector. Move cpos to next sector -+ * position (should be aligned). -+ */ -+ if (err == -EIO) { -+ cpos += 1 << (sb->s_blocksize_bits); -+ cpos &= ~(sb->s_blocksize - 1); -+ } -+ -+ err = -EIO; -+ goto end_of_dir; -+ } -+ -+ cpos = EXFAT_DEN_TO_B(ei->rwoffset); -+ -+ if (!nb->lfn[0]) -+ goto end_of_dir; -+ -+ i_pos = ((loff_t)ei->start_clu << 32) | -+ ((ei->rwoffset - 1) & 0xffffffff); -+ tmp = exfat_iget(sb, i_pos); -+ if (tmp) { -+ inum = tmp->i_ino; -+ iput(tmp); -+ } else { -+ inum = iunique(sb, EXFAT_ROOT_INO); -+ } -+ -+ /* -+ * Before calling dir_emit(), sb_lock should be released. -+ * Because page fault can occur in dir_emit() when the size -+ * of buffer given from user is larger than one page size. -+ */ -+ mutex_unlock(&EXFAT_SB(sb)->s_lock); -+ if (!dir_emit(ctx, nb->lfn, strlen(nb->lfn), inum, -+ (de.attr & ATTR_SUBDIR) ? DT_DIR : DT_REG)) -+ goto out_unlocked; -+ mutex_lock(&EXFAT_SB(sb)->s_lock); -+ ctx->pos = cpos; -+ goto get_new; -+ -+end_of_dir: -+ if (!cpos && fake_offset) -+ cpos = ITER_POS_FILLED_DOTS; -+ ctx->pos = cpos; -+unlock: -+ mutex_unlock(&EXFAT_SB(sb)->s_lock); -+out_unlocked: -+ /* -+ * To improve performance, free namebuf after unlock sb_lock. -+ * If namebuf is not allocated, this function do nothing -+ */ -+ exfat_free_namebuf(nb); -+ return err; -+} -+ -+const struct file_operations exfat_dir_operations = { -+ .llseek = generic_file_llseek, -+ .read = generic_read_dir, -+ .iterate = exfat_iterate, -+ .fsync = generic_file_fsync, -+}; -+ -+int exfat_alloc_new_dir(struct inode *inode, struct exfat_chain *clu) -+{ -+ int ret; -+ -+ exfat_chain_set(clu, EXFAT_EOF_CLUSTER, 0, ALLOC_NO_FAT_CHAIN); -+ -+ ret = exfat_alloc_cluster(inode, 1, clu); -+ if (ret) -+ return ret; -+ -+ return exfat_zeroed_cluster(inode, clu->dir); -+} -+ -+int exfat_calc_num_entries(struct exfat_uni_name *p_uniname) -+{ -+ int len; -+ -+ len = p_uniname->name_len; -+ if (len == 0) -+ return -EINVAL; -+ -+ /* 1 file entry + 1 stream entry + name entries */ -+ return ((len - 1) / EXFAT_FILE_NAME_LEN + 3); -+} -+ -+unsigned int exfat_get_entry_type(struct exfat_dentry *ep) -+{ -+ if (ep->type == EXFAT_UNUSED) -+ return TYPE_UNUSED; -+ if (IS_EXFAT_DELETED(ep->type)) -+ return TYPE_DELETED; -+ if (ep->type == EXFAT_INVAL) -+ return TYPE_INVALID; -+ if (IS_EXFAT_CRITICAL_PRI(ep->type)) { -+ if (ep->type == EXFAT_BITMAP) -+ return TYPE_BITMAP; -+ if (ep->type == EXFAT_UPCASE) -+ return TYPE_UPCASE; -+ if (ep->type == EXFAT_VOLUME) -+ return TYPE_VOLUME; -+ if (ep->type == EXFAT_FILE) { -+ if (le16_to_cpu(ep->dentry.file.attr) & ATTR_SUBDIR) -+ return TYPE_DIR; -+ return TYPE_FILE; -+ } -+ return TYPE_CRITICAL_PRI; -+ } -+ if (IS_EXFAT_BENIGN_PRI(ep->type)) { -+ if (ep->type == EXFAT_GUID) -+ return TYPE_GUID; -+ if (ep->type == EXFAT_PADDING) -+ return TYPE_PADDING; -+ if (ep->type == EXFAT_ACLTAB) -+ return TYPE_ACLTAB; -+ return TYPE_BENIGN_PRI; -+ } -+ if (IS_EXFAT_CRITICAL_SEC(ep->type)) { -+ if (ep->type == EXFAT_STREAM) -+ return TYPE_STREAM; -+ if (ep->type == EXFAT_NAME) -+ return TYPE_EXTEND; -+ if (ep->type == EXFAT_ACL) -+ return TYPE_ACL; -+ return TYPE_CRITICAL_SEC; -+ } -+ return TYPE_BENIGN_SEC; -+} -+ -+static void exfat_set_entry_type(struct exfat_dentry *ep, unsigned int type) -+{ -+ if (type == TYPE_UNUSED) { -+ ep->type = EXFAT_UNUSED; -+ } else if (type == TYPE_DELETED) { -+ ep->type &= EXFAT_DELETE; -+ } else if (type == TYPE_STREAM) { -+ ep->type = EXFAT_STREAM; -+ } else if (type == TYPE_EXTEND) { -+ ep->type = EXFAT_NAME; -+ } else if (type == TYPE_BITMAP) { -+ ep->type = EXFAT_BITMAP; -+ } else if (type == TYPE_UPCASE) { -+ ep->type = EXFAT_UPCASE; -+ } else if (type == TYPE_VOLUME) { -+ ep->type = EXFAT_VOLUME; -+ } else if (type == TYPE_DIR) { -+ ep->type = EXFAT_FILE; -+ ep->dentry.file.attr = cpu_to_le16(ATTR_SUBDIR); -+ } else if (type == TYPE_FILE) { -+ ep->type = EXFAT_FILE; -+ ep->dentry.file.attr = cpu_to_le16(ATTR_ARCHIVE); -+ } -+} -+ -+static void exfat_init_stream_entry(struct exfat_dentry *ep, -+ unsigned char flags, unsigned int start_clu, -+ unsigned long long size) -+{ -+ exfat_set_entry_type(ep, TYPE_STREAM); -+ ep->dentry.stream.flags = flags; -+ ep->dentry.stream.start_clu = cpu_to_le32(start_clu); -+ ep->dentry.stream.valid_size = cpu_to_le64(size); -+ ep->dentry.stream.size = cpu_to_le64(size); -+} -+ -+static void exfat_init_name_entry(struct exfat_dentry *ep, -+ unsigned short *uniname) -+{ -+ int i; -+ -+ exfat_set_entry_type(ep, TYPE_EXTEND); -+ ep->dentry.name.flags = 0x0; -+ -+ for (i = 0; i < EXFAT_FILE_NAME_LEN; i++) { -+ ep->dentry.name.unicode_0_14[i] = cpu_to_le16(*uniname); -+ if (*uniname == 0x0) -+ break; -+ uniname++; -+ } -+} -+ -+int exfat_init_dir_entry(struct inode *inode, struct exfat_chain *p_dir, -+ int entry, unsigned int type, unsigned int start_clu, -+ unsigned long long size) -+{ -+ struct super_block *sb = inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct timespec64 ts = current_time(inode); -+ sector_t sector; -+ struct exfat_dentry *ep; -+ struct buffer_head *bh; -+ -+ /* -+ * We cannot use exfat_get_dentry_set here because file ep is not -+ * initialized yet. -+ */ -+ ep = exfat_get_dentry(sb, p_dir, entry, &bh, §or); -+ if (!ep) -+ return -EIO; -+ -+ exfat_set_entry_type(ep, type); -+ exfat_set_entry_time(sbi, &ts, -+ &ep->dentry.file.create_tz, -+ &ep->dentry.file.create_time, -+ &ep->dentry.file.create_date, -+ &ep->dentry.file.create_time_ms); -+ exfat_set_entry_time(sbi, &ts, -+ &ep->dentry.file.modify_tz, -+ &ep->dentry.file.modify_time, -+ &ep->dentry.file.modify_date, -+ &ep->dentry.file.modify_time_ms); -+ exfat_set_entry_time(sbi, &ts, -+ &ep->dentry.file.access_tz, -+ &ep->dentry.file.access_time, -+ &ep->dentry.file.access_date, -+ NULL); -+ -+ exfat_update_bh(sb, bh, IS_DIRSYNC(inode)); -+ brelse(bh); -+ -+ ep = exfat_get_dentry(sb, p_dir, entry + 1, &bh, §or); -+ if (!ep) -+ return -EIO; -+ -+ exfat_init_stream_entry(ep, -+ (type == TYPE_FILE) ? ALLOC_FAT_CHAIN : ALLOC_NO_FAT_CHAIN, -+ start_clu, size); -+ exfat_update_bh(sb, bh, IS_DIRSYNC(inode)); -+ brelse(bh); -+ -+ return 0; -+} -+ -+int exfat_update_dir_chksum(struct inode *inode, struct exfat_chain *p_dir, -+ int entry) -+{ -+ struct super_block *sb = inode->i_sb; -+ int ret = 0; -+ int i, num_entries; -+ sector_t sector; -+ unsigned short chksum; -+ struct exfat_dentry *ep, *fep; -+ struct buffer_head *fbh, *bh; -+ -+ fep = exfat_get_dentry(sb, p_dir, entry, &fbh, §or); -+ if (!fep) -+ return -EIO; -+ -+ num_entries = fep->dentry.file.num_ext + 1; -+ chksum = exfat_calc_chksum_2byte(fep, DENTRY_SIZE, 0, CS_DIR_ENTRY); -+ -+ for (i = 1; i < num_entries; i++) { -+ ep = exfat_get_dentry(sb, p_dir, entry + i, &bh, NULL); -+ if (!ep) { -+ ret = -EIO; -+ goto release_fbh; -+ } -+ chksum = exfat_calc_chksum_2byte(ep, DENTRY_SIZE, chksum, -+ CS_DEFAULT); -+ brelse(bh); -+ } -+ -+ fep->dentry.file.checksum = cpu_to_le16(chksum); -+ exfat_update_bh(sb, fbh, IS_DIRSYNC(inode)); -+release_fbh: -+ brelse(fbh); -+ return ret; -+} -+ -+int exfat_init_ext_entry(struct inode *inode, struct exfat_chain *p_dir, -+ int entry, int num_entries, struct exfat_uni_name *p_uniname) -+{ -+ struct super_block *sb = inode->i_sb; -+ int i; -+ sector_t sector; -+ unsigned short *uniname = p_uniname->name; -+ struct exfat_dentry *ep; -+ struct buffer_head *bh; -+ int sync = IS_DIRSYNC(inode); -+ -+ ep = exfat_get_dentry(sb, p_dir, entry, &bh, §or); -+ if (!ep) -+ return -EIO; -+ -+ ep->dentry.file.num_ext = (unsigned char)(num_entries - 1); -+ exfat_update_bh(sb, bh, sync); -+ brelse(bh); -+ -+ ep = exfat_get_dentry(sb, p_dir, entry + 1, &bh, §or); -+ if (!ep) -+ return -EIO; -+ -+ ep->dentry.stream.name_len = p_uniname->name_len; -+ ep->dentry.stream.name_hash = cpu_to_le16(p_uniname->name_hash); -+ exfat_update_bh(sb, bh, sync); -+ brelse(bh); -+ -+ for (i = EXFAT_FIRST_CLUSTER; i < num_entries; i++) { -+ ep = exfat_get_dentry(sb, p_dir, entry + i, &bh, §or); -+ if (!ep) -+ return -EIO; -+ -+ exfat_init_name_entry(ep, uniname); -+ exfat_update_bh(sb, bh, sync); -+ brelse(bh); -+ uniname += EXFAT_FILE_NAME_LEN; -+ } -+ -+ exfat_update_dir_chksum(inode, p_dir, entry); -+ return 0; -+} -+ -+int exfat_remove_entries(struct inode *inode, struct exfat_chain *p_dir, -+ int entry, int order, int num_entries) -+{ -+ struct super_block *sb = inode->i_sb; -+ int i; -+ sector_t sector; -+ struct exfat_dentry *ep; -+ struct buffer_head *bh; -+ -+ for (i = order; i < num_entries; i++) { -+ ep = exfat_get_dentry(sb, p_dir, entry + i, &bh, §or); -+ if (!ep) -+ return -EIO; -+ -+ exfat_set_entry_type(ep, TYPE_DELETED); -+ exfat_update_bh(sb, bh, IS_DIRSYNC(inode)); -+ brelse(bh); -+ } -+ -+ return 0; -+} -+ -+int exfat_update_dir_chksum_with_entry_set(struct super_block *sb, -+ struct exfat_entry_set_cache *es, int sync) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct buffer_head *bh; -+ sector_t sec = es->sector; -+ unsigned int off = es->offset; -+ int chksum_type = CS_DIR_ENTRY, i, num_entries = es->num_entries; -+ unsigned int buf_off = (off - es->offset); -+ unsigned int remaining_byte_in_sector, copy_entries, clu; -+ unsigned short chksum = 0; -+ -+ for (i = 0; i < num_entries; i++) { -+ chksum = exfat_calc_chksum_2byte(&es->entries[i], DENTRY_SIZE, -+ chksum, chksum_type); -+ chksum_type = CS_DEFAULT; -+ } -+ -+ es->entries[0].dentry.file.checksum = cpu_to_le16(chksum); -+ -+ while (num_entries) { -+ /* write per sector base */ -+ remaining_byte_in_sector = (1 << sb->s_blocksize_bits) - off; -+ copy_entries = min_t(int, -+ EXFAT_B_TO_DEN(remaining_byte_in_sector), -+ num_entries); -+ bh = sb_bread(sb, sec); -+ if (!bh) -+ goto err_out; -+ memcpy(bh->b_data + off, -+ (unsigned char *)&es->entries[0] + buf_off, -+ EXFAT_DEN_TO_B(copy_entries)); -+ exfat_update_bh(sb, bh, sync); -+ brelse(bh); -+ num_entries -= copy_entries; -+ -+ if (num_entries) { -+ /* get next sector */ -+ if (exfat_is_last_sector_in_cluster(sbi, sec)) { -+ clu = exfat_sector_to_cluster(sbi, sec); -+ if (es->alloc_flag == ALLOC_NO_FAT_CHAIN) -+ clu++; -+ else if (exfat_get_next_cluster(sb, &clu)) -+ goto err_out; -+ sec = exfat_cluster_to_sector(sbi, clu); -+ } else { -+ sec++; -+ } -+ off = 0; -+ buf_off += EXFAT_DEN_TO_B(copy_entries); -+ } -+ } -+ -+ return 0; -+err_out: -+ return -EIO; -+} -+ -+static int exfat_walk_fat_chain(struct super_block *sb, -+ struct exfat_chain *p_dir, unsigned int byte_offset, -+ unsigned int *clu) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ unsigned int clu_offset; -+ unsigned int cur_clu; -+ -+ clu_offset = EXFAT_B_TO_CLU(byte_offset, sbi); -+ cur_clu = p_dir->dir; -+ -+ if (p_dir->flags == ALLOC_NO_FAT_CHAIN) { -+ cur_clu += clu_offset; -+ } else { -+ while (clu_offset > 0) { -+ if (exfat_get_next_cluster(sb, &cur_clu)) -+ return -EIO; -+ if (cur_clu == EXFAT_EOF_CLUSTER) { -+ exfat_fs_error(sb, -+ "invalid dentry access beyond EOF (clu : %u, eidx : %d)", -+ p_dir->dir, -+ EXFAT_B_TO_DEN(byte_offset)); -+ return -EIO; -+ } -+ clu_offset--; -+ } -+ } -+ -+ *clu = cur_clu; -+ return 0; -+} -+ -+int exfat_find_location(struct super_block *sb, struct exfat_chain *p_dir, -+ int entry, sector_t *sector, int *offset) -+{ -+ int ret; -+ unsigned int off, clu = 0; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ -+ off = EXFAT_DEN_TO_B(entry); -+ -+ ret = exfat_walk_fat_chain(sb, p_dir, off, &clu); -+ if (ret) -+ return ret; -+ -+ /* byte offset in cluster */ -+ off = EXFAT_CLU_OFFSET(off, sbi); -+ -+ /* byte offset in sector */ -+ *offset = EXFAT_BLK_OFFSET(off, sb); -+ -+ /* sector offset in cluster */ -+ *sector = EXFAT_B_TO_BLK(off, sb); -+ *sector += exfat_cluster_to_sector(sbi, clu); -+ return 0; -+} -+ -+#define EXFAT_MAX_RA_SIZE (128*1024) -+static int exfat_dir_readahead(struct super_block *sb, sector_t sec) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct buffer_head *bh; -+ unsigned int max_ra_count = EXFAT_MAX_RA_SIZE >> sb->s_blocksize_bits; -+ unsigned int page_ra_count = PAGE_SIZE >> sb->s_blocksize_bits; -+ unsigned int adj_ra_count = max(sbi->sect_per_clus, page_ra_count); -+ unsigned int ra_count = min(adj_ra_count, max_ra_count); -+ -+ /* Read-ahead is not required */ -+ if (sbi->sect_per_clus == 1) -+ return 0; -+ -+ if (sec < sbi->data_start_sector) { -+ exfat_msg(sb, KERN_ERR, -+ "requested sector is invalid(sect:%llu, root:%llu)", -+ (unsigned long long)sec, sbi->data_start_sector); -+ return -EIO; -+ } -+ -+ /* Not sector aligned with ra_count, resize ra_count to page size */ -+ if ((sec - sbi->data_start_sector) & (ra_count - 1)) -+ ra_count = page_ra_count; -+ -+ bh = sb_find_get_block(sb, sec); -+ if (!bh || !buffer_uptodate(bh)) { -+ unsigned int i; -+ -+ for (i = 0; i < ra_count; i++) -+ sb_breadahead(sb, (sector_t)(sec + i)); -+ } -+ brelse(bh); -+ return 0; -+} -+ -+struct exfat_dentry *exfat_get_dentry(struct super_block *sb, -+ struct exfat_chain *p_dir, int entry, struct buffer_head **bh, -+ sector_t *sector) -+{ -+ unsigned int dentries_per_page = EXFAT_B_TO_DEN(PAGE_SIZE); -+ int off; -+ sector_t sec; -+ -+ if (p_dir->dir == DIR_DELETED) { -+ exfat_msg(sb, KERN_ERR, "abnormal access to deleted dentry\n"); -+ return NULL; -+ } -+ -+ if (exfat_find_location(sb, p_dir, entry, &sec, &off)) -+ return NULL; -+ -+ if (p_dir->dir != EXFAT_FREE_CLUSTER && -+ !(entry & (dentries_per_page - 1))) -+ exfat_dir_readahead(sb, sec); -+ -+ *bh = sb_bread(sb, sec); -+ if (!*bh) -+ return NULL; -+ -+ if (sector) -+ *sector = sec; -+ return (struct exfat_dentry *)((*bh)->b_data + off); -+} -+ -+enum exfat_validate_dentry_mode { -+ ES_MODE_STARTED, -+ ES_MODE_GET_FILE_ENTRY, -+ ES_MODE_GET_STRM_ENTRY, -+ ES_MODE_GET_NAME_ENTRY, -+ ES_MODE_GET_CRITICAL_SEC_ENTRY, -+}; -+ -+static bool exfat_validate_entry(unsigned int type, -+ enum exfat_validate_dentry_mode *mode) -+{ -+ if (type == TYPE_UNUSED || type == TYPE_DELETED) -+ return false; -+ -+ switch (*mode) { -+ case ES_MODE_STARTED: -+ if (type != TYPE_FILE && type != TYPE_DIR) -+ return false; -+ *mode = ES_MODE_GET_FILE_ENTRY; -+ return true; -+ case ES_MODE_GET_FILE_ENTRY: -+ if (type != TYPE_STREAM) -+ return false; -+ *mode = ES_MODE_GET_STRM_ENTRY; -+ return true; -+ case ES_MODE_GET_STRM_ENTRY: -+ if (type != TYPE_EXTEND) -+ return false; -+ *mode = ES_MODE_GET_NAME_ENTRY; -+ return true; -+ case ES_MODE_GET_NAME_ENTRY: -+ if (type == TYPE_STREAM) -+ return false; -+ if (type != TYPE_EXTEND) { -+ if (!(type & TYPE_CRITICAL_SEC)) -+ return false; -+ *mode = ES_MODE_GET_CRITICAL_SEC_ENTRY; -+ } -+ return true; -+ case ES_MODE_GET_CRITICAL_SEC_ENTRY: -+ if (type == TYPE_EXTEND || type == TYPE_STREAM) -+ return false; -+ if ((type & TYPE_CRITICAL_SEC) != TYPE_CRITICAL_SEC) -+ return false; -+ return true; -+ default: -+ WARN_ON_ONCE(1); -+ return false; -+ } -+} -+ -+/* -+ * Returns a set of dentries for a file or dir. -+ * -+ * Note that this is a copy (dump) of dentries so that user should -+ * call write_entry_set() to apply changes made in this entry set -+ * to the real device. -+ * -+ * in: -+ * sb+p_dir+entry: indicates a file/dir -+ * type: specifies how many dentries should be included. -+ * out: -+ * file_ep: will point the first dentry(= file dentry) on success -+ * return: -+ * pointer of entry set on success, -+ * NULL on failure. -+ */ -+struct exfat_entry_set_cache *exfat_get_dentry_set(struct super_block *sb, -+ struct exfat_chain *p_dir, int entry, unsigned int type, -+ struct exfat_dentry **file_ep) -+{ -+ int ret; -+ unsigned int off, byte_offset, clu = 0; -+ unsigned int entry_type; -+ sector_t sec; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct exfat_entry_set_cache *es; -+ struct exfat_dentry *ep, *pos; -+ unsigned char num_entries; -+ enum exfat_validate_dentry_mode mode = ES_MODE_STARTED; -+ struct buffer_head *bh; -+ -+ if (p_dir->dir == DIR_DELETED) { -+ exfat_msg(sb, KERN_ERR, "access to deleted dentry\n"); -+ return NULL; -+ } -+ -+ byte_offset = EXFAT_DEN_TO_B(entry); -+ ret = exfat_walk_fat_chain(sb, p_dir, byte_offset, &clu); -+ if (ret) -+ return NULL; -+ -+ /* byte offset in cluster */ -+ byte_offset = EXFAT_CLU_OFFSET(byte_offset, sbi); -+ -+ /* byte offset in sector */ -+ off = EXFAT_BLK_OFFSET(byte_offset, sb); -+ -+ /* sector offset in cluster */ -+ sec = EXFAT_B_TO_BLK(byte_offset, sb); -+ sec += exfat_cluster_to_sector(sbi, clu); -+ -+ bh = sb_bread(sb, sec); -+ if (!bh) -+ return NULL; -+ -+ ep = (struct exfat_dentry *)(bh->b_data + off); -+ entry_type = exfat_get_entry_type(ep); -+ -+ if (entry_type != TYPE_FILE && entry_type != TYPE_DIR) -+ goto release_bh; -+ -+ num_entries = type == ES_ALL_ENTRIES ? -+ ep->dentry.file.num_ext + 1 : type; -+ es = kmalloc(struct_size(es, entries, num_entries), GFP_KERNEL); -+ if (!es) -+ goto release_bh; -+ -+ es->num_entries = num_entries; -+ es->sector = sec; -+ es->offset = off; -+ es->alloc_flag = p_dir->flags; -+ -+ pos = &es->entries[0]; -+ -+ while (num_entries) { -+ if (!exfat_validate_entry(exfat_get_entry_type(ep), &mode)) -+ goto free_es; -+ -+ /* copy dentry */ -+ memcpy(pos, ep, sizeof(struct exfat_dentry)); -+ -+ if (--num_entries == 0) -+ break; -+ -+ if (((off + DENTRY_SIZE) & (sb->s_blocksize - 1)) < -+ (off & (sb->s_blocksize - 1))) { -+ /* get the next sector */ -+ if (exfat_is_last_sector_in_cluster(sbi, sec)) { -+ if (es->alloc_flag == ALLOC_NO_FAT_CHAIN) -+ clu++; -+ else if (exfat_get_next_cluster(sb, &clu)) -+ goto free_es; -+ sec = exfat_cluster_to_sector(sbi, clu); -+ } else { -+ sec++; -+ } -+ -+ brelse(bh); -+ bh = sb_bread(sb, sec); -+ if (!bh) -+ goto free_es; -+ off = 0; -+ ep = (struct exfat_dentry *)bh->b_data; -+ } else { -+ ep++; -+ off += DENTRY_SIZE; -+ } -+ pos++; -+ } -+ -+ if (file_ep) -+ *file_ep = &es->entries[0]; -+ brelse(bh); -+ return es; -+ -+free_es: -+ kfree(es); -+release_bh: -+ brelse(bh); -+ return NULL; -+} -+ -+enum { -+ DIRENT_STEP_FILE, -+ DIRENT_STEP_STRM, -+ DIRENT_STEP_NAME, -+ DIRENT_STEP_SECD, -+}; -+ -+/* -+ * return values: -+ * >= 0 : return dir entiry position with the name in dir -+ * -EEXIST : (root dir, ".") it is the root dir itself -+ * -ENOENT : entry with the name does not exist -+ * -EIO : I/O error -+ */ -+int exfat_find_dir_entry(struct super_block *sb, struct exfat_inode_info *ei, -+ struct exfat_chain *p_dir, struct exfat_uni_name *p_uniname, -+ int num_entries, unsigned int type) -+{ -+ int i, rewind = 0, dentry = 0, end_eidx = 0, num_ext = 0, len; -+ int order, step, name_len = 0; -+ int dentries_per_clu, num_empty = 0; -+ unsigned int entry_type; -+ unsigned short *uniname = NULL; -+ struct exfat_chain clu; -+ struct exfat_hint *hint_stat = &ei->hint_stat; -+ struct exfat_hint_femp candi_empty; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ -+ dentries_per_clu = sbi->dentries_per_clu; -+ -+ exfat_chain_dup(&clu, p_dir); -+ -+ if (hint_stat->eidx) { -+ clu.dir = hint_stat->clu; -+ dentry = hint_stat->eidx; -+ end_eidx = dentry; -+ } -+ -+ candi_empty.eidx = EXFAT_HINT_NONE; -+rewind: -+ order = 0; -+ step = DIRENT_STEP_FILE; -+ while (clu.dir != EXFAT_EOF_CLUSTER) { -+ i = dentry & (dentries_per_clu - 1); -+ for (; i < dentries_per_clu; i++, dentry++) { -+ struct exfat_dentry *ep; -+ struct buffer_head *bh; -+ -+ if (rewind && dentry == end_eidx) -+ goto not_found; -+ -+ ep = exfat_get_dentry(sb, &clu, i, &bh, NULL); -+ if (!ep) -+ return -EIO; -+ -+ entry_type = exfat_get_entry_type(ep); -+ -+ if (entry_type == TYPE_UNUSED || -+ entry_type == TYPE_DELETED) { -+ step = DIRENT_STEP_FILE; -+ -+ num_empty++; -+ if (candi_empty.eidx == EXFAT_HINT_NONE && -+ num_empty == 1) { -+ exfat_chain_set(&candi_empty.cur, -+ clu.dir, clu.size, clu.flags); -+ } -+ -+ if (candi_empty.eidx == EXFAT_HINT_NONE && -+ num_empty >= num_entries) { -+ candi_empty.eidx = -+ dentry - (num_empty - 1); -+ WARN_ON(candi_empty.eidx < 0); -+ candi_empty.count = num_empty; -+ -+ if (ei->hint_femp.eidx == -+ EXFAT_HINT_NONE || -+ candi_empty.eidx <= -+ ei->hint_femp.eidx) { -+ memcpy(&ei->hint_femp, -+ &candi_empty, -+ sizeof(candi_empty)); -+ } -+ } -+ -+ brelse(bh); -+ if (entry_type == TYPE_UNUSED) -+ goto not_found; -+ continue; -+ } -+ -+ num_empty = 0; -+ candi_empty.eidx = EXFAT_HINT_NONE; -+ -+ if (entry_type == TYPE_FILE || entry_type == TYPE_DIR) { -+ step = DIRENT_STEP_FILE; -+ if (type == TYPE_ALL || type == entry_type) { -+ num_ext = ep->dentry.file.num_ext; -+ step = DIRENT_STEP_STRM; -+ } -+ brelse(bh); -+ continue; -+ } -+ -+ if (entry_type == TYPE_STREAM) { -+ unsigned short name_hash; -+ -+ if (step != DIRENT_STEP_STRM) { -+ step = DIRENT_STEP_FILE; -+ brelse(bh); -+ continue; -+ } -+ step = DIRENT_STEP_FILE; -+ name_hash = le16_to_cpu( -+ ep->dentry.stream.name_hash); -+ if (p_uniname->name_hash == name_hash && -+ p_uniname->name_len == -+ ep->dentry.stream.name_len) { -+ step = DIRENT_STEP_NAME; -+ order = 1; -+ name_len = 0; -+ } -+ brelse(bh); -+ continue; -+ } -+ -+ brelse(bh); -+ if (entry_type == TYPE_EXTEND) { -+ unsigned short entry_uniname[16], unichar; -+ -+ if (step != DIRENT_STEP_NAME) { -+ step = DIRENT_STEP_FILE; -+ continue; -+ } -+ -+ if (++order == 2) -+ uniname = p_uniname->name; -+ else -+ uniname += EXFAT_FILE_NAME_LEN; -+ -+ len = exfat_extract_uni_name(ep, entry_uniname); -+ name_len += len; -+ -+ unichar = *(uniname+len); -+ *(uniname+len) = 0x0; -+ -+ if (exfat_uniname_ncmp(sb, uniname, -+ entry_uniname, len)) { -+ step = DIRENT_STEP_FILE; -+ } else if (p_uniname->name_len == name_len) { -+ if (order == num_ext) -+ goto found; -+ step = DIRENT_STEP_SECD; -+ } -+ -+ *(uniname+len) = unichar; -+ continue; -+ } -+ -+ if (entry_type & -+ (TYPE_CRITICAL_SEC | TYPE_BENIGN_SEC)) { -+ if (step == DIRENT_STEP_SECD) { -+ if (++order == num_ext) -+ goto found; -+ continue; -+ } -+ } -+ step = DIRENT_STEP_FILE; -+ } -+ -+ if (clu.flags == ALLOC_NO_FAT_CHAIN) { -+ if (--clu.size > 0) -+ clu.dir++; -+ else -+ clu.dir = EXFAT_EOF_CLUSTER; -+ } else { -+ if (exfat_get_next_cluster(sb, &clu.dir)) -+ return -EIO; -+ } -+ } -+ -+not_found: -+ /* -+ * We started at not 0 index,so we should try to find target -+ * from 0 index to the index we started at. -+ */ -+ if (!rewind && end_eidx) { -+ rewind = 1; -+ dentry = 0; -+ clu.dir = p_dir->dir; -+ /* reset empty hint */ -+ num_empty = 0; -+ candi_empty.eidx = EXFAT_HINT_NONE; -+ goto rewind; -+ } -+ -+ /* initialized hint_stat */ -+ hint_stat->clu = p_dir->dir; -+ hint_stat->eidx = 0; -+ return -ENOENT; -+ -+found: -+ /* next dentry we'll find is out of this cluster */ -+ if (!((dentry + 1) & (dentries_per_clu - 1))) { -+ int ret = 0; -+ -+ if (clu.flags == ALLOC_NO_FAT_CHAIN) { -+ if (--clu.size > 0) -+ clu.dir++; -+ else -+ clu.dir = EXFAT_EOF_CLUSTER; -+ } else { -+ ret = exfat_get_next_cluster(sb, &clu.dir); -+ } -+ -+ if (ret || clu.dir != EXFAT_EOF_CLUSTER) { -+ /* just initialized hint_stat */ -+ hint_stat->clu = p_dir->dir; -+ hint_stat->eidx = 0; -+ return (dentry - num_ext); -+ } -+ } -+ -+ hint_stat->clu = clu.dir; -+ hint_stat->eidx = dentry + 1; -+ return dentry - num_ext; -+} -+ -+int exfat_count_ext_entries(struct super_block *sb, struct exfat_chain *p_dir, -+ int entry, struct exfat_dentry *ep) -+{ -+ int i, count = 0; -+ unsigned int type; -+ struct exfat_dentry *ext_ep; -+ struct buffer_head *bh; -+ -+ for (i = 0, entry++; i < ep->dentry.file.num_ext; i++, entry++) { -+ ext_ep = exfat_get_dentry(sb, p_dir, entry, &bh, NULL); -+ if (!ext_ep) -+ return -EIO; -+ -+ type = exfat_get_entry_type(ext_ep); -+ brelse(bh); -+ if (type == TYPE_EXTEND || type == TYPE_STREAM) -+ count++; -+ else -+ break; -+ } -+ return count; -+} -+ -+int exfat_count_dir_entries(struct super_block *sb, struct exfat_chain *p_dir) -+{ -+ int i, count = 0; -+ int dentries_per_clu; -+ unsigned int entry_type; -+ struct exfat_chain clu; -+ struct exfat_dentry *ep; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct buffer_head *bh; -+ -+ dentries_per_clu = sbi->dentries_per_clu; -+ -+ exfat_chain_dup(&clu, p_dir); -+ -+ while (clu.dir != EXFAT_EOF_CLUSTER) { -+ for (i = 0; i < dentries_per_clu; i++) { -+ ep = exfat_get_dentry(sb, &clu, i, &bh, NULL); -+ if (!ep) -+ return -EIO; -+ entry_type = exfat_get_entry_type(ep); -+ brelse(bh); -+ -+ if (entry_type == TYPE_UNUSED) -+ return count; -+ if (entry_type != TYPE_DIR) -+ continue; -+ count++; -+ } -+ -+ if (clu.flags == ALLOC_NO_FAT_CHAIN) { -+ if (--clu.size > 0) -+ clu.dir++; -+ else -+ clu.dir = EXFAT_EOF_CLUSTER; -+ } else { -+ if (exfat_get_next_cluster(sb, &(clu.dir))) -+ return -EIO; -+ } -+ } -+ -+ return count; -+} --- -2.25.1 - diff --git a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-exfat-cache.patch b/kernel/tools/perf/files/patches/mageia/fs-exfat-add-exfat-cache.patch deleted file mode 100644 index 179a1226ea..0000000000 --- a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-exfat-cache.patch +++ /dev/null @@ -1,354 +0,0 @@ -From c35b6810c4952ae5776607e2c1d6a587425d5834 Mon Sep 17 00:00:00 2001 -From: Namjae Jeon -Date: Mon, 2 Mar 2020 15:21:39 +0900 -Subject: [PATCH 08/14] exfat: add exfat cache -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This adds the implementation of exfat cache. - -Signed-off-by: Namjae Jeon -Signed-off-by: Sungjong Seo -Reviewed-by: Pali Rohár -Reviewed-by: Christoph Hellwig -Signed-off-by: Al Viro ---- - fs/exfat/cache.c | 325 +++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 325 insertions(+) - create mode 100644 fs/exfat/cache.c - -diff --git a/fs/exfat/cache.c b/fs/exfat/cache.c -new file mode 100644 -index 000000000000..03d0824fc368 ---- /dev/null -+++ b/fs/exfat/cache.c -@@ -0,0 +1,325 @@ -+// SPDX-License-Identifier: GPL-2.0-or-later -+/* -+ * linux/fs/fat/cache.c -+ * -+ * Written 1992,1993 by Werner Almesberger -+ * -+ * Mar 1999. AV. Changed cache, so that it uses the starting cluster instead -+ * of inode number. -+ * May 1999. AV. Fixed the bogosity with FAT32 (read "FAT28"). Fscking lusers. -+ * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -+ */ -+ -+#include -+#include -+#include -+ -+#include "exfat_raw.h" -+#include "exfat_fs.h" -+ -+#define EXFAT_CACHE_VALID 0 -+#define EXFAT_MAX_CACHE 16 -+ -+struct exfat_cache { -+ struct list_head cache_list; -+ unsigned int nr_contig; /* number of contiguous clusters */ -+ unsigned int fcluster; /* cluster number in the file. */ -+ unsigned int dcluster; /* cluster number on disk. */ -+}; -+ -+struct exfat_cache_id { -+ unsigned int id; -+ unsigned int nr_contig; -+ unsigned int fcluster; -+ unsigned int dcluster; -+}; -+ -+static struct kmem_cache *exfat_cachep; -+ -+static void exfat_cache_init_once(void *c) -+{ -+ struct exfat_cache *cache = (struct exfat_cache *)c; -+ -+ INIT_LIST_HEAD(&cache->cache_list); -+} -+ -+int exfat_cache_init(void) -+{ -+ exfat_cachep = kmem_cache_create("exfat_cache", -+ sizeof(struct exfat_cache), -+ 0, SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD, -+ exfat_cache_init_once); -+ if (!exfat_cachep) -+ return -ENOMEM; -+ return 0; -+} -+ -+void exfat_cache_shutdown(void) -+{ -+ if (!exfat_cachep) -+ return; -+ kmem_cache_destroy(exfat_cachep); -+} -+ -+void exfat_cache_init_inode(struct inode *inode) -+{ -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ -+ spin_lock_init(&ei->cache_lru_lock); -+ ei->nr_caches = 0; -+ ei->cache_valid_id = EXFAT_CACHE_VALID + 1; -+ INIT_LIST_HEAD(&ei->cache_lru); -+} -+ -+static inline struct exfat_cache *exfat_cache_alloc(void) -+{ -+ return kmem_cache_alloc(exfat_cachep, GFP_NOFS); -+} -+ -+static inline void exfat_cache_free(struct exfat_cache *cache) -+{ -+ WARN_ON(!list_empty(&cache->cache_list)); -+ kmem_cache_free(exfat_cachep, cache); -+} -+ -+static inline void exfat_cache_update_lru(struct inode *inode, -+ struct exfat_cache *cache) -+{ -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ -+ if (ei->cache_lru.next != &cache->cache_list) -+ list_move(&cache->cache_list, &ei->cache_lru); -+} -+ -+static unsigned int exfat_cache_lookup(struct inode *inode, -+ unsigned int fclus, struct exfat_cache_id *cid, -+ unsigned int *cached_fclus, unsigned int *cached_dclus) -+{ -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ static struct exfat_cache nohit = { .fcluster = 0, }; -+ struct exfat_cache *hit = &nohit, *p; -+ unsigned int offset = EXFAT_EOF_CLUSTER; -+ -+ spin_lock(&ei->cache_lru_lock); -+ list_for_each_entry(p, &ei->cache_lru, cache_list) { -+ /* Find the cache of "fclus" or nearest cache. */ -+ if (p->fcluster <= fclus && hit->fcluster < p->fcluster) { -+ hit = p; -+ if (hit->fcluster + hit->nr_contig < fclus) { -+ offset = hit->nr_contig; -+ } else { -+ offset = fclus - hit->fcluster; -+ break; -+ } -+ } -+ } -+ if (hit != &nohit) { -+ exfat_cache_update_lru(inode, hit); -+ -+ cid->id = ei->cache_valid_id; -+ cid->nr_contig = hit->nr_contig; -+ cid->fcluster = hit->fcluster; -+ cid->dcluster = hit->dcluster; -+ *cached_fclus = cid->fcluster + offset; -+ *cached_dclus = cid->dcluster + offset; -+ } -+ spin_unlock(&ei->cache_lru_lock); -+ -+ return offset; -+} -+ -+static struct exfat_cache *exfat_cache_merge(struct inode *inode, -+ struct exfat_cache_id *new) -+{ -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ struct exfat_cache *p; -+ -+ list_for_each_entry(p, &ei->cache_lru, cache_list) { -+ /* Find the same part as "new" in cluster-chain. */ -+ if (p->fcluster == new->fcluster) { -+ if (new->nr_contig > p->nr_contig) -+ p->nr_contig = new->nr_contig; -+ return p; -+ } -+ } -+ return NULL; -+} -+ -+static void exfat_cache_add(struct inode *inode, -+ struct exfat_cache_id *new) -+{ -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ struct exfat_cache *cache, *tmp; -+ -+ if (new->fcluster == EXFAT_EOF_CLUSTER) /* dummy cache */ -+ return; -+ -+ spin_lock(&ei->cache_lru_lock); -+ if (new->id != EXFAT_CACHE_VALID && -+ new->id != ei->cache_valid_id) -+ goto unlock; /* this cache was invalidated */ -+ -+ cache = exfat_cache_merge(inode, new); -+ if (cache == NULL) { -+ if (ei->nr_caches < EXFAT_MAX_CACHE) { -+ ei->nr_caches++; -+ spin_unlock(&ei->cache_lru_lock); -+ -+ tmp = exfat_cache_alloc(); -+ if (!tmp) { -+ spin_lock(&ei->cache_lru_lock); -+ ei->nr_caches--; -+ spin_unlock(&ei->cache_lru_lock); -+ return; -+ } -+ -+ spin_lock(&ei->cache_lru_lock); -+ cache = exfat_cache_merge(inode, new); -+ if (cache != NULL) { -+ ei->nr_caches--; -+ exfat_cache_free(tmp); -+ goto out_update_lru; -+ } -+ cache = tmp; -+ } else { -+ struct list_head *p = ei->cache_lru.prev; -+ -+ cache = list_entry(p, -+ struct exfat_cache, cache_list); -+ } -+ cache->fcluster = new->fcluster; -+ cache->dcluster = new->dcluster; -+ cache->nr_contig = new->nr_contig; -+ } -+out_update_lru: -+ exfat_cache_update_lru(inode, cache); -+unlock: -+ spin_unlock(&ei->cache_lru_lock); -+} -+ -+/* -+ * Cache invalidation occurs rarely, thus the LRU chain is not updated. It -+ * fixes itself after a while. -+ */ -+static void __exfat_cache_inval_inode(struct inode *inode) -+{ -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ struct exfat_cache *cache; -+ -+ while (!list_empty(&ei->cache_lru)) { -+ cache = list_entry(ei->cache_lru.next, -+ struct exfat_cache, cache_list); -+ list_del_init(&cache->cache_list); -+ ei->nr_caches--; -+ exfat_cache_free(cache); -+ } -+ /* Update. The copy of caches before this id is discarded. */ -+ ei->cache_valid_id++; -+ if (ei->cache_valid_id == EXFAT_CACHE_VALID) -+ ei->cache_valid_id++; -+} -+ -+void exfat_cache_inval_inode(struct inode *inode) -+{ -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ -+ spin_lock(&ei->cache_lru_lock); -+ __exfat_cache_inval_inode(inode); -+ spin_unlock(&ei->cache_lru_lock); -+} -+ -+static inline int cache_contiguous(struct exfat_cache_id *cid, -+ unsigned int dclus) -+{ -+ cid->nr_contig++; -+ return cid->dcluster + cid->nr_contig == dclus; -+} -+ -+static inline void cache_init(struct exfat_cache_id *cid, -+ unsigned int fclus, unsigned int dclus) -+{ -+ cid->id = EXFAT_CACHE_VALID; -+ cid->fcluster = fclus; -+ cid->dcluster = dclus; -+ cid->nr_contig = 0; -+} -+ -+int exfat_get_cluster(struct inode *inode, unsigned int cluster, -+ unsigned int *fclus, unsigned int *dclus, -+ unsigned int *last_dclus, int allow_eof) -+{ -+ struct super_block *sb = inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ unsigned int limit = sbi->num_clusters; -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ struct exfat_cache_id cid; -+ unsigned int content; -+ -+ if (ei->start_clu == EXFAT_FREE_CLUSTER) { -+ exfat_fs_error(sb, -+ "invalid access to exfat cache (entry 0x%08x)", -+ ei->start_clu); -+ return -EIO; -+ } -+ -+ *fclus = 0; -+ *dclus = ei->start_clu; -+ *last_dclus = *dclus; -+ -+ /* -+ * Don`t use exfat_cache if zero offset or non-cluster allocation -+ */ -+ if (cluster == 0 || *dclus == EXFAT_EOF_CLUSTER) -+ return 0; -+ -+ cache_init(&cid, EXFAT_EOF_CLUSTER, EXFAT_EOF_CLUSTER); -+ -+ if (exfat_cache_lookup(inode, cluster, &cid, fclus, dclus) == -+ EXFAT_EOF_CLUSTER) { -+ /* -+ * dummy, always not contiguous -+ * This is reinitialized by cache_init(), later. -+ */ -+ WARN_ON(cid.id != EXFAT_CACHE_VALID || -+ cid.fcluster != EXFAT_EOF_CLUSTER || -+ cid.dcluster != EXFAT_EOF_CLUSTER || -+ cid.nr_contig != 0); -+ } -+ -+ if (*fclus == cluster) -+ return 0; -+ -+ while (*fclus < cluster) { -+ /* prevent the infinite loop of cluster chain */ -+ if (*fclus > limit) { -+ exfat_fs_error(sb, -+ "detected the cluster chain loop (i_pos %u)", -+ (*fclus)); -+ return -EIO; -+ } -+ -+ if (exfat_ent_get(sb, *dclus, &content)) -+ return -EIO; -+ -+ *last_dclus = *dclus; -+ *dclus = content; -+ (*fclus)++; -+ -+ if (content == EXFAT_EOF_CLUSTER) { -+ if (!allow_eof) { -+ exfat_fs_error(sb, -+ "invalid cluster chain (i_pos %u, last_clus 0x%08x is EOF)", -+ *fclus, (*last_dclus)); -+ return -EIO; -+ } -+ -+ break; -+ } -+ -+ if (!cache_contiguous(&cid, *dclus)) -+ cache_init(&cid, *fclus, *dclus); -+ } -+ -+ exfat_cache_add(inode, &cid); -+ return 0; -+} --- -2.25.1 - diff --git a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-fat-entry-operations.patch b/kernel/tools/perf/files/patches/mageia/fs-exfat-add-fat-entry-operations.patch deleted file mode 100644 index 5d0f4f3553..0000000000 --- a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-fat-entry-operations.patch +++ /dev/null @@ -1,492 +0,0 @@ -From 31023864e67a5f390cefbe92f72343027dc3aa33 Mon Sep 17 00:00:00 2001 -From: Namjae Jeon -Date: Mon, 2 Mar 2020 15:21:37 +0900 -Subject: [PATCH 06/14] exfat: add fat entry operations -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This adds the implementation of fat entry operations for exfat. - -Signed-off-by: Namjae Jeon -Signed-off-by: Sungjong Seo -Reviewed-by: Pali Rohár -Reviewed-by: Christoph Hellwig -Signed-off-by: Al Viro ---- - fs/exfat/fatent.c | 463 ++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 463 insertions(+) - create mode 100644 fs/exfat/fatent.c - -diff --git a/fs/exfat/fatent.c b/fs/exfat/fatent.c -new file mode 100644 -index 000000000000..a855b1769a96 ---- /dev/null -+++ b/fs/exfat/fatent.c -@@ -0,0 +1,463 @@ -+// SPDX-License-Identifier: GPL-2.0-or-later -+/* -+ * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -+ */ -+ -+#include -+#include -+#include -+ -+#include "exfat_raw.h" -+#include "exfat_fs.h" -+ -+static int exfat_mirror_bh(struct super_block *sb, sector_t sec, -+ struct buffer_head *bh) -+{ -+ struct buffer_head *c_bh; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ sector_t sec2; -+ int err = 0; -+ -+ if (sbi->FAT2_start_sector != sbi->FAT1_start_sector) { -+ sec2 = sec - sbi->FAT1_start_sector + sbi->FAT2_start_sector; -+ c_bh = sb_getblk(sb, sec2); -+ if (!c_bh) -+ return -ENOMEM; -+ memcpy(c_bh->b_data, bh->b_data, sb->s_blocksize); -+ set_buffer_uptodate(c_bh); -+ mark_buffer_dirty(c_bh); -+ if (sb->s_flags & SB_SYNCHRONOUS) -+ err = sync_dirty_buffer(c_bh); -+ brelse(c_bh); -+ } -+ -+ return err; -+} -+ -+static int __exfat_ent_get(struct super_block *sb, unsigned int loc, -+ unsigned int *content) -+{ -+ unsigned int off; -+ sector_t sec; -+ struct buffer_head *bh; -+ -+ sec = FAT_ENT_OFFSET_SECTOR(sb, loc); -+ off = FAT_ENT_OFFSET_BYTE_IN_SECTOR(sb, loc); -+ -+ bh = sb_bread(sb, sec); -+ if (!bh) -+ return -EIO; -+ -+ *content = le32_to_cpu(*(__le32 *)(&bh->b_data[off])); -+ -+ /* remap reserved clusters to simplify code */ -+ if (*content > EXFAT_BAD_CLUSTER) -+ *content = EXFAT_EOF_CLUSTER; -+ -+ brelse(bh); -+ return 0; -+} -+ -+int exfat_ent_set(struct super_block *sb, unsigned int loc, -+ unsigned int content) -+{ -+ unsigned int off; -+ sector_t sec; -+ __le32 *fat_entry; -+ struct buffer_head *bh; -+ -+ sec = FAT_ENT_OFFSET_SECTOR(sb, loc); -+ off = FAT_ENT_OFFSET_BYTE_IN_SECTOR(sb, loc); -+ -+ bh = sb_bread(sb, sec); -+ if (!bh) -+ return -EIO; -+ -+ fat_entry = (__le32 *)&(bh->b_data[off]); -+ *fat_entry = cpu_to_le32(content); -+ exfat_update_bh(sb, bh, sb->s_flags & SB_SYNCHRONOUS); -+ exfat_mirror_bh(sb, sec, bh); -+ brelse(bh); -+ return 0; -+} -+ -+static inline bool is_valid_cluster(struct exfat_sb_info *sbi, -+ unsigned int clus) -+{ -+ if (clus < EXFAT_FIRST_CLUSTER || sbi->num_clusters <= clus) -+ return false; -+ return true; -+} -+ -+int exfat_ent_get(struct super_block *sb, unsigned int loc, -+ unsigned int *content) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ int err; -+ -+ if (!is_valid_cluster(sbi, loc)) { -+ exfat_fs_error(sb, "invalid access to FAT (entry 0x%08x)", -+ loc); -+ return -EIO; -+ } -+ -+ err = __exfat_ent_get(sb, loc, content); -+ if (err) { -+ exfat_fs_error(sb, -+ "failed to access to FAT (entry 0x%08x, err:%d)", -+ loc, err); -+ return err; -+ } -+ -+ if (*content == EXFAT_FREE_CLUSTER) { -+ exfat_fs_error(sb, -+ "invalid access to FAT free cluster (entry 0x%08x)", -+ loc); -+ return -EIO; -+ } -+ -+ if (*content == EXFAT_BAD_CLUSTER) { -+ exfat_fs_error(sb, -+ "invalid access to FAT bad cluster (entry 0x%08x)", -+ loc); -+ return -EIO; -+ } -+ -+ if (*content != EXFAT_EOF_CLUSTER && !is_valid_cluster(sbi, *content)) { -+ exfat_fs_error(sb, -+ "invalid access to FAT (entry 0x%08x) bogus content (0x%08x)", -+ loc, *content); -+ return -EIO; -+ } -+ -+ return 0; -+} -+ -+int exfat_chain_cont_cluster(struct super_block *sb, unsigned int chain, -+ unsigned int len) -+{ -+ if (!len) -+ return 0; -+ -+ while (len > 1) { -+ if (exfat_ent_set(sb, chain, chain + 1)) -+ return -EIO; -+ chain++; -+ len--; -+ } -+ -+ if (exfat_ent_set(sb, chain, EXFAT_EOF_CLUSTER)) -+ return -EIO; -+ return 0; -+} -+ -+int exfat_free_cluster(struct inode *inode, struct exfat_chain *p_chain) -+{ -+ unsigned int num_clusters = 0; -+ unsigned int clu; -+ struct super_block *sb = inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ -+ /* invalid cluster number */ -+ if (p_chain->dir == EXFAT_FREE_CLUSTER || -+ p_chain->dir == EXFAT_EOF_CLUSTER || -+ p_chain->dir < EXFAT_FIRST_CLUSTER) -+ return 0; -+ -+ /* no cluster to truncate */ -+ if (p_chain->size == 0) -+ return 0; -+ -+ /* check cluster validation */ -+ if (p_chain->dir < 2 && p_chain->dir >= sbi->num_clusters) { -+ exfat_msg(sb, KERN_ERR, "invalid start cluster (%u)", -+ p_chain->dir); -+ return -EIO; -+ } -+ -+ set_bit(EXFAT_SB_DIRTY, &sbi->s_state); -+ clu = p_chain->dir; -+ -+ if (p_chain->flags == ALLOC_NO_FAT_CHAIN) { -+ do { -+ exfat_clear_bitmap(inode, clu); -+ clu++; -+ -+ num_clusters++; -+ } while (num_clusters < p_chain->size); -+ } else { -+ do { -+ exfat_clear_bitmap(inode, clu); -+ -+ if (exfat_get_next_cluster(sb, &clu)) -+ goto dec_used_clus; -+ -+ num_clusters++; -+ } while (clu != EXFAT_EOF_CLUSTER); -+ } -+ -+dec_used_clus: -+ sbi->used_clusters -= num_clusters; -+ return 0; -+} -+ -+int exfat_find_last_cluster(struct super_block *sb, struct exfat_chain *p_chain, -+ unsigned int *ret_clu) -+{ -+ unsigned int clu, next; -+ unsigned int count = 0; -+ -+ next = p_chain->dir; -+ if (p_chain->flags == ALLOC_NO_FAT_CHAIN) { -+ *ret_clu = next + p_chain->size - 1; -+ return 0; -+ } -+ -+ do { -+ count++; -+ clu = next; -+ if (exfat_ent_get(sb, clu, &next)) -+ return -EIO; -+ } while (next != EXFAT_EOF_CLUSTER); -+ -+ if (p_chain->size != count) { -+ exfat_fs_error(sb, -+ "bogus directory size (clus : ondisk(%d) != counted(%d))", -+ p_chain->size, count); -+ return -EIO; -+ } -+ -+ *ret_clu = clu; -+ return 0; -+} -+ -+static inline int exfat_sync_bhs(struct buffer_head **bhs, int nr_bhs) -+{ -+ int i, err = 0; -+ -+ for (i = 0; i < nr_bhs; i++) -+ write_dirty_buffer(bhs[i], 0); -+ -+ for (i = 0; i < nr_bhs; i++) { -+ wait_on_buffer(bhs[i]); -+ if (!err && !buffer_uptodate(bhs[i])) -+ err = -EIO; -+ } -+ return err; -+} -+ -+int exfat_zeroed_cluster(struct inode *dir, unsigned int clu) -+{ -+ struct super_block *sb = dir->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct buffer_head *bhs[MAX_BUF_PER_PAGE]; -+ int nr_bhs = MAX_BUF_PER_PAGE; -+ sector_t blknr, last_blknr; -+ int err, i, n; -+ -+ blknr = exfat_cluster_to_sector(sbi, clu); -+ last_blknr = blknr + sbi->sect_per_clus; -+ -+ if (last_blknr > sbi->num_sectors && sbi->num_sectors > 0) { -+ exfat_fs_error_ratelimit(sb, -+ "%s: out of range(sect:%llu len:%u)", -+ __func__, (unsigned long long)blknr, -+ sbi->sect_per_clus); -+ return -EIO; -+ } -+ -+ /* Zeroing the unused blocks on this cluster */ -+ n = 0; -+ while (blknr < last_blknr) { -+ bhs[n] = sb_getblk(sb, blknr); -+ if (!bhs[n]) { -+ err = -ENOMEM; -+ goto release_bhs; -+ } -+ memset(bhs[n]->b_data, 0, sb->s_blocksize); -+ exfat_update_bh(sb, bhs[n], 0); -+ -+ n++; -+ blknr++; -+ -+ if (n == nr_bhs) { -+ if (IS_DIRSYNC(dir)) { -+ err = exfat_sync_bhs(bhs, n); -+ if (err) -+ goto release_bhs; -+ } -+ -+ for (i = 0; i < n; i++) -+ brelse(bhs[i]); -+ n = 0; -+ } -+ } -+ -+ if (IS_DIRSYNC(dir)) { -+ err = exfat_sync_bhs(bhs, n); -+ if (err) -+ goto release_bhs; -+ } -+ -+ for (i = 0; i < n; i++) -+ brelse(bhs[i]); -+ -+ return 0; -+ -+release_bhs: -+ exfat_msg(sb, KERN_ERR, "failed zeroed sect %llu\n", -+ (unsigned long long)blknr); -+ for (i = 0; i < n; i++) -+ bforget(bhs[i]); -+ return err; -+} -+ -+int exfat_alloc_cluster(struct inode *inode, unsigned int num_alloc, -+ struct exfat_chain *p_chain) -+{ -+ int ret = -ENOSPC; -+ unsigned int num_clusters = 0, total_cnt; -+ unsigned int hint_clu, new_clu, last_clu = EXFAT_EOF_CLUSTER; -+ struct super_block *sb = inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ -+ total_cnt = EXFAT_DATA_CLUSTER_COUNT(sbi); -+ -+ if (unlikely(total_cnt < sbi->used_clusters)) { -+ exfat_fs_error_ratelimit(sb, -+ "%s: invalid used clusters(t:%u,u:%u)\n", -+ __func__, total_cnt, sbi->used_clusters); -+ return -EIO; -+ } -+ -+ if (num_alloc > total_cnt - sbi->used_clusters) -+ return -ENOSPC; -+ -+ hint_clu = p_chain->dir; -+ /* find new cluster */ -+ if (hint_clu == EXFAT_EOF_CLUSTER) { -+ if (sbi->clu_srch_ptr < EXFAT_FIRST_CLUSTER) { -+ exfat_msg(sb, KERN_ERR, -+ "sbi->clu_srch_ptr is invalid (%u)\n", -+ sbi->clu_srch_ptr); -+ sbi->clu_srch_ptr = EXFAT_FIRST_CLUSTER; -+ } -+ -+ hint_clu = exfat_find_free_bitmap(sb, sbi->clu_srch_ptr); -+ if (hint_clu == EXFAT_EOF_CLUSTER) -+ return -ENOSPC; -+ } -+ -+ /* check cluster validation */ -+ if (hint_clu < EXFAT_FIRST_CLUSTER && hint_clu >= sbi->num_clusters) { -+ exfat_msg(sb, KERN_ERR, "hint_cluster is invalid (%u)\n", -+ hint_clu); -+ hint_clu = EXFAT_FIRST_CLUSTER; -+ if (p_chain->flags == ALLOC_NO_FAT_CHAIN) { -+ if (exfat_chain_cont_cluster(sb, p_chain->dir, -+ num_clusters)) -+ return -EIO; -+ p_chain->flags = ALLOC_FAT_CHAIN; -+ } -+ } -+ -+ set_bit(EXFAT_SB_DIRTY, &sbi->s_state); -+ -+ p_chain->dir = EXFAT_EOF_CLUSTER; -+ -+ while ((new_clu = exfat_find_free_bitmap(sb, hint_clu)) != -+ EXFAT_EOF_CLUSTER) { -+ if (new_clu != hint_clu && -+ p_chain->flags == ALLOC_NO_FAT_CHAIN) { -+ if (exfat_chain_cont_cluster(sb, p_chain->dir, -+ num_clusters)) { -+ ret = -EIO; -+ goto free_cluster; -+ } -+ p_chain->flags = ALLOC_FAT_CHAIN; -+ } -+ -+ /* update allocation bitmap */ -+ if (exfat_set_bitmap(inode, new_clu)) { -+ ret = -EIO; -+ goto free_cluster; -+ } -+ -+ num_clusters++; -+ -+ /* update FAT table */ -+ if (p_chain->flags == ALLOC_FAT_CHAIN) { -+ if (exfat_ent_set(sb, new_clu, EXFAT_EOF_CLUSTER)) { -+ ret = -EIO; -+ goto free_cluster; -+ } -+ } -+ -+ if (p_chain->dir == EXFAT_EOF_CLUSTER) { -+ p_chain->dir = new_clu; -+ } else if (p_chain->flags == ALLOC_FAT_CHAIN) { -+ if (exfat_ent_set(sb, last_clu, new_clu)) { -+ ret = -EIO; -+ goto free_cluster; -+ } -+ } -+ last_clu = new_clu; -+ -+ if (--num_alloc == 0) { -+ sbi->clu_srch_ptr = hint_clu; -+ sbi->used_clusters += num_clusters; -+ -+ p_chain->size += num_clusters; -+ return 0; -+ } -+ -+ hint_clu = new_clu + 1; -+ if (hint_clu >= sbi->num_clusters) { -+ hint_clu = EXFAT_FIRST_CLUSTER; -+ -+ if (p_chain->flags == ALLOC_NO_FAT_CHAIN) { -+ if (exfat_chain_cont_cluster(sb, p_chain->dir, -+ num_clusters)) { -+ ret = -EIO; -+ goto free_cluster; -+ } -+ p_chain->flags = ALLOC_FAT_CHAIN; -+ } -+ } -+ } -+free_cluster: -+ if (num_clusters) -+ exfat_free_cluster(inode, p_chain); -+ return ret; -+} -+ -+int exfat_count_num_clusters(struct super_block *sb, -+ struct exfat_chain *p_chain, unsigned int *ret_count) -+{ -+ unsigned int i, count; -+ unsigned int clu; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ -+ if (!p_chain->dir || p_chain->dir == EXFAT_EOF_CLUSTER) { -+ *ret_count = 0; -+ return 0; -+ } -+ -+ if (p_chain->flags == ALLOC_NO_FAT_CHAIN) { -+ *ret_count = p_chain->size; -+ return 0; -+ } -+ -+ clu = p_chain->dir; -+ count = 0; -+ for (i = EXFAT_FIRST_CLUSTER; i < sbi->num_clusters; i++) { -+ count++; -+ if (exfat_ent_get(sb, clu, &clu)) -+ return -EIO; -+ if (clu == EXFAT_EOF_CLUSTER) -+ break; -+ } -+ -+ *ret_count = count; -+ return 0; -+} --- -2.25.1 - diff --git a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-file-operations.patch b/kernel/tools/perf/files/patches/mageia/fs-exfat-add-file-operations.patch deleted file mode 100644 index 49fd0d8357..0000000000 --- a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-file-operations.patch +++ /dev/null @@ -1,390 +0,0 @@ -From 98d917047e8b7f4bb2ff61d81b0ccd94a00444f9 Mon Sep 17 00:00:00 2001 -From: Namjae Jeon -Date: Mon, 2 Mar 2020 15:21:36 +0900 -Subject: [PATCH 05/14] exfat: add file operations -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This adds the implementation of file operations for exfat. - -Signed-off-by: Namjae Jeon -Signed-off-by: Sungjong Seo -Reviewed-by: Pali Rohár -Reviewed-by: Christoph Hellwig -Reviewed-by: Arnd Bergmann -Signed-off-by: Al Viro ---- - fs/exfat/file.c | 360 ++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 360 insertions(+) - create mode 100644 fs/exfat/file.c - -diff --git a/fs/exfat/file.c b/fs/exfat/file.c -new file mode 100644 -index 000000000000..483f683757aa ---- /dev/null -+++ b/fs/exfat/file.c -@@ -0,0 +1,360 @@ -+// SPDX-License-Identifier: GPL-2.0-or-later -+/* -+ * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -+ */ -+ -+#include -+#include -+#include -+ -+#include "exfat_raw.h" -+#include "exfat_fs.h" -+ -+static int exfat_cont_expand(struct inode *inode, loff_t size) -+{ -+ struct address_space *mapping = inode->i_mapping; -+ loff_t start = i_size_read(inode), count = size - i_size_read(inode); -+ int err, err2; -+ -+ err = generic_cont_expand_simple(inode, size); -+ if (err) -+ return err; -+ -+ inode->i_ctime = inode->i_mtime = current_time(inode); -+ mark_inode_dirty(inode); -+ -+ if (!IS_SYNC(inode)) -+ return 0; -+ -+ err = filemap_fdatawrite_range(mapping, start, start + count - 1); -+ err2 = sync_mapping_buffers(mapping); -+ if (!err) -+ err = err2; -+ err2 = write_inode_now(inode, 1); -+ if (!err) -+ err = err2; -+ if (err) -+ return err; -+ -+ return filemap_fdatawait_range(mapping, start, start + count - 1); -+} -+ -+static bool exfat_allow_set_time(struct exfat_sb_info *sbi, struct inode *inode) -+{ -+ mode_t allow_utime = sbi->options.allow_utime; -+ -+ if (!uid_eq(current_fsuid(), inode->i_uid)) { -+ if (in_group_p(inode->i_gid)) -+ allow_utime >>= 3; -+ if (allow_utime & MAY_WRITE) -+ return true; -+ } -+ -+ /* use a default check */ -+ return false; -+} -+ -+static int exfat_sanitize_mode(const struct exfat_sb_info *sbi, -+ struct inode *inode, umode_t *mode_ptr) -+{ -+ mode_t i_mode, mask, perm; -+ -+ i_mode = inode->i_mode; -+ -+ mask = (S_ISREG(i_mode) || S_ISLNK(i_mode)) ? -+ sbi->options.fs_fmask : sbi->options.fs_dmask; -+ perm = *mode_ptr & ~(S_IFMT | mask); -+ -+ /* Of the r and x bits, all (subject to umask) must be present.*/ -+ if ((perm & 0555) != (i_mode & 0555)) -+ return -EPERM; -+ -+ if (exfat_mode_can_hold_ro(inode)) { -+ /* -+ * Of the w bits, either all (subject to umask) or none must -+ * be present. -+ */ -+ if ((perm & 0222) && ((perm & 0222) != (0222 & ~mask))) -+ return -EPERM; -+ } else { -+ /* -+ * If exfat_mode_can_hold_ro(inode) is false, can't change -+ * w bits. -+ */ -+ if ((perm & 0222) != (0222 & ~mask)) -+ return -EPERM; -+ } -+ -+ *mode_ptr &= S_IFMT | perm; -+ -+ return 0; -+} -+ -+/* resize the file length */ -+int __exfat_truncate(struct inode *inode, loff_t new_size) -+{ -+ unsigned int num_clusters_new, num_clusters_phys; -+ unsigned int last_clu = EXFAT_FREE_CLUSTER; -+ struct exfat_chain clu; -+ struct exfat_dentry *ep, *ep2; -+ struct super_block *sb = inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ struct exfat_entry_set_cache *es = NULL; -+ int evict = (ei->dir.dir == DIR_DELETED) ? 1 : 0; -+ -+ /* check if the given file ID is opened */ -+ if (ei->type != TYPE_FILE && ei->type != TYPE_DIR) -+ return -EPERM; -+ -+ exfat_set_vol_flags(sb, VOL_DIRTY); -+ -+ num_clusters_new = EXFAT_B_TO_CLU_ROUND_UP(i_size_read(inode), sbi); -+ num_clusters_phys = -+ EXFAT_B_TO_CLU_ROUND_UP(EXFAT_I(inode)->i_size_ondisk, sbi); -+ -+ exfat_chain_set(&clu, ei->start_clu, num_clusters_phys, ei->flags); -+ -+ if (new_size > 0) { -+ /* -+ * Truncate FAT chain num_clusters after the first cluster -+ * num_clusters = min(new, phys); -+ */ -+ unsigned int num_clusters = -+ min(num_clusters_new, num_clusters_phys); -+ -+ /* -+ * Follow FAT chain -+ * (defensive coding - works fine even with corrupted FAT table -+ */ -+ if (clu.flags == ALLOC_NO_FAT_CHAIN) { -+ clu.dir += num_clusters; -+ clu.size -= num_clusters; -+ } else { -+ while (num_clusters > 0) { -+ last_clu = clu.dir; -+ if (exfat_get_next_cluster(sb, &(clu.dir))) -+ return -EIO; -+ -+ num_clusters--; -+ clu.size--; -+ } -+ } -+ } else { -+ ei->flags = ALLOC_NO_FAT_CHAIN; -+ ei->start_clu = EXFAT_EOF_CLUSTER; -+ } -+ -+ i_size_write(inode, new_size); -+ -+ if (ei->type == TYPE_FILE) -+ ei->attr |= ATTR_ARCHIVE; -+ -+ /* update the directory entry */ -+ if (!evict) { -+ struct timespec64 ts; -+ -+ es = exfat_get_dentry_set(sb, &(ei->dir), ei->entry, -+ ES_ALL_ENTRIES, &ep); -+ if (!es) -+ return -EIO; -+ ep2 = ep + 1; -+ -+ ts = current_time(inode); -+ exfat_set_entry_time(sbi, &ts, -+ &ep->dentry.file.modify_tz, -+ &ep->dentry.file.modify_time, -+ &ep->dentry.file.modify_date, -+ &ep->dentry.file.modify_time_ms); -+ ep->dentry.file.attr = cpu_to_le16(ei->attr); -+ -+ /* File size should be zero if there is no cluster allocated */ -+ if (ei->start_clu == EXFAT_EOF_CLUSTER) { -+ ep->dentry.stream.valid_size = 0; -+ ep->dentry.stream.size = 0; -+ } else { -+ ep->dentry.stream.valid_size = cpu_to_le64(new_size); -+ ep->dentry.stream.size = ep->dentry.stream.valid_size; -+ } -+ -+ if (new_size == 0) { -+ /* Any directory can not be truncated to zero */ -+ WARN_ON(ei->type != TYPE_FILE); -+ -+ ep2->dentry.stream.flags = ALLOC_FAT_CHAIN; -+ ep2->dentry.stream.start_clu = EXFAT_FREE_CLUSTER; -+ } -+ -+ if (exfat_update_dir_chksum_with_entry_set(sb, es, -+ inode_needs_sync(inode))) -+ return -EIO; -+ kfree(es); -+ } -+ -+ /* cut off from the FAT chain */ -+ if (ei->flags == ALLOC_FAT_CHAIN && last_clu != EXFAT_FREE_CLUSTER && -+ last_clu != EXFAT_EOF_CLUSTER) { -+ if (exfat_ent_set(sb, last_clu, EXFAT_EOF_CLUSTER)) -+ return -EIO; -+ } -+ -+ /* invalidate cache and free the clusters */ -+ /* clear exfat cache */ -+ exfat_cache_inval_inode(inode); -+ -+ /* hint information */ -+ ei->hint_bmap.off = EXFAT_EOF_CLUSTER; -+ ei->hint_bmap.clu = EXFAT_EOF_CLUSTER; -+ if (ei->rwoffset > new_size) -+ ei->rwoffset = new_size; -+ -+ /* hint_stat will be used if this is directory. */ -+ ei->hint_stat.eidx = 0; -+ ei->hint_stat.clu = ei->start_clu; -+ ei->hint_femp.eidx = EXFAT_HINT_NONE; -+ -+ /* free the clusters */ -+ if (exfat_free_cluster(inode, &clu)) -+ return -EIO; -+ -+ exfat_set_vol_flags(sb, VOL_CLEAN); -+ -+ return 0; -+} -+ -+void exfat_truncate(struct inode *inode, loff_t size) -+{ -+ struct super_block *sb = inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ unsigned int blocksize = 1 << inode->i_blkbits; -+ loff_t aligned_size; -+ int err; -+ -+ mutex_lock(&sbi->s_lock); -+ if (EXFAT_I(inode)->start_clu == 0) { -+ /* -+ * Empty start_clu != ~0 (not allocated) -+ */ -+ exfat_fs_error(sb, "tried to truncate zeroed cluster."); -+ goto write_size; -+ } -+ -+ err = __exfat_truncate(inode, i_size_read(inode)); -+ if (err) -+ goto write_size; -+ -+ inode->i_ctime = inode->i_mtime = current_time(inode); -+ if (IS_DIRSYNC(inode)) -+ exfat_sync_inode(inode); -+ else -+ mark_inode_dirty(inode); -+ -+ inode->i_blocks = ((i_size_read(inode) + (sbi->cluster_size - 1)) & -+ ~(sbi->cluster_size - 1)) >> inode->i_blkbits; -+write_size: -+ aligned_size = i_size_read(inode); -+ if (aligned_size & (blocksize - 1)) { -+ aligned_size |= (blocksize - 1); -+ aligned_size++; -+ } -+ -+ if (EXFAT_I(inode)->i_size_ondisk > i_size_read(inode)) -+ EXFAT_I(inode)->i_size_ondisk = aligned_size; -+ -+ if (EXFAT_I(inode)->i_size_aligned > i_size_read(inode)) -+ EXFAT_I(inode)->i_size_aligned = aligned_size; -+ mutex_unlock(&sbi->s_lock); -+} -+ -+int exfat_getattr(const struct path *path, struct kstat *stat, -+ unsigned int request_mask, unsigned int query_flags) -+{ -+ struct inode *inode = d_backing_inode(path->dentry); -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ -+ generic_fillattr(inode, stat); -+ stat->result_mask |= STATX_BTIME; -+ stat->btime.tv_sec = ei->i_crtime.tv_sec; -+ stat->btime.tv_nsec = ei->i_crtime.tv_nsec; -+ stat->blksize = EXFAT_SB(inode->i_sb)->cluster_size; -+ return 0; -+} -+ -+int exfat_setattr(struct dentry *dentry, struct iattr *attr) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(dentry->d_sb); -+ struct inode *inode = dentry->d_inode; -+ unsigned int ia_valid; -+ int error; -+ -+ if ((attr->ia_valid & ATTR_SIZE) && -+ attr->ia_size > i_size_read(inode)) { -+ error = exfat_cont_expand(inode, attr->ia_size); -+ if (error || attr->ia_valid == ATTR_SIZE) -+ return error; -+ attr->ia_valid &= ~ATTR_SIZE; -+ } -+ -+ /* Check for setting the inode time. */ -+ ia_valid = attr->ia_valid; -+ if ((ia_valid & (ATTR_MTIME_SET | ATTR_ATIME_SET | ATTR_TIMES_SET)) && -+ exfat_allow_set_time(sbi, inode)) { -+ attr->ia_valid &= ~(ATTR_MTIME_SET | ATTR_ATIME_SET | -+ ATTR_TIMES_SET); -+ } -+ -+ error = setattr_prepare(dentry, attr); -+ attr->ia_valid = ia_valid; -+ if (error) -+ goto out; -+ -+ if (((attr->ia_valid & ATTR_UID) && -+ !uid_eq(attr->ia_uid, sbi->options.fs_uid)) || -+ ((attr->ia_valid & ATTR_GID) && -+ !gid_eq(attr->ia_gid, sbi->options.fs_gid)) || -+ ((attr->ia_valid & ATTR_MODE) && -+ (attr->ia_mode & ~(S_IFREG | S_IFLNK | S_IFDIR | 0777)))) { -+ error = -EPERM; -+ goto out; -+ } -+ -+ /* -+ * We don't return -EPERM here. Yes, strange, but this is too -+ * old behavior. -+ */ -+ if (attr->ia_valid & ATTR_MODE) { -+ if (exfat_sanitize_mode(sbi, inode, &attr->ia_mode) < 0) -+ attr->ia_valid &= ~ATTR_MODE; -+ } -+ -+ if (attr->ia_valid & ATTR_SIZE) { -+ error = exfat_block_truncate_page(inode, attr->ia_size); -+ if (error) -+ goto out; -+ -+ down_write(&EXFAT_I(inode)->truncate_lock); -+ truncate_setsize(inode, attr->ia_size); -+ exfat_truncate(inode, attr->ia_size); -+ up_write(&EXFAT_I(inode)->truncate_lock); -+ } -+ -+ setattr_copy(inode, attr); -+ mark_inode_dirty(inode); -+ -+out: -+ return error; -+} -+ -+const struct file_operations exfat_file_operations = { -+ .llseek = generic_file_llseek, -+ .read_iter = generic_file_read_iter, -+ .write_iter = generic_file_write_iter, -+ .mmap = generic_file_mmap, -+ .fsync = generic_file_fsync, -+ .splice_read = generic_file_splice_read, -+}; -+ -+const struct inode_operations exfat_file_inode_operations = { -+ .setattr = exfat_setattr, -+ .getattr = exfat_getattr, -+}; --- -2.25.1 - diff --git a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-in-memory-and-on-disk-structures-and-heade.patch b/kernel/tools/perf/files/patches/mageia/fs-exfat-add-in-memory-and-on-disk-structures-and-heade.patch deleted file mode 100644 index e347a9eec6..0000000000 --- a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-in-memory-and-on-disk-structures-and-heade.patch +++ /dev/null @@ -1,740 +0,0 @@ -From 1acf1a564b6034b5af1e7fb23cb98cb3bb4f6003 Mon Sep 17 00:00:00 2001 -From: Namjae Jeon -Date: Mon, 2 Mar 2020 15:21:32 +0900 -Subject: [PATCH 01/14] exfat: add in-memory and on-disk structures and headers -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This adds in-memory and on-disk structures and headers. - -Signed-off-by: Namjae Jeon -Signed-off-by: Sungjong Seo -Reviewed-by: Pali Rohár -Reviewed-by: Christoph Hellwig -Signed-off-by: Al Viro ---- - fs/exfat/exfat_fs.h | 519 +++++++++++++++++++++++++++++++++++++++++++ - fs/exfat/exfat_raw.h | 184 +++++++++++++++ - 2 files changed, 703 insertions(+) - create mode 100644 fs/exfat/exfat_fs.h - create mode 100644 fs/exfat/exfat_raw.h - -diff --git a/fs/exfat/exfat_fs.h b/fs/exfat/exfat_fs.h -new file mode 100644 -index 000000000000..67d4e46fb810 ---- /dev/null -+++ b/fs/exfat/exfat_fs.h -@@ -0,0 +1,519 @@ -+/* SPDX-License-Identifier: GPL-2.0-or-later */ -+/* -+ * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -+ */ -+ -+#ifndef _EXFAT_FS_H -+#define _EXFAT_FS_H -+ -+#include -+#include -+#include -+ -+#define EXFAT_SUPER_MAGIC 0x2011BAB0UL -+#define EXFAT_ROOT_INO 1 -+ -+#define EXFAT_SB_DIRTY 0 -+ -+#define EXFAT_CLUSTERS_UNTRACKED (~0u) -+ -+/* -+ * exfat error flags -+ */ -+enum exfat_error_mode { -+ EXFAT_ERRORS_CONT, /* ignore error and continue */ -+ EXFAT_ERRORS_PANIC, /* panic on error */ -+ EXFAT_ERRORS_RO, /* remount r/o on error */ -+}; -+ -+/* -+ * exfat nls lossy flag -+ */ -+enum { -+ NLS_NAME_NO_LOSSY, /* no lossy */ -+ NLS_NAME_LOSSY, /* just detected incorrect filename(s) */ -+ NLS_NAME_OVERLEN, /* the length is over than its limit */ -+}; -+ -+#define EXFAT_HASH_BITS 8 -+#define EXFAT_HASH_SIZE (1UL << EXFAT_HASH_BITS) -+ -+/* -+ * Type Definitions -+ */ -+#define ES_2_ENTRIES 2 -+#define ES_ALL_ENTRIES 0 -+ -+#define DIR_DELETED 0xFFFF0321 -+ -+/* type values */ -+#define TYPE_UNUSED 0x0000 -+#define TYPE_DELETED 0x0001 -+#define TYPE_INVALID 0x0002 -+#define TYPE_CRITICAL_PRI 0x0100 -+#define TYPE_BITMAP 0x0101 -+#define TYPE_UPCASE 0x0102 -+#define TYPE_VOLUME 0x0103 -+#define TYPE_DIR 0x0104 -+#define TYPE_FILE 0x011F -+#define TYPE_CRITICAL_SEC 0x0200 -+#define TYPE_STREAM 0x0201 -+#define TYPE_EXTEND 0x0202 -+#define TYPE_ACL 0x0203 -+#define TYPE_BENIGN_PRI 0x0400 -+#define TYPE_GUID 0x0401 -+#define TYPE_PADDING 0x0402 -+#define TYPE_ACLTAB 0x0403 -+#define TYPE_BENIGN_SEC 0x0800 -+#define TYPE_ALL 0x0FFF -+ -+#define MAX_CHARSET_SIZE 6 /* max size of multi-byte character */ -+#define MAX_NAME_LENGTH 255 /* max len of file name excluding NULL */ -+#define MAX_VFSNAME_BUF_SIZE ((MAX_NAME_LENGTH + 1) * MAX_CHARSET_SIZE) -+ -+#define FAT_CACHE_SIZE 128 -+#define FAT_CACHE_HASH_SIZE 64 -+#define BUF_CACHE_SIZE 256 -+#define BUF_CACHE_HASH_SIZE 64 -+ -+#define EXFAT_HINT_NONE -1 -+#define EXFAT_MIN_SUBDIR 2 -+ -+/* -+ * helpers for cluster size to byte conversion. -+ */ -+#define EXFAT_CLU_TO_B(b, sbi) ((b) << (sbi)->cluster_size_bits) -+#define EXFAT_B_TO_CLU(b, sbi) ((b) >> (sbi)->cluster_size_bits) -+#define EXFAT_B_TO_CLU_ROUND_UP(b, sbi) \ -+ (((b - 1) >> (sbi)->cluster_size_bits) + 1) -+#define EXFAT_CLU_OFFSET(off, sbi) ((off) & ((sbi)->cluster_size - 1)) -+ -+/* -+ * helpers for block size to byte conversion. -+ */ -+#define EXFAT_BLK_TO_B(b, sb) ((b) << (sb)->s_blocksize_bits) -+#define EXFAT_B_TO_BLK(b, sb) ((b) >> (sb)->s_blocksize_bits) -+#define EXFAT_B_TO_BLK_ROUND_UP(b, sb) \ -+ (((b - 1) >> (sb)->s_blocksize_bits) + 1) -+#define EXFAT_BLK_OFFSET(off, sb) ((off) & ((sb)->s_blocksize - 1)) -+ -+/* -+ * helpers for block size to dentry size conversion. -+ */ -+#define EXFAT_B_TO_DEN_IDX(b, sbi) \ -+ ((b) << ((sbi)->cluster_size_bits - DENTRY_SIZE_BITS)) -+#define EXFAT_B_TO_DEN(b) ((b) >> DENTRY_SIZE_BITS) -+#define EXFAT_DEN_TO_B(b) ((b) << DENTRY_SIZE_BITS) -+ -+/* -+ * helpers for fat entry. -+ */ -+#define FAT_ENT_SIZE (4) -+#define FAT_ENT_SIZE_BITS (2) -+#define FAT_ENT_OFFSET_SECTOR(sb, loc) (EXFAT_SB(sb)->FAT1_start_sector + \ -+ (((u64)loc << FAT_ENT_SIZE_BITS) >> sb->s_blocksize_bits)) -+#define FAT_ENT_OFFSET_BYTE_IN_SECTOR(sb, loc) \ -+ ((loc << FAT_ENT_SIZE_BITS) & (sb->s_blocksize - 1)) -+ -+/* -+ * helpers for bitmap. -+ */ -+#define CLUSTER_TO_BITMAP_ENT(clu) ((clu) - EXFAT_RESERVED_CLUSTERS) -+#define BITMAP_ENT_TO_CLUSTER(ent) ((ent) + EXFAT_RESERVED_CLUSTERS) -+#define BITS_PER_SECTOR(sb) ((sb)->s_blocksize * BITS_PER_BYTE) -+#define BITS_PER_SECTOR_MASK(sb) (BITS_PER_SECTOR(sb) - 1) -+#define BITMAP_OFFSET_SECTOR_INDEX(sb, ent) \ -+ ((ent / BITS_PER_BYTE) >> (sb)->s_blocksize_bits) -+#define BITMAP_OFFSET_BIT_IN_SECTOR(sb, ent) (ent & BITS_PER_SECTOR_MASK(sb)) -+#define BITMAP_OFFSET_BYTE_IN_SECTOR(sb, ent) \ -+ ((ent / BITS_PER_BYTE) & ((sb)->s_blocksize - 1)) -+#define BITS_PER_BYTE_MASK 0x7 -+#define IGNORED_BITS_REMAINED(clu, clu_base) ((1 << ((clu) - (clu_base))) - 1) -+ -+struct exfat_dentry_namebuf { -+ char *lfn; -+ int lfnbuf_len; /* usally MAX_UNINAME_BUF_SIZE */ -+}; -+ -+/* unicode name structure */ -+struct exfat_uni_name { -+ /* +3 for null and for converting */ -+ unsigned short name[MAX_NAME_LENGTH + 3]; -+ unsigned short name_hash; -+ unsigned char name_len; -+}; -+ -+/* directory structure */ -+struct exfat_chain { -+ unsigned int dir; -+ unsigned int size; -+ unsigned char flags; -+}; -+ -+/* first empty entry hint information */ -+struct exfat_hint_femp { -+ /* entry index of a directory */ -+ int eidx; -+ /* count of continuous empty entry */ -+ int count; -+ /* the cluster that first empty slot exists in */ -+ struct exfat_chain cur; -+}; -+ -+/* hint structure */ -+struct exfat_hint { -+ unsigned int clu; -+ union { -+ unsigned int off; /* cluster offset */ -+ int eidx; /* entry index */ -+ }; -+}; -+ -+struct exfat_entry_set_cache { -+ /* sector number that contains file_entry */ -+ sector_t sector; -+ /* byte offset in the sector */ -+ unsigned int offset; -+ /* flag in stream entry. 01 for cluster chain, 03 for contig. */ -+ int alloc_flag; -+ unsigned int num_entries; -+ struct exfat_dentry entries[]; -+}; -+ -+struct exfat_dir_entry { -+ struct exfat_chain dir; -+ int entry; -+ unsigned int type; -+ unsigned int start_clu; -+ unsigned char flags; -+ unsigned short attr; -+ loff_t size; -+ unsigned int num_subdirs; -+ struct timespec64 atime; -+ struct timespec64 mtime; -+ struct timespec64 crtime; -+ struct exfat_dentry_namebuf namebuf; -+}; -+ -+/* -+ * exfat mount in-memory data -+ */ -+struct exfat_mount_options { -+ kuid_t fs_uid; -+ kgid_t fs_gid; -+ unsigned short fs_fmask; -+ unsigned short fs_dmask; -+ /* permission for setting the [am]time */ -+ unsigned short allow_utime; -+ /* charset for filename input/display */ -+ char *iocharset; -+ /* on error: continue, panic, remount-ro */ -+ enum exfat_error_mode errors; -+ unsigned utf8:1, /* Use of UTF-8 character set */ -+ discard:1; /* Issue discard requests on deletions */ -+ int time_offset; /* Offset of timestamps from UTC (in minutes) */ -+}; -+ -+/* -+ * EXFAT file system superblock in-memory data -+ */ -+struct exfat_sb_info { -+ unsigned long long num_sectors; /* num of sectors in volume */ -+ unsigned int num_clusters; /* num of clusters in volume */ -+ unsigned int cluster_size; /* cluster size in bytes */ -+ unsigned int cluster_size_bits; -+ unsigned int sect_per_clus; /* cluster size in sectors */ -+ unsigned int sect_per_clus_bits; -+ unsigned long long FAT1_start_sector; /* FAT1 start sector */ -+ unsigned long long FAT2_start_sector; /* FAT2 start sector */ -+ unsigned long long data_start_sector; /* data area start sector */ -+ unsigned int num_FAT_sectors; /* num of FAT sectors */ -+ unsigned int root_dir; /* root dir cluster */ -+ unsigned int dentries_per_clu; /* num of dentries per cluster */ -+ unsigned int vol_flag; /* volume dirty flag */ -+ struct buffer_head *pbr_bh; /* buffer_head of PBR sector */ -+ -+ unsigned int map_clu; /* allocation bitmap start cluster */ -+ unsigned int map_sectors; /* num of allocation bitmap sectors */ -+ struct buffer_head **vol_amap; /* allocation bitmap */ -+ -+ unsigned short *vol_utbl; /* upcase table */ -+ -+ unsigned int clu_srch_ptr; /* cluster search pointer */ -+ unsigned int used_clusters; /* number of used clusters */ -+ -+ unsigned long s_state; -+ struct mutex s_lock; /* superblock lock */ -+ struct exfat_mount_options options; -+ struct nls_table *nls_io; /* Charset used for input and display */ -+ struct ratelimit_state ratelimit; -+ -+ spinlock_t inode_hash_lock; -+ struct hlist_head inode_hashtable[EXFAT_HASH_SIZE]; -+ -+ struct rcu_head rcu; -+}; -+ -+/* -+ * EXFAT file system inode in-memory data -+ */ -+struct exfat_inode_info { -+ struct exfat_chain dir; -+ int entry; -+ unsigned int type; -+ unsigned short attr; -+ unsigned int start_clu; -+ unsigned char flags; -+ /* -+ * the copy of low 32bit of i_version to check -+ * the validation of hint_stat. -+ */ -+ unsigned int version; -+ /* file offset or dentry index for readdir */ -+ loff_t rwoffset; -+ -+ /* hint for cluster last accessed */ -+ struct exfat_hint hint_bmap; -+ /* hint for entry index we try to lookup next time */ -+ struct exfat_hint hint_stat; -+ /* hint for first empty entry */ -+ struct exfat_hint_femp hint_femp; -+ -+ spinlock_t cache_lru_lock; -+ struct list_head cache_lru; -+ int nr_caches; -+ /* for avoiding the race between alloc and free */ -+ unsigned int cache_valid_id; -+ -+ /* -+ * NOTE: i_size_ondisk is 64bits, so must hold ->inode_lock to access. -+ * physically allocated size. -+ */ -+ loff_t i_size_ondisk; -+ /* block-aligned i_size (used in cont_write_begin) */ -+ loff_t i_size_aligned; -+ /* on-disk position of directory entry or 0 */ -+ loff_t i_pos; -+ /* hash by i_location */ -+ struct hlist_node i_hash_fat; -+ /* protect bmap against truncate */ -+ struct rw_semaphore truncate_lock; -+ struct inode vfs_inode; -+ /* File creation time */ -+ struct timespec64 i_crtime; -+}; -+ -+static inline struct exfat_sb_info *EXFAT_SB(struct super_block *sb) -+{ -+ return sb->s_fs_info; -+} -+ -+static inline struct exfat_inode_info *EXFAT_I(struct inode *inode) -+{ -+ return container_of(inode, struct exfat_inode_info, vfs_inode); -+} -+ -+/* -+ * If ->i_mode can't hold 0222 (i.e. ATTR_RO), we use ->i_attrs to -+ * save ATTR_RO instead of ->i_mode. -+ * -+ * If it's directory and !sbi->options.rodir, ATTR_RO isn't read-only -+ * bit, it's just used as flag for app. -+ */ -+static inline int exfat_mode_can_hold_ro(struct inode *inode) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(inode->i_sb); -+ -+ if (S_ISDIR(inode->i_mode)) -+ return 0; -+ -+ if ((~sbi->options.fs_fmask) & 0222) -+ return 1; -+ return 0; -+} -+ -+/* Convert attribute bits and a mask to the UNIX mode. */ -+static inline mode_t exfat_make_mode(struct exfat_sb_info *sbi, -+ unsigned short attr, mode_t mode) -+{ -+ if ((attr & ATTR_READONLY) && !(attr & ATTR_SUBDIR)) -+ mode &= ~0222; -+ -+ if (attr & ATTR_SUBDIR) -+ return (mode & ~sbi->options.fs_dmask) | S_IFDIR; -+ -+ return (mode & ~sbi->options.fs_fmask) | S_IFREG; -+} -+ -+/* Return the FAT attribute byte for this inode */ -+static inline unsigned short exfat_make_attr(struct inode *inode) -+{ -+ unsigned short attr = EXFAT_I(inode)->attr; -+ -+ if (S_ISDIR(inode->i_mode)) -+ attr |= ATTR_SUBDIR; -+ if (exfat_mode_can_hold_ro(inode) && !(inode->i_mode & 0222)) -+ attr |= ATTR_READONLY; -+ return attr; -+} -+ -+static inline void exfat_save_attr(struct inode *inode, unsigned short attr) -+{ -+ if (exfat_mode_can_hold_ro(inode)) -+ EXFAT_I(inode)->attr = attr & (ATTR_RWMASK | ATTR_READONLY); -+ else -+ EXFAT_I(inode)->attr = attr & ATTR_RWMASK; -+} -+ -+static inline bool exfat_is_last_sector_in_cluster(struct exfat_sb_info *sbi, -+ sector_t sec) -+{ -+ return ((sec - sbi->data_start_sector + 1) & -+ ((1 << sbi->sect_per_clus_bits) - 1)) == 0; -+} -+ -+static inline sector_t exfat_cluster_to_sector(struct exfat_sb_info *sbi, -+ unsigned int clus) -+{ -+ return ((clus - EXFAT_RESERVED_CLUSTERS) << sbi->sect_per_clus_bits) + -+ sbi->data_start_sector; -+} -+ -+static inline int exfat_sector_to_cluster(struct exfat_sb_info *sbi, -+ sector_t sec) -+{ -+ return ((sec - sbi->data_start_sector) >> sbi->sect_per_clus_bits) + -+ EXFAT_RESERVED_CLUSTERS; -+} -+ -+/* super.c */ -+int exfat_set_vol_flags(struct super_block *sb, unsigned short new_flag); -+ -+/* fatent.c */ -+#define exfat_get_next_cluster(sb, pclu) exfat_ent_get(sb, *(pclu), pclu) -+ -+int exfat_alloc_cluster(struct inode *inode, unsigned int num_alloc, -+ struct exfat_chain *p_chain); -+int exfat_free_cluster(struct inode *inode, struct exfat_chain *p_chain); -+int exfat_ent_get(struct super_block *sb, unsigned int loc, -+ unsigned int *content); -+int exfat_ent_set(struct super_block *sb, unsigned int loc, -+ unsigned int content); -+int exfat_count_ext_entries(struct super_block *sb, struct exfat_chain *p_dir, -+ int entry, struct exfat_dentry *p_entry); -+int exfat_chain_cont_cluster(struct super_block *sb, unsigned int chain, -+ unsigned int len); -+int exfat_zeroed_cluster(struct inode *dir, unsigned int clu); -+int exfat_find_last_cluster(struct super_block *sb, struct exfat_chain *p_chain, -+ unsigned int *ret_clu); -+int exfat_count_num_clusters(struct super_block *sb, -+ struct exfat_chain *p_chain, unsigned int *ret_count); -+ -+/* balloc.c */ -+int exfat_load_bitmap(struct super_block *sb); -+void exfat_free_bitmap(struct exfat_sb_info *sbi); -+int exfat_set_bitmap(struct inode *inode, unsigned int clu); -+void exfat_clear_bitmap(struct inode *inode, unsigned int clu); -+unsigned int exfat_find_free_bitmap(struct super_block *sb, unsigned int clu); -+int exfat_count_used_clusters(struct super_block *sb, unsigned int *ret_count); -+ -+/* file.c */ -+extern const struct file_operations exfat_file_operations; -+int __exfat_truncate(struct inode *inode, loff_t new_size); -+void exfat_truncate(struct inode *inode, loff_t size); -+int exfat_setattr(struct dentry *dentry, struct iattr *attr); -+int exfat_getattr(const struct path *path, struct kstat *stat, -+ unsigned int request_mask, unsigned int query_flags); -+ -+/* namei.c */ -+extern const struct dentry_operations exfat_dentry_ops; -+extern const struct dentry_operations exfat_utf8_dentry_ops; -+ -+/* cache.c */ -+int exfat_cache_init(void); -+void exfat_cache_shutdown(void); -+void exfat_cache_init_inode(struct inode *inode); -+void exfat_cache_inval_inode(struct inode *inode); -+int exfat_get_cluster(struct inode *inode, unsigned int cluster, -+ unsigned int *fclus, unsigned int *dclus, -+ unsigned int *last_dclus, int allow_eof); -+ -+/* dir.c */ -+extern const struct inode_operations exfat_dir_inode_operations; -+extern const struct file_operations exfat_dir_operations; -+unsigned int exfat_get_entry_type(struct exfat_dentry *p_entry); -+int exfat_init_dir_entry(struct inode *inode, struct exfat_chain *p_dir, -+ int entry, unsigned int type, unsigned int start_clu, -+ unsigned long long size); -+int exfat_init_ext_entry(struct inode *inode, struct exfat_chain *p_dir, -+ int entry, int num_entries, struct exfat_uni_name *p_uniname); -+int exfat_remove_entries(struct inode *inode, struct exfat_chain *p_dir, -+ int entry, int order, int num_entries); -+int exfat_update_dir_chksum(struct inode *inode, struct exfat_chain *p_dir, -+ int entry); -+int exfat_update_dir_chksum_with_entry_set(struct super_block *sb, -+ struct exfat_entry_set_cache *es, int sync); -+int exfat_calc_num_entries(struct exfat_uni_name *p_uniname); -+int exfat_find_dir_entry(struct super_block *sb, struct exfat_inode_info *ei, -+ struct exfat_chain *p_dir, struct exfat_uni_name *p_uniname, -+ int num_entries, unsigned int type); -+int exfat_alloc_new_dir(struct inode *inode, struct exfat_chain *clu); -+int exfat_find_location(struct super_block *sb, struct exfat_chain *p_dir, -+ int entry, sector_t *sector, int *offset); -+struct exfat_dentry *exfat_get_dentry(struct super_block *sb, -+ struct exfat_chain *p_dir, int entry, struct buffer_head **bh, -+ sector_t *sector); -+struct exfat_entry_set_cache *exfat_get_dentry_set(struct super_block *sb, -+ struct exfat_chain *p_dir, int entry, unsigned int type, -+ struct exfat_dentry **file_ep); -+int exfat_count_dir_entries(struct super_block *sb, struct exfat_chain *p_dir); -+ -+/* inode.c */ -+extern const struct inode_operations exfat_file_inode_operations; -+void exfat_sync_inode(struct inode *inode); -+struct inode *exfat_build_inode(struct super_block *sb, -+ struct exfat_dir_entry *info, loff_t i_pos); -+void exfat_hash_inode(struct inode *inode, loff_t i_pos); -+void exfat_unhash_inode(struct inode *inode); -+struct inode *exfat_iget(struct super_block *sb, loff_t i_pos); -+int exfat_write_inode(struct inode *inode, struct writeback_control *wbc); -+void exfat_evict_inode(struct inode *inode); -+int exfat_block_truncate_page(struct inode *inode, loff_t from); -+ -+/* exfat/nls.c */ -+unsigned short exfat_toupper(struct super_block *sb, unsigned short a); -+int exfat_uniname_ncmp(struct super_block *sb, unsigned short *a, -+ unsigned short *b, unsigned int len); -+int exfat_utf16_to_nls(struct super_block *sb, -+ struct exfat_uni_name *uniname, unsigned char *p_cstring, -+ int len); -+int exfat_nls_to_utf16(struct super_block *sb, -+ const unsigned char *p_cstring, const int len, -+ struct exfat_uni_name *uniname, int *p_lossy); -+int exfat_create_upcase_table(struct super_block *sb); -+void exfat_free_upcase_table(struct exfat_sb_info *sbi); -+unsigned short exfat_high_surrogate(unicode_t u); -+unsigned short exfat_low_surrogate(unicode_t u); -+ -+/* exfat/misc.c */ -+void __exfat_fs_error(struct super_block *sb, int report, const char *fmt, ...) -+ __printf(3, 4) __cold; -+#define exfat_fs_error(sb, fmt, args...) \ -+ __exfat_fs_error(sb, 1, fmt, ## args) -+#define exfat_fs_error_ratelimit(sb, fmt, args...) \ -+ __exfat_fs_error(sb, __ratelimit(&EXFAT_SB(sb)->ratelimit), \ -+ fmt, ## args) -+void exfat_msg(struct super_block *sb, const char *lv, const char *fmt, ...) -+ __printf(3, 4) __cold; -+void exfat_get_entry_time(struct exfat_sb_info *sbi, struct timespec64 *ts, -+ u8 tz, __le16 time, __le16 date, u8 time_ms); -+void exfat_set_entry_time(struct exfat_sb_info *sbi, struct timespec64 *ts, -+ u8 *tz, __le16 *time, __le16 *date, u8 *time_ms); -+unsigned short exfat_calc_chksum_2byte(void *data, int len, -+ unsigned short chksum, int type); -+void exfat_update_bh(struct super_block *sb, struct buffer_head *bh, int sync); -+void exfat_chain_set(struct exfat_chain *ec, unsigned int dir, -+ unsigned int size, unsigned char flags); -+void exfat_chain_dup(struct exfat_chain *dup, struct exfat_chain *ec); -+ -+#endif /* !_EXFAT_FS_H */ -diff --git a/fs/exfat/exfat_raw.h b/fs/exfat/exfat_raw.h -new file mode 100644 -index 000000000000..2a841010e649 ---- /dev/null -+++ b/fs/exfat/exfat_raw.h -@@ -0,0 +1,184 @@ -+/* SPDX-License-Identifier: GPL-2.0-or-later */ -+/* -+ * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -+ */ -+ -+#ifndef _EXFAT_RAW_H -+#define _EXFAT_RAW_H -+ -+#include -+ -+#define PBR_SIGNATURE 0xAA55 -+ -+#define EXFAT_MAX_FILE_LEN 255 -+ -+#define VOL_CLEAN 0x0000 -+#define VOL_DIRTY 0x0002 -+ -+#define EXFAT_EOF_CLUSTER 0xFFFFFFFFu -+#define EXFAT_BAD_CLUSTER 0xFFFFFFF7u -+#define EXFAT_FREE_CLUSTER 0 -+/* Cluster 0, 1 are reserved, the first cluster is 2 in the cluster heap. */ -+#define EXFAT_RESERVED_CLUSTERS 2 -+#define EXFAT_FIRST_CLUSTER 2 -+#define EXFAT_DATA_CLUSTER_COUNT(sbi) \ -+ ((sbi)->num_clusters - EXFAT_RESERVED_CLUSTERS) -+ -+/* AllocationPossible and NoFatChain field in GeneralSecondaryFlags Field */ -+#define ALLOC_FAT_CHAIN 0x01 -+#define ALLOC_NO_FAT_CHAIN 0x03 -+ -+#define DENTRY_SIZE 32 /* directory entry size */ -+#define DENTRY_SIZE_BITS 5 -+/* exFAT allows 8388608(256MB) directory entries */ -+#define MAX_EXFAT_DENTRIES 8388608 -+ -+/* dentry types */ -+#define EXFAT_UNUSED 0x00 /* end of directory */ -+#define EXFAT_DELETE (~0x80) -+#define IS_EXFAT_DELETED(x) ((x) < 0x80) /* deleted file (0x01~0x7F) */ -+#define EXFAT_INVAL 0x80 /* invalid value */ -+#define EXFAT_BITMAP 0x81 /* allocation bitmap */ -+#define EXFAT_UPCASE 0x82 /* upcase table */ -+#define EXFAT_VOLUME 0x83 /* volume label */ -+#define EXFAT_FILE 0x85 /* file or dir */ -+#define EXFAT_GUID 0xA0 -+#define EXFAT_PADDING 0xA1 -+#define EXFAT_ACLTAB 0xA2 -+#define EXFAT_STREAM 0xC0 /* stream entry */ -+#define EXFAT_NAME 0xC1 /* file name entry */ -+#define EXFAT_ACL 0xC2 /* stream entry */ -+ -+#define IS_EXFAT_CRITICAL_PRI(x) (x < 0xA0) -+#define IS_EXFAT_BENIGN_PRI(x) (x < 0xC0) -+#define IS_EXFAT_CRITICAL_SEC(x) (x < 0xE0) -+ -+/* checksum types */ -+#define CS_DIR_ENTRY 0 -+#define CS_PBR_SECTOR 1 -+#define CS_DEFAULT 2 -+ -+/* file attributes */ -+#define ATTR_READONLY 0x0001 -+#define ATTR_HIDDEN 0x0002 -+#define ATTR_SYSTEM 0x0004 -+#define ATTR_VOLUME 0x0008 -+#define ATTR_SUBDIR 0x0010 -+#define ATTR_ARCHIVE 0x0020 -+ -+#define ATTR_RWMASK (ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME | \ -+ ATTR_SUBDIR | ATTR_ARCHIVE) -+ -+#define PBR64_JUMP_BOOT_LEN 3 -+#define PBR64_OEM_NAME_LEN 8 -+#define PBR64_RESERVED_LEN 53 -+ -+#define EXFAT_FILE_NAME_LEN 15 -+ -+/* EXFAT BIOS parameter block (64 bytes) */ -+struct bpb64 { -+ __u8 jmp_boot[PBR64_JUMP_BOOT_LEN]; -+ __u8 oem_name[PBR64_OEM_NAME_LEN]; -+ __u8 res_zero[PBR64_RESERVED_LEN]; -+} __packed; -+ -+/* EXFAT EXTEND BIOS parameter block (56 bytes) */ -+struct bsx64 { -+ __le64 vol_offset; -+ __le64 vol_length; -+ __le32 fat_offset; -+ __le32 fat_length; -+ __le32 clu_offset; -+ __le32 clu_count; -+ __le32 root_cluster; -+ __le32 vol_serial; -+ __u8 fs_version[2]; -+ __le16 vol_flags; -+ __u8 sect_size_bits; -+ __u8 sect_per_clus_bits; -+ __u8 num_fats; -+ __u8 phy_drv_no; -+ __u8 perc_in_use; -+ __u8 reserved2[7]; -+} __packed; -+ -+/* EXFAT PBR[BPB+BSX] (120 bytes) */ -+struct pbr64 { -+ struct bpb64 bpb; -+ struct bsx64 bsx; -+} __packed; -+ -+/* Common PBR[Partition Boot Record] (512 bytes) */ -+struct pbr { -+ union { -+ __u8 raw[64]; -+ struct bpb64 f64; -+ } bpb; -+ union { -+ __u8 raw[56]; -+ struct bsx64 f64; -+ } bsx; -+ __u8 boot_code[390]; -+ __le16 signature; -+} __packed; -+ -+struct exfat_dentry { -+ __u8 type; -+ union { -+ struct { -+ __u8 num_ext; -+ __le16 checksum; -+ __le16 attr; -+ __le16 reserved1; -+ __le16 create_time; -+ __le16 create_date; -+ __le16 modify_time; -+ __le16 modify_date; -+ __le16 access_time; -+ __le16 access_date; -+ __u8 create_time_ms; -+ __u8 modify_time_ms; -+ __u8 create_tz; -+ __u8 modify_tz; -+ __u8 access_tz; -+ __u8 reserved2[7]; -+ } __packed file; /* file directory entry */ -+ struct { -+ __u8 flags; -+ __u8 reserved1; -+ __u8 name_len; -+ __le16 name_hash; -+ __le16 reserved2; -+ __le64 valid_size; -+ __le32 reserved3; -+ __le32 start_clu; -+ __le64 size; -+ } __packed stream; /* stream extension directory entry */ -+ struct { -+ __u8 flags; -+ __le16 unicode_0_14[EXFAT_FILE_NAME_LEN]; -+ } __packed name; /* file name directory entry */ -+ struct { -+ __u8 flags; -+ __u8 reserved[18]; -+ __le32 start_clu; -+ __le64 size; -+ } __packed bitmap; /* allocation bitmap directory entry */ -+ struct { -+ __u8 reserved1[3]; -+ __le32 checksum; -+ __u8 reserved2[12]; -+ __le32 start_clu; -+ __le64 size; -+ } __packed upcase; /* up-case table directory entry */ -+ } __packed dentry; -+} __packed; -+ -+#define EXFAT_TZ_VALID (1 << 7) -+ -+/* Jan 1 GMT 00:00:00 1980 */ -+#define EXFAT_MIN_TIMESTAMP_SECS 315532800LL -+/* Dec 31 GMT 23:59:59 2107 */ -+#define EXFAT_MAX_TIMESTAMP_SECS 4354819199LL -+ -+#endif /* !_EXFAT_RAW_H */ --- -2.25.1 - diff --git a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-inode-operations.patch b/kernel/tools/perf/files/patches/mageia/fs-exfat-add-inode-operations.patch deleted file mode 100644 index 0b47e8a9b6..0000000000 --- a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-inode-operations.patch +++ /dev/null @@ -1,2156 +0,0 @@ -From 5f2aa075070cf5b2e6aae011d5a3390408d7d913 Mon Sep 17 00:00:00 2001 -From: Namjae Jeon -Date: Mon, 2 Mar 2020 15:21:34 +0900 -Subject: [PATCH 03/14] exfat: add inode operations -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This adds the implementation of inode operations for exfat. - -Signed-off-by: Namjae Jeon -Signed-off-by: Sungjong Seo -Reviewed-by: Pali Rohár -Reviewed-by: Christoph Hellwig -Signed-off-by: Al Viro ---- - fs/exfat/inode.c | 671 +++++++++++++++++++++ - fs/exfat/namei.c | 1448 ++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 2119 insertions(+) - create mode 100644 fs/exfat/inode.c - create mode 100644 fs/exfat/namei.c - -diff --git a/fs/exfat/inode.c b/fs/exfat/inode.c -new file mode 100644 -index 000000000000..06887492f54b ---- /dev/null -+++ b/fs/exfat/inode.c -@@ -0,0 +1,671 @@ -+// SPDX-License-Identifier: GPL-2.0-or-later -+/* -+ * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "exfat_raw.h" -+#include "exfat_fs.h" -+ -+static int __exfat_write_inode(struct inode *inode, int sync) -+{ -+ int ret = -EIO; -+ unsigned long long on_disk_size; -+ struct exfat_dentry *ep, *ep2; -+ struct exfat_entry_set_cache *es = NULL; -+ struct super_block *sb = inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ bool is_dir = (ei->type == TYPE_DIR) ? true : false; -+ -+ if (inode->i_ino == EXFAT_ROOT_INO) -+ return 0; -+ -+ /* -+ * If the indode is already unlinked, there is no need for updating it. -+ */ -+ if (ei->dir.dir == DIR_DELETED) -+ return 0; -+ -+ if (is_dir && ei->dir.dir == sbi->root_dir && ei->entry == -1) -+ return 0; -+ -+ exfat_set_vol_flags(sb, VOL_DIRTY); -+ -+ /* get the directory entry of given file or directory */ -+ es = exfat_get_dentry_set(sb, &(ei->dir), ei->entry, ES_ALL_ENTRIES, -+ &ep); -+ if (!es) -+ return -EIO; -+ ep2 = ep + 1; -+ -+ ep->dentry.file.attr = cpu_to_le16(exfat_make_attr(inode)); -+ -+ /* set FILE_INFO structure using the acquired struct exfat_dentry */ -+ exfat_set_entry_time(sbi, &ei->i_crtime, -+ &ep->dentry.file.create_tz, -+ &ep->dentry.file.create_time, -+ &ep->dentry.file.create_date, -+ &ep->dentry.file.create_time_ms); -+ exfat_set_entry_time(sbi, &inode->i_mtime, -+ &ep->dentry.file.modify_tz, -+ &ep->dentry.file.modify_time, -+ &ep->dentry.file.modify_date, -+ &ep->dentry.file.modify_time_ms); -+ exfat_set_entry_time(sbi, &inode->i_atime, -+ &ep->dentry.file.access_tz, -+ &ep->dentry.file.access_time, -+ &ep->dentry.file.access_date, -+ NULL); -+ -+ /* File size should be zero if there is no cluster allocated */ -+ on_disk_size = i_size_read(inode); -+ -+ if (ei->start_clu == EXFAT_EOF_CLUSTER) -+ on_disk_size = 0; -+ -+ ep2->dentry.stream.valid_size = cpu_to_le64(on_disk_size); -+ ep2->dentry.stream.size = ep2->dentry.stream.valid_size; -+ -+ ret = exfat_update_dir_chksum_with_entry_set(sb, es, sync); -+ kfree(es); -+ return ret; -+} -+ -+int exfat_write_inode(struct inode *inode, struct writeback_control *wbc) -+{ -+ int ret; -+ -+ mutex_lock(&EXFAT_SB(inode->i_sb)->s_lock); -+ ret = __exfat_write_inode(inode, wbc->sync_mode == WB_SYNC_ALL); -+ mutex_unlock(&EXFAT_SB(inode->i_sb)->s_lock); -+ -+ return ret; -+} -+ -+void exfat_sync_inode(struct inode *inode) -+{ -+ lockdep_assert_held(&EXFAT_SB(inode->i_sb)->s_lock); -+ __exfat_write_inode(inode, 1); -+} -+ -+/* -+ * Input: inode, (logical) clu_offset, target allocation area -+ * Output: errcode, cluster number -+ * *clu = (~0), if it's unable to allocate a new cluster -+ */ -+static int exfat_map_cluster(struct inode *inode, unsigned int clu_offset, -+ unsigned int *clu, int create) -+{ -+ int ret, modified = false; -+ unsigned int last_clu; -+ struct exfat_chain new_clu; -+ struct exfat_dentry *ep; -+ struct exfat_entry_set_cache *es = NULL; -+ struct super_block *sb = inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ unsigned int local_clu_offset = clu_offset; -+ unsigned int num_to_be_allocated = 0, num_clusters = 0; -+ -+ ei->rwoffset = EXFAT_CLU_TO_B(clu_offset, sbi); -+ -+ if (EXFAT_I(inode)->i_size_ondisk > 0) -+ num_clusters = -+ EXFAT_B_TO_CLU_ROUND_UP(EXFAT_I(inode)->i_size_ondisk, -+ sbi); -+ -+ if (clu_offset >= num_clusters) -+ num_to_be_allocated = clu_offset - num_clusters + 1; -+ -+ if (!create && (num_to_be_allocated > 0)) { -+ *clu = EXFAT_EOF_CLUSTER; -+ return 0; -+ } -+ -+ *clu = last_clu = ei->start_clu; -+ -+ if (ei->flags == ALLOC_NO_FAT_CHAIN) { -+ if (clu_offset > 0 && *clu != EXFAT_EOF_CLUSTER) { -+ last_clu += clu_offset - 1; -+ -+ if (clu_offset == num_clusters) -+ *clu = EXFAT_EOF_CLUSTER; -+ else -+ *clu += clu_offset; -+ } -+ } else if (ei->type == TYPE_FILE) { -+ unsigned int fclus = 0; -+ int err = exfat_get_cluster(inode, clu_offset, -+ &fclus, clu, &last_clu, 1); -+ if (err) -+ return -EIO; -+ -+ clu_offset -= fclus; -+ } else { -+ /* hint information */ -+ if (clu_offset > 0 && ei->hint_bmap.off != EXFAT_EOF_CLUSTER && -+ ei->hint_bmap.off > 0 && clu_offset >= ei->hint_bmap.off) { -+ clu_offset -= ei->hint_bmap.off; -+ /* hint_bmap.clu should be valid */ -+ WARN_ON(ei->hint_bmap.clu < 2); -+ *clu = ei->hint_bmap.clu; -+ } -+ -+ while (clu_offset > 0 && *clu != EXFAT_EOF_CLUSTER) { -+ last_clu = *clu; -+ if (exfat_get_next_cluster(sb, clu)) -+ return -EIO; -+ clu_offset--; -+ } -+ } -+ -+ if (*clu == EXFAT_EOF_CLUSTER) { -+ exfat_set_vol_flags(sb, VOL_DIRTY); -+ -+ new_clu.dir = (last_clu == EXFAT_EOF_CLUSTER) ? -+ EXFAT_EOF_CLUSTER : last_clu + 1; -+ new_clu.size = 0; -+ new_clu.flags = ei->flags; -+ -+ /* allocate a cluster */ -+ if (num_to_be_allocated < 1) { -+ /* Broken FAT (i_sze > allocated FAT) */ -+ exfat_fs_error(sb, "broken FAT chain."); -+ return -EIO; -+ } -+ -+ ret = exfat_alloc_cluster(inode, num_to_be_allocated, &new_clu); -+ if (ret) -+ return ret; -+ -+ if (new_clu.dir == EXFAT_EOF_CLUSTER || -+ new_clu.dir == EXFAT_FREE_CLUSTER) { -+ exfat_fs_error(sb, -+ "bogus cluster new allocated (last_clu : %u, new_clu : %u)", -+ last_clu, new_clu.dir); -+ return -EIO; -+ } -+ -+ /* append to the FAT chain */ -+ if (last_clu == EXFAT_EOF_CLUSTER) { -+ if (new_clu.flags == ALLOC_FAT_CHAIN) -+ ei->flags = ALLOC_FAT_CHAIN; -+ ei->start_clu = new_clu.dir; -+ modified = true; -+ } else { -+ if (new_clu.flags != ei->flags) { -+ /* no-fat-chain bit is disabled, -+ * so fat-chain should be synced with -+ * alloc-bitmap -+ */ -+ exfat_chain_cont_cluster(sb, ei->start_clu, -+ num_clusters); -+ ei->flags = ALLOC_FAT_CHAIN; -+ modified = true; -+ } -+ if (new_clu.flags == ALLOC_FAT_CHAIN) -+ if (exfat_ent_set(sb, last_clu, new_clu.dir)) -+ return -EIO; -+ } -+ -+ num_clusters += num_to_be_allocated; -+ *clu = new_clu.dir; -+ -+ if (ei->dir.dir != DIR_DELETED) { -+ es = exfat_get_dentry_set(sb, &(ei->dir), ei->entry, -+ ES_ALL_ENTRIES, &ep); -+ if (!es) -+ return -EIO; -+ /* get stream entry */ -+ ep++; -+ -+ /* update directory entry */ -+ if (modified) { -+ if (ep->dentry.stream.flags != ei->flags) -+ ep->dentry.stream.flags = ei->flags; -+ -+ if (le32_to_cpu(ep->dentry.stream.start_clu) != -+ ei->start_clu) -+ ep->dentry.stream.start_clu = -+ cpu_to_le32(ei->start_clu); -+ -+ ep->dentry.stream.valid_size = -+ cpu_to_le64(i_size_read(inode)); -+ ep->dentry.stream.size = -+ ep->dentry.stream.valid_size; -+ } -+ -+ if (exfat_update_dir_chksum_with_entry_set(sb, es, -+ inode_needs_sync(inode))) -+ return -EIO; -+ kfree(es); -+ -+ } /* end of if != DIR_DELETED */ -+ -+ inode->i_blocks += -+ num_to_be_allocated << sbi->sect_per_clus_bits; -+ -+ /* -+ * Move *clu pointer along FAT chains (hole care) because the -+ * caller of this function expect *clu to be the last cluster. -+ * This only works when num_to_be_allocated >= 2, -+ * *clu = (the first cluster of the allocated chain) => -+ * (the last cluster of ...) -+ */ -+ if (ei->flags == ALLOC_NO_FAT_CHAIN) { -+ *clu += num_to_be_allocated - 1; -+ } else { -+ while (num_to_be_allocated > 1) { -+ if (exfat_get_next_cluster(sb, clu)) -+ return -EIO; -+ num_to_be_allocated--; -+ } -+ } -+ -+ } -+ -+ /* hint information */ -+ ei->hint_bmap.off = local_clu_offset; -+ ei->hint_bmap.clu = *clu; -+ -+ return 0; -+} -+ -+static int exfat_map_new_buffer(struct exfat_inode_info *ei, -+ struct buffer_head *bh, loff_t pos) -+{ -+ if (buffer_delay(bh) && pos > ei->i_size_aligned) -+ return -EIO; -+ set_buffer_new(bh); -+ -+ /* -+ * Adjust i_size_aligned if i_size_ondisk is bigger than it. -+ */ -+ if (ei->i_size_ondisk > ei->i_size_aligned) -+ ei->i_size_aligned = ei->i_size_ondisk; -+ return 0; -+} -+ -+static int exfat_get_block(struct inode *inode, sector_t iblock, -+ struct buffer_head *bh_result, int create) -+{ -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ struct super_block *sb = inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ unsigned long max_blocks = bh_result->b_size >> inode->i_blkbits; -+ int err = 0; -+ unsigned long mapped_blocks = 0; -+ unsigned int cluster, sec_offset; -+ sector_t last_block; -+ sector_t phys = 0; -+ loff_t pos; -+ -+ mutex_lock(&sbi->s_lock); -+ last_block = EXFAT_B_TO_BLK_ROUND_UP(i_size_read(inode), sb); -+ if (iblock >= last_block && !create) -+ goto done; -+ -+ /* Is this block already allocated? */ -+ err = exfat_map_cluster(inode, iblock >> sbi->sect_per_clus_bits, -+ &cluster, create); -+ if (err) { -+ if (err != -ENOSPC) -+ exfat_fs_error_ratelimit(sb, -+ "failed to bmap (inode : %p iblock : %llu, err : %d)", -+ inode, (unsigned long long)iblock, err); -+ goto unlock_ret; -+ } -+ -+ if (cluster == EXFAT_EOF_CLUSTER) -+ goto done; -+ -+ /* sector offset in cluster */ -+ sec_offset = iblock & (sbi->sect_per_clus - 1); -+ -+ phys = exfat_cluster_to_sector(sbi, cluster) + sec_offset; -+ mapped_blocks = sbi->sect_per_clus - sec_offset; -+ max_blocks = min(mapped_blocks, max_blocks); -+ -+ /* Treat newly added block / cluster */ -+ if (iblock < last_block) -+ create = 0; -+ -+ if (create || buffer_delay(bh_result)) { -+ pos = EXFAT_BLK_TO_B((iblock + 1), sb); -+ if (ei->i_size_ondisk < pos) -+ ei->i_size_ondisk = pos; -+ } -+ -+ if (create) { -+ err = exfat_map_new_buffer(ei, bh_result, pos); -+ if (err) { -+ exfat_fs_error(sb, -+ "requested for bmap out of range(pos : (%llu) > i_size_aligned(%llu)\n", -+ pos, ei->i_size_aligned); -+ goto unlock_ret; -+ } -+ } -+ -+ if (buffer_delay(bh_result)) -+ clear_buffer_delay(bh_result); -+ map_bh(bh_result, sb, phys); -+done: -+ bh_result->b_size = EXFAT_BLK_TO_B(max_blocks, sb); -+unlock_ret: -+ mutex_unlock(&sbi->s_lock); -+ return err; -+} -+ -+static int exfat_readpage(struct file *file, struct page *page) -+{ -+ return mpage_readpage(page, exfat_get_block); -+} -+ -+static int exfat_readpages(struct file *file, struct address_space *mapping, -+ struct list_head *pages, unsigned int nr_pages) -+{ -+ return mpage_readpages(mapping, pages, nr_pages, exfat_get_block); -+} -+ -+static int exfat_writepage(struct page *page, struct writeback_control *wbc) -+{ -+ return block_write_full_page(page, exfat_get_block, wbc); -+} -+ -+static int exfat_writepages(struct address_space *mapping, -+ struct writeback_control *wbc) -+{ -+ return mpage_writepages(mapping, wbc, exfat_get_block); -+} -+ -+static void exfat_write_failed(struct address_space *mapping, loff_t to) -+{ -+ struct inode *inode = mapping->host; -+ -+ if (to > i_size_read(inode)) { -+ truncate_pagecache(inode, i_size_read(inode)); -+ exfat_truncate(inode, EXFAT_I(inode)->i_size_aligned); -+ } -+} -+ -+static int exfat_write_begin(struct file *file, struct address_space *mapping, -+ loff_t pos, unsigned int len, unsigned int flags, -+ struct page **pagep, void **fsdata) -+{ -+ int ret; -+ -+ *pagep = NULL; -+ ret = cont_write_begin(file, mapping, pos, len, flags, pagep, fsdata, -+ exfat_get_block, -+ &EXFAT_I(mapping->host)->i_size_ondisk); -+ -+ if (ret < 0) -+ exfat_write_failed(mapping, pos+len); -+ -+ return ret; -+} -+ -+static int exfat_write_end(struct file *file, struct address_space *mapping, -+ loff_t pos, unsigned int len, unsigned int copied, -+ struct page *pagep, void *fsdata) -+{ -+ struct inode *inode = mapping->host; -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ int err; -+ -+ err = generic_write_end(file, mapping, pos, len, copied, pagep, fsdata); -+ -+ if (EXFAT_I(inode)->i_size_aligned < i_size_read(inode)) { -+ exfat_fs_error(inode->i_sb, -+ "invalid size(size(%llu) > aligned(%llu)\n", -+ i_size_read(inode), EXFAT_I(inode)->i_size_aligned); -+ return -EIO; -+ } -+ -+ if (err < len) -+ exfat_write_failed(mapping, pos+len); -+ -+ if (!(err < 0) && !(ei->attr & ATTR_ARCHIVE)) { -+ inode->i_mtime = inode->i_ctime = current_time(inode); -+ ei->attr |= ATTR_ARCHIVE; -+ mark_inode_dirty(inode); -+ } -+ -+ return err; -+} -+ -+static ssize_t exfat_direct_IO(struct kiocb *iocb, struct iov_iter *iter) -+{ -+ struct address_space *mapping = iocb->ki_filp->f_mapping; -+ struct inode *inode = mapping->host; -+ loff_t size = iocb->ki_pos + iov_iter_count(iter); -+ int rw = iov_iter_rw(iter); -+ ssize_t ret; -+ -+ if (rw == WRITE) { -+ /* -+ * FIXME: blockdev_direct_IO() doesn't use ->write_begin(), -+ * so we need to update the ->i_size_aligned to block boundary. -+ * -+ * But we must fill the remaining area or hole by nul for -+ * updating ->i_size_aligned -+ * -+ * Return 0, and fallback to normal buffered write. -+ */ -+ if (EXFAT_I(inode)->i_size_aligned < size) -+ return 0; -+ } -+ -+ /* -+ * Need to use the DIO_LOCKING for avoiding the race -+ * condition of exfat_get_block() and ->truncate(). -+ */ -+ ret = blockdev_direct_IO(iocb, inode, iter, exfat_get_block); -+ if (ret < 0 && (rw & WRITE)) -+ exfat_write_failed(mapping, size); -+ return ret; -+} -+ -+static sector_t exfat_aop_bmap(struct address_space *mapping, sector_t block) -+{ -+ sector_t blocknr; -+ -+ /* exfat_get_cluster() assumes the requested blocknr isn't truncated. */ -+ down_read(&EXFAT_I(mapping->host)->truncate_lock); -+ blocknr = generic_block_bmap(mapping, block, exfat_get_block); -+ up_read(&EXFAT_I(mapping->host)->truncate_lock); -+ return blocknr; -+} -+ -+/* -+ * exfat_block_truncate_page() zeroes out a mapping from file offset `from' -+ * up to the end of the block which corresponds to `from'. -+ * This is required during truncate to physically zeroout the tail end -+ * of that block so it doesn't yield old data if the file is later grown. -+ * Also, avoid causing failure from fsx for cases of "data past EOF" -+ */ -+int exfat_block_truncate_page(struct inode *inode, loff_t from) -+{ -+ return block_truncate_page(inode->i_mapping, from, exfat_get_block); -+} -+ -+static const struct address_space_operations exfat_aops = { -+ .readpage = exfat_readpage, -+ .readpages = exfat_readpages, -+ .writepage = exfat_writepage, -+ .writepages = exfat_writepages, -+ .write_begin = exfat_write_begin, -+ .write_end = exfat_write_end, -+ .direct_IO = exfat_direct_IO, -+ .bmap = exfat_aop_bmap -+}; -+ -+static inline unsigned long exfat_hash(loff_t i_pos) -+{ -+ return hash_32(i_pos, EXFAT_HASH_BITS); -+} -+ -+void exfat_hash_inode(struct inode *inode, loff_t i_pos) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(inode->i_sb); -+ struct hlist_head *head = sbi->inode_hashtable + exfat_hash(i_pos); -+ -+ spin_lock(&sbi->inode_hash_lock); -+ EXFAT_I(inode)->i_pos = i_pos; -+ hlist_add_head(&EXFAT_I(inode)->i_hash_fat, head); -+ spin_unlock(&sbi->inode_hash_lock); -+} -+ -+void exfat_unhash_inode(struct inode *inode) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(inode->i_sb); -+ -+ spin_lock(&sbi->inode_hash_lock); -+ hlist_del_init(&EXFAT_I(inode)->i_hash_fat); -+ EXFAT_I(inode)->i_pos = 0; -+ spin_unlock(&sbi->inode_hash_lock); -+} -+ -+struct inode *exfat_iget(struct super_block *sb, loff_t i_pos) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct exfat_inode_info *info; -+ struct hlist_head *head = sbi->inode_hashtable + exfat_hash(i_pos); -+ struct inode *inode = NULL; -+ -+ spin_lock(&sbi->inode_hash_lock); -+ hlist_for_each_entry(info, head, i_hash_fat) { -+ WARN_ON(info->vfs_inode.i_sb != sb); -+ -+ if (i_pos != info->i_pos) -+ continue; -+ inode = igrab(&info->vfs_inode); -+ if (inode) -+ break; -+ } -+ spin_unlock(&sbi->inode_hash_lock); -+ return inode; -+} -+ -+/* doesn't deal with root inode */ -+static int exfat_fill_inode(struct inode *inode, struct exfat_dir_entry *info) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(inode->i_sb); -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ loff_t size = info->size; -+ -+ memcpy(&ei->dir, &info->dir, sizeof(struct exfat_chain)); -+ ei->entry = info->entry; -+ ei->attr = info->attr; -+ ei->start_clu = info->start_clu; -+ ei->flags = info->flags; -+ ei->type = info->type; -+ -+ ei->version = 0; -+ ei->hint_stat.eidx = 0; -+ ei->hint_stat.clu = info->start_clu; -+ ei->hint_femp.eidx = EXFAT_HINT_NONE; -+ ei->rwoffset = 0; -+ ei->hint_bmap.off = EXFAT_EOF_CLUSTER; -+ ei->i_pos = 0; -+ -+ inode->i_uid = sbi->options.fs_uid; -+ inode->i_gid = sbi->options.fs_gid; -+ inode_inc_iversion(inode); -+ inode->i_generation = prandom_u32(); -+ -+ if (info->attr & ATTR_SUBDIR) { /* directory */ -+ inode->i_generation &= ~1; -+ inode->i_mode = exfat_make_mode(sbi, info->attr, 0777); -+ inode->i_op = &exfat_dir_inode_operations; -+ inode->i_fop = &exfat_dir_operations; -+ set_nlink(inode, info->num_subdirs); -+ } else { /* regular file */ -+ inode->i_generation |= 1; -+ inode->i_mode = exfat_make_mode(sbi, info->attr, 0777); -+ inode->i_op = &exfat_file_inode_operations; -+ inode->i_fop = &exfat_file_operations; -+ inode->i_mapping->a_ops = &exfat_aops; -+ inode->i_mapping->nrpages = 0; -+ } -+ -+ i_size_write(inode, size); -+ -+ /* ondisk and aligned size should be aligned with block size */ -+ if (size & (inode->i_sb->s_blocksize - 1)) { -+ size |= (inode->i_sb->s_blocksize - 1); -+ size++; -+ } -+ -+ ei->i_size_aligned = size; -+ ei->i_size_ondisk = size; -+ -+ exfat_save_attr(inode, info->attr); -+ -+ inode->i_blocks = ((i_size_read(inode) + (sbi->cluster_size - 1)) & -+ ~(sbi->cluster_size - 1)) >> inode->i_blkbits; -+ inode->i_mtime = info->mtime; -+ inode->i_ctime = info->mtime; -+ ei->i_crtime = info->crtime; -+ inode->i_atime = info->atime; -+ -+ exfat_cache_init_inode(inode); -+ -+ return 0; -+} -+ -+struct inode *exfat_build_inode(struct super_block *sb, -+ struct exfat_dir_entry *info, loff_t i_pos) -+{ -+ struct inode *inode; -+ int err; -+ -+ inode = exfat_iget(sb, i_pos); -+ if (inode) -+ goto out; -+ inode = new_inode(sb); -+ if (!inode) { -+ inode = ERR_PTR(-ENOMEM); -+ goto out; -+ } -+ inode->i_ino = iunique(sb, EXFAT_ROOT_INO); -+ inode_set_iversion(inode, 1); -+ err = exfat_fill_inode(inode, info); -+ if (err) { -+ iput(inode); -+ inode = ERR_PTR(err); -+ goto out; -+ } -+ exfat_hash_inode(inode, i_pos); -+ insert_inode_hash(inode); -+out: -+ return inode; -+} -+ -+void exfat_evict_inode(struct inode *inode) -+{ -+ truncate_inode_pages(&inode->i_data, 0); -+ -+ if (!inode->i_nlink) { -+ i_size_write(inode, 0); -+ mutex_lock(&EXFAT_SB(inode->i_sb)->s_lock); -+ __exfat_truncate(inode, 0); -+ mutex_unlock(&EXFAT_SB(inode->i_sb)->s_lock); -+ } -+ -+ invalidate_inode_buffers(inode); -+ clear_inode(inode); -+ exfat_cache_inval_inode(inode); -+ exfat_unhash_inode(inode); -+} -diff --git a/fs/exfat/namei.c b/fs/exfat/namei.c -new file mode 100644 -index 000000000000..a8681d91f569 ---- /dev/null -+++ b/fs/exfat/namei.c -@@ -0,0 +1,1448 @@ -+// SPDX-License-Identifier: GPL-2.0-or-later -+/* -+ * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include "exfat_raw.h" -+#include "exfat_fs.h" -+ -+static inline unsigned long exfat_d_version(struct dentry *dentry) -+{ -+ return (unsigned long) dentry->d_fsdata; -+} -+ -+static inline void exfat_d_version_set(struct dentry *dentry, -+ unsigned long version) -+{ -+ dentry->d_fsdata = (void *) version; -+} -+ -+/* -+ * If new entry was created in the parent, it could create the 8.3 alias (the -+ * shortname of logname). So, the parent may have the negative-dentry which -+ * matches the created 8.3 alias. -+ * -+ * If it happened, the negative dentry isn't actually negative anymore. So, -+ * drop it. -+ */ -+static int exfat_d_revalidate(struct dentry *dentry, unsigned int flags) -+{ -+ int ret; -+ -+ if (flags & LOOKUP_RCU) -+ return -ECHILD; -+ -+ /* -+ * This is not negative dentry. Always valid. -+ * -+ * Note, rename() to existing directory entry will have ->d_inode, and -+ * will use existing name which isn't specified name by user. -+ * -+ * We may be able to drop this positive dentry here. But dropping -+ * positive dentry isn't good idea. So it's unsupported like -+ * rename("filename", "FILENAME") for now. -+ */ -+ if (d_really_is_positive(dentry)) -+ return 1; -+ -+ /* -+ * Drop the negative dentry, in order to make sure to use the case -+ * sensitive name which is specified by user if this is for creation. -+ */ -+ if (flags & (LOOKUP_CREATE | LOOKUP_RENAME_TARGET)) -+ return 0; -+ -+ spin_lock(&dentry->d_lock); -+ ret = inode_eq_iversion(d_inode(dentry->d_parent), -+ exfat_d_version(dentry)); -+ spin_unlock(&dentry->d_lock); -+ return ret; -+} -+ -+/* returns the length of a struct qstr, ignoring trailing dots */ -+static unsigned int exfat_striptail_len(unsigned int len, const char *name) -+{ -+ while (len && name[len - 1] == '.') -+ len--; -+ return len; -+} -+ -+/* -+ * Compute the hash for the exfat name corresponding to the dentry. If the name -+ * is invalid, we leave the hash code unchanged so that the existing dentry can -+ * be used. The exfat fs routines will return ENOENT or EINVAL as appropriate. -+ */ -+static int exfat_d_hash(const struct dentry *dentry, struct qstr *qstr) -+{ -+ struct super_block *sb = dentry->d_sb; -+ struct nls_table *t = EXFAT_SB(sb)->nls_io; -+ const unsigned char *name = qstr->name; -+ unsigned int len = exfat_striptail_len(qstr->len, qstr->name); -+ unsigned long hash = init_name_hash(dentry); -+ int i, charlen; -+ wchar_t c; -+ -+ for (i = 0; i < len; i += charlen) { -+ charlen = t->char2uni(&name[i], len - i, &c); -+ if (charlen < 0) -+ return charlen; -+ hash = partial_name_hash(exfat_toupper(sb, c), hash); -+ } -+ -+ qstr->hash = end_name_hash(hash); -+ return 0; -+} -+ -+static int exfat_d_cmp(const struct dentry *dentry, unsigned int len, -+ const char *str, const struct qstr *name) -+{ -+ struct super_block *sb = dentry->d_sb; -+ struct nls_table *t = EXFAT_SB(sb)->nls_io; -+ unsigned int alen = exfat_striptail_len(name->len, name->name); -+ unsigned int blen = exfat_striptail_len(len, str); -+ wchar_t c1, c2; -+ int charlen, i; -+ -+ if (alen != blen) -+ return 1; -+ -+ for (i = 0; i < len; i += charlen) { -+ charlen = t->char2uni(&name->name[i], alen - i, &c1); -+ if (charlen < 0) -+ return 1; -+ if (charlen != t->char2uni(&str[i], blen - i, &c2)) -+ return 1; -+ -+ if (exfat_toupper(sb, c1) != exfat_toupper(sb, c2)) -+ return 1; -+ } -+ -+ return 0; -+} -+ -+const struct dentry_operations exfat_dentry_ops = { -+ .d_revalidate = exfat_d_revalidate, -+ .d_hash = exfat_d_hash, -+ .d_compare = exfat_d_cmp, -+}; -+ -+static int exfat_utf8_d_hash(const struct dentry *dentry, struct qstr *qstr) -+{ -+ struct super_block *sb = dentry->d_sb; -+ const unsigned char *name = qstr->name; -+ unsigned int len = exfat_striptail_len(qstr->len, qstr->name); -+ unsigned long hash = init_name_hash(dentry); -+ int i, charlen; -+ unicode_t u; -+ -+ for (i = 0; i < len; i += charlen) { -+ charlen = utf8_to_utf32(&name[i], len - i, &u); -+ if (charlen < 0) -+ return charlen; -+ -+ /* -+ * Convert to UTF-16: code points above U+FFFF are encoded as -+ * surrogate pairs. -+ * exfat_toupper() works only for code points up to the U+FFFF. -+ */ -+ if (u > 0xFFFF) { -+ hash = partial_name_hash(exfat_high_surrogate(u), hash); -+ hash = partial_name_hash(exfat_low_surrogate(u), hash); -+ } else { -+ hash = partial_name_hash(exfat_toupper(sb, u), hash); -+ } -+ } -+ -+ qstr->hash = end_name_hash(hash); -+ return 0; -+} -+ -+static int exfat_utf8_d_cmp(const struct dentry *dentry, unsigned int len, -+ const char *str, const struct qstr *name) -+{ -+ struct super_block *sb = dentry->d_sb; -+ unsigned int alen = exfat_striptail_len(name->len, name->name); -+ unsigned int blen = exfat_striptail_len(len, str); -+ unicode_t u_a, u_b; -+ int charlen, i; -+ -+ if (alen != blen) -+ return 1; -+ -+ for (i = 0; i < alen; i += charlen) { -+ charlen = utf8_to_utf32(&name->name[i], alen - i, &u_a); -+ if (charlen < 0) -+ return 1; -+ if (charlen != utf8_to_utf32(&str[i], blen - i, &u_b)) -+ return 1; -+ -+ if (u_a <= 0xFFFF && u_b <= 0xFFFF) { -+ if (exfat_toupper(sb, u_a) != exfat_toupper(sb, u_b)) -+ return 1; -+ } else if (u_a > 0xFFFF && u_b > 0xFFFF) { -+ if (exfat_low_surrogate(u_a) != -+ exfat_low_surrogate(u_b) || -+ exfat_high_surrogate(u_a) != -+ exfat_high_surrogate(u_b)) -+ return 1; -+ } else { -+ return 1; -+ } -+ } -+ -+ return 0; -+} -+ -+const struct dentry_operations exfat_utf8_dentry_ops = { -+ .d_revalidate = exfat_d_revalidate, -+ .d_hash = exfat_utf8_d_hash, -+ .d_compare = exfat_utf8_d_cmp, -+}; -+ -+/* used only in search empty_slot() */ -+#define CNT_UNUSED_NOHIT (-1) -+#define CNT_UNUSED_HIT (-2) -+/* search EMPTY CONTINUOUS "num_entries" entries */ -+static int exfat_search_empty_slot(struct super_block *sb, -+ struct exfat_hint_femp *hint_femp, struct exfat_chain *p_dir, -+ int num_entries) -+{ -+ int i, dentry, num_empty = 0; -+ int dentries_per_clu; -+ unsigned int type; -+ struct exfat_chain clu; -+ struct exfat_dentry *ep; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct buffer_head *bh; -+ -+ dentries_per_clu = sbi->dentries_per_clu; -+ -+ if (hint_femp->eidx != EXFAT_HINT_NONE) { -+ dentry = hint_femp->eidx; -+ if (num_entries <= hint_femp->count) { -+ hint_femp->eidx = EXFAT_HINT_NONE; -+ return dentry; -+ } -+ -+ exfat_chain_dup(&clu, &hint_femp->cur); -+ } else { -+ exfat_chain_dup(&clu, p_dir); -+ dentry = 0; -+ } -+ -+ while (clu.dir != EXFAT_EOF_CLUSTER) { -+ i = dentry & (dentries_per_clu - 1); -+ -+ for (; i < dentries_per_clu; i++, dentry++) { -+ ep = exfat_get_dentry(sb, &clu, i, &bh, NULL); -+ if (!ep) -+ return -EIO; -+ type = exfat_get_entry_type(ep); -+ brelse(bh); -+ -+ if (type == TYPE_UNUSED || type == TYPE_DELETED) { -+ num_empty++; -+ if (hint_femp->eidx == EXFAT_HINT_NONE) { -+ hint_femp->eidx = dentry; -+ hint_femp->count = CNT_UNUSED_NOHIT; -+ exfat_chain_set(&hint_femp->cur, -+ clu.dir, clu.size, clu.flags); -+ } -+ -+ if (type == TYPE_UNUSED && -+ hint_femp->count != CNT_UNUSED_HIT) -+ hint_femp->count = CNT_UNUSED_HIT; -+ } else { -+ if (hint_femp->eidx != EXFAT_HINT_NONE && -+ hint_femp->count == CNT_UNUSED_HIT) { -+ /* unused empty group means -+ * an empty group which includes -+ * unused dentry -+ */ -+ exfat_fs_error(sb, -+ "found bogus dentry(%d) beyond unused empty group(%d) (start_clu : %u, cur_clu : %u)", -+ dentry, hint_femp->eidx, -+ p_dir->dir, clu.dir); -+ return -EIO; -+ } -+ -+ num_empty = 0; -+ hint_femp->eidx = EXFAT_HINT_NONE; -+ } -+ -+ if (num_empty >= num_entries) { -+ /* found and invalidate hint_femp */ -+ hint_femp->eidx = EXFAT_HINT_NONE; -+ return (dentry - (num_entries - 1)); -+ } -+ } -+ -+ if (clu.flags == ALLOC_NO_FAT_CHAIN) { -+ if (--clu.size > 0) -+ clu.dir++; -+ else -+ clu.dir = EXFAT_EOF_CLUSTER; -+ } else { -+ if (exfat_get_next_cluster(sb, &clu.dir)) -+ return -EIO; -+ } -+ } -+ -+ return -ENOSPC; -+} -+ -+static int exfat_check_max_dentries(struct inode *inode) -+{ -+ if (EXFAT_B_TO_DEN(i_size_read(inode)) >= MAX_EXFAT_DENTRIES) { -+ /* -+ * exFAT spec allows a dir to grow upto 8388608(256MB) -+ * dentries -+ */ -+ return -ENOSPC; -+ } -+ return 0; -+} -+ -+/* find empty directory entry. -+ * if there isn't any empty slot, expand cluster chain. -+ */ -+static int exfat_find_empty_entry(struct inode *inode, -+ struct exfat_chain *p_dir, int num_entries) -+{ -+ int dentry; -+ unsigned int ret, last_clu; -+ sector_t sector; -+ loff_t size = 0; -+ struct exfat_chain clu; -+ struct exfat_dentry *ep = NULL; -+ struct super_block *sb = inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ struct exfat_hint_femp hint_femp; -+ -+ hint_femp.eidx = EXFAT_HINT_NONE; -+ -+ if (ei->hint_femp.eidx != EXFAT_HINT_NONE) { -+ memcpy(&hint_femp, &ei->hint_femp, -+ sizeof(struct exfat_hint_femp)); -+ ei->hint_femp.eidx = EXFAT_HINT_NONE; -+ } -+ -+ while ((dentry = exfat_search_empty_slot(sb, &hint_femp, p_dir, -+ num_entries)) < 0) { -+ if (dentry == -EIO) -+ break; -+ -+ if (exfat_check_max_dentries(inode)) -+ return -ENOSPC; -+ -+ /* we trust p_dir->size regardless of FAT type */ -+ if (exfat_find_last_cluster(sb, p_dir, &last_clu)) -+ return -EIO; -+ -+ /* -+ * Allocate new cluster to this directory -+ */ -+ exfat_chain_set(&clu, last_clu + 1, 0, p_dir->flags); -+ -+ /* allocate a cluster */ -+ ret = exfat_alloc_cluster(inode, 1, &clu); -+ if (ret) -+ return ret; -+ -+ if (exfat_zeroed_cluster(inode, clu.dir)) -+ return -EIO; -+ -+ /* append to the FAT chain */ -+ if (clu.flags != p_dir->flags) { -+ /* no-fat-chain bit is disabled, -+ * so fat-chain should be synced with alloc-bitmap -+ */ -+ exfat_chain_cont_cluster(sb, p_dir->dir, p_dir->size); -+ p_dir->flags = ALLOC_FAT_CHAIN; -+ hint_femp.cur.flags = ALLOC_FAT_CHAIN; -+ } -+ -+ if (clu.flags == ALLOC_FAT_CHAIN) -+ if (exfat_ent_set(sb, last_clu, clu.dir)) -+ return -EIO; -+ -+ if (hint_femp.eidx == EXFAT_HINT_NONE) { -+ /* the special case that new dentry -+ * should be allocated from the start of new cluster -+ */ -+ hint_femp.eidx = EXFAT_B_TO_DEN_IDX(p_dir->size, sbi); -+ hint_femp.count = sbi->dentries_per_clu; -+ -+ exfat_chain_set(&hint_femp.cur, clu.dir, 0, clu.flags); -+ } -+ hint_femp.cur.size++; -+ p_dir->size++; -+ size = EXFAT_CLU_TO_B(p_dir->size, sbi); -+ -+ /* update the directory entry */ -+ if (p_dir->dir != sbi->root_dir) { -+ struct buffer_head *bh; -+ -+ ep = exfat_get_dentry(sb, -+ &(ei->dir), ei->entry + 1, &bh, §or); -+ if (!ep) -+ return -EIO; -+ -+ ep->dentry.stream.valid_size = cpu_to_le64(size); -+ ep->dentry.stream.size = ep->dentry.stream.valid_size; -+ ep->dentry.stream.flags = p_dir->flags; -+ exfat_update_bh(sb, bh, IS_DIRSYNC(inode)); -+ brelse(bh); -+ if (exfat_update_dir_chksum(inode, &(ei->dir), -+ ei->entry)) -+ return -EIO; -+ } -+ -+ /* directory inode should be updated in here */ -+ i_size_write(inode, size); -+ EXFAT_I(inode)->i_size_ondisk += sbi->cluster_size; -+ EXFAT_I(inode)->i_size_aligned += sbi->cluster_size; -+ EXFAT_I(inode)->flags = p_dir->flags; -+ inode->i_blocks += 1 << sbi->sect_per_clus_bits; -+ } -+ -+ return dentry; -+} -+ -+/* -+ * Name Resolution Functions : -+ * Zero if it was successful; otherwise nonzero. -+ */ -+static int __exfat_resolve_path(struct inode *inode, const unsigned char *path, -+ struct exfat_chain *p_dir, struct exfat_uni_name *p_uniname, -+ int lookup) -+{ -+ int namelen; -+ int lossy = NLS_NAME_NO_LOSSY; -+ struct super_block *sb = inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ -+ /* strip all trailing periods */ -+ namelen = exfat_striptail_len(strlen(path), path); -+ if (!namelen) -+ return -ENOENT; -+ -+ if (strlen(path) > (MAX_NAME_LENGTH * MAX_CHARSET_SIZE)) -+ return -ENAMETOOLONG; -+ -+ /* -+ * strip all leading spaces : -+ * "MS windows 7" supports leading spaces. -+ * So we should skip this preprocessing for compatibility. -+ */ -+ -+ /* file name conversion : -+ * If lookup case, we allow bad-name for compatibility. -+ */ -+ namelen = exfat_nls_to_utf16(sb, path, namelen, p_uniname, -+ &lossy); -+ if (namelen < 0) -+ return namelen; /* return error value */ -+ -+ if ((lossy && !lookup) || !namelen) -+ return -EINVAL; -+ -+ exfat_chain_set(p_dir, ei->start_clu, -+ EXFAT_B_TO_CLU(i_size_read(inode), sbi), ei->flags); -+ -+ return 0; -+} -+ -+static inline int exfat_resolve_path(struct inode *inode, -+ const unsigned char *path, struct exfat_chain *dir, -+ struct exfat_uni_name *uni) -+{ -+ return __exfat_resolve_path(inode, path, dir, uni, 0); -+} -+ -+static inline int exfat_resolve_path_for_lookup(struct inode *inode, -+ const unsigned char *path, struct exfat_chain *dir, -+ struct exfat_uni_name *uni) -+{ -+ return __exfat_resolve_path(inode, path, dir, uni, 1); -+} -+ -+static inline loff_t exfat_make_i_pos(struct exfat_dir_entry *info) -+{ -+ return ((loff_t) info->dir.dir << 32) | (info->entry & 0xffffffff); -+} -+ -+static int exfat_add_entry(struct inode *inode, const char *path, -+ struct exfat_chain *p_dir, unsigned int type, -+ struct exfat_dir_entry *info) -+{ -+ int ret, dentry, num_entries; -+ struct super_block *sb = inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct exfat_uni_name uniname; -+ struct exfat_chain clu; -+ int clu_size = 0; -+ unsigned int start_clu = EXFAT_FREE_CLUSTER; -+ -+ ret = exfat_resolve_path(inode, path, p_dir, &uniname); -+ if (ret) -+ goto out; -+ -+ num_entries = exfat_calc_num_entries(&uniname); -+ if (num_entries < 0) { -+ ret = num_entries; -+ goto out; -+ } -+ -+ /* exfat_find_empty_entry must be called before alloc_cluster() */ -+ dentry = exfat_find_empty_entry(inode, p_dir, num_entries); -+ if (dentry < 0) { -+ ret = dentry; /* -EIO or -ENOSPC */ -+ goto out; -+ } -+ -+ if (type == TYPE_DIR) { -+ ret = exfat_alloc_new_dir(inode, &clu); -+ if (ret) -+ goto out; -+ start_clu = clu.dir; -+ clu_size = sbi->cluster_size; -+ } -+ -+ /* update the directory entry */ -+ /* fill the dos name directory entry information of the created file. -+ * the first cluster is not determined yet. (0) -+ */ -+ ret = exfat_init_dir_entry(inode, p_dir, dentry, type, -+ start_clu, clu_size); -+ if (ret) -+ goto out; -+ -+ ret = exfat_init_ext_entry(inode, p_dir, dentry, num_entries, &uniname); -+ if (ret) -+ goto out; -+ -+ memcpy(&info->dir, p_dir, sizeof(struct exfat_chain)); -+ info->entry = dentry; -+ info->flags = ALLOC_NO_FAT_CHAIN; -+ info->type = type; -+ -+ if (type == TYPE_FILE) { -+ info->attr = ATTR_ARCHIVE; -+ info->start_clu = EXFAT_EOF_CLUSTER; -+ info->size = 0; -+ info->num_subdirs = 0; -+ } else { -+ int count; -+ struct exfat_chain cdir; -+ -+ info->attr = ATTR_SUBDIR; -+ info->start_clu = start_clu; -+ info->size = clu_size; -+ -+ exfat_chain_set(&cdir, info->start_clu, -+ EXFAT_B_TO_CLU(info->size, sbi), info->flags); -+ count = exfat_count_dir_entries(sb, &cdir); -+ if (count < 0) -+ return -EIO; -+ info->num_subdirs = count + EXFAT_MIN_SUBDIR; -+ } -+ memset(&info->crtime, 0, sizeof(info->crtime)); -+ memset(&info->mtime, 0, sizeof(info->mtime)); -+ memset(&info->atime, 0, sizeof(info->atime)); -+out: -+ return ret; -+} -+ -+static int exfat_create(struct inode *dir, struct dentry *dentry, umode_t mode, -+ bool excl) -+{ -+ struct super_block *sb = dir->i_sb; -+ struct inode *inode; -+ struct exfat_chain cdir; -+ struct exfat_dir_entry info; -+ loff_t i_pos; -+ int err; -+ -+ mutex_lock(&EXFAT_SB(sb)->s_lock); -+ exfat_set_vol_flags(sb, VOL_DIRTY); -+ err = exfat_add_entry(dir, dentry->d_name.name, &cdir, TYPE_FILE, -+ &info); -+ exfat_set_vol_flags(sb, VOL_CLEAN); -+ if (err) -+ goto unlock; -+ -+ inode_inc_iversion(dir); -+ dir->i_ctime = dir->i_mtime = current_time(dir); -+ if (IS_DIRSYNC(dir)) -+ exfat_sync_inode(dir); -+ else -+ mark_inode_dirty(dir); -+ -+ i_pos = exfat_make_i_pos(&info); -+ inode = exfat_build_inode(sb, &info, i_pos); -+ if (IS_ERR(inode)) -+ goto unlock; -+ -+ inode_inc_iversion(inode); -+ inode->i_mtime = inode->i_atime = inode->i_ctime = -+ EXFAT_I(inode)->i_crtime = current_time(inode); -+ /* timestamp is already written, so mark_inode_dirty() is unneeded. */ -+ -+ d_instantiate(dentry, inode); -+unlock: -+ mutex_unlock(&EXFAT_SB(sb)->s_lock); -+ return err; -+} -+ -+/* lookup a file */ -+static int exfat_find(struct inode *dir, struct qstr *qname, -+ struct exfat_dir_entry *info) -+{ -+ int ret, dentry, num_entries, count; -+ struct exfat_chain cdir; -+ struct exfat_uni_name uni_name; -+ struct exfat_dentry *ep, *ep2; -+ struct exfat_entry_set_cache *es = NULL; -+ struct super_block *sb = dir->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct exfat_inode_info *ei = EXFAT_I(dir); -+ -+ if (qname->len == 0) -+ return -ENOENT; -+ -+ /* check the validity of directory name in the given pathname */ -+ ret = exfat_resolve_path_for_lookup(dir, qname->name, &cdir, &uni_name); -+ if (ret) -+ return ret; -+ -+ num_entries = exfat_calc_num_entries(&uni_name); -+ if (num_entries < 0) -+ return num_entries; -+ -+ /* check the validation of hint_stat and initialize it if required */ -+ if (ei->version != (inode_peek_iversion_raw(dir) & 0xffffffff)) { -+ ei->hint_stat.clu = cdir.dir; -+ ei->hint_stat.eidx = 0; -+ ei->version = (inode_peek_iversion_raw(dir) & 0xffffffff); -+ ei->hint_femp.eidx = EXFAT_HINT_NONE; -+ } -+ -+ /* search the file name for directories */ -+ dentry = exfat_find_dir_entry(sb, ei, &cdir, &uni_name, -+ num_entries, TYPE_ALL); -+ -+ if ((dentry < 0) && (dentry != -EEXIST)) -+ return dentry; /* -error value */ -+ -+ memcpy(&info->dir, &cdir.dir, sizeof(struct exfat_chain)); -+ info->entry = dentry; -+ info->num_subdirs = 0; -+ -+ /* root directory itself */ -+ if (unlikely(dentry == -EEXIST)) { -+ int num_clu = 0; -+ -+ info->type = TYPE_DIR; -+ info->attr = ATTR_SUBDIR; -+ info->flags = ALLOC_FAT_CHAIN; -+ info->start_clu = sbi->root_dir; -+ memset(&info->crtime, 0, sizeof(info->crtime)); -+ memset(&info->mtime, 0, sizeof(info->mtime)); -+ memset(&info->atime, 0, sizeof(info->atime)); -+ -+ exfat_chain_set(&cdir, sbi->root_dir, 0, ALLOC_FAT_CHAIN); -+ if (exfat_count_num_clusters(sb, &cdir, &num_clu)) -+ return -EIO; -+ info->size = num_clu << sbi->cluster_size_bits; -+ -+ count = exfat_count_dir_entries(sb, &cdir); -+ if (count < 0) -+ return -EIO; -+ -+ info->num_subdirs = count; -+ } else { -+ es = exfat_get_dentry_set(sb, &cdir, dentry, ES_2_ENTRIES, &ep); -+ if (!es) -+ return -EIO; -+ ep2 = ep + 1; -+ -+ info->type = exfat_get_entry_type(ep); -+ info->attr = le16_to_cpu(ep->dentry.file.attr); -+ info->size = le64_to_cpu(ep2->dentry.stream.valid_size); -+ if ((info->type == TYPE_FILE) && (info->size == 0)) { -+ info->flags = ALLOC_NO_FAT_CHAIN; -+ info->start_clu = EXFAT_EOF_CLUSTER; -+ } else { -+ info->flags = ep2->dentry.stream.flags; -+ info->start_clu = -+ le32_to_cpu(ep2->dentry.stream.start_clu); -+ } -+ -+ if (ei->start_clu == EXFAT_FREE_CLUSTER) { -+ exfat_fs_error(sb, -+ "non-zero size file starts with zero cluster (size : %llu, p_dir : %u, entry : 0x%08x)", -+ i_size_read(dir), ei->dir.dir, ei->entry); -+ return -EIO; -+ } -+ -+ exfat_get_entry_time(sbi, &info->crtime, -+ ep->dentry.file.create_tz, -+ ep->dentry.file.create_time, -+ ep->dentry.file.create_date, -+ ep->dentry.file.create_time_ms); -+ exfat_get_entry_time(sbi, &info->mtime, -+ ep->dentry.file.modify_tz, -+ ep->dentry.file.modify_time, -+ ep->dentry.file.modify_date, -+ ep->dentry.file.modify_time_ms); -+ exfat_get_entry_time(sbi, &info->atime, -+ ep->dentry.file.access_tz, -+ ep->dentry.file.access_time, -+ ep->dentry.file.access_date, -+ 0); -+ kfree(es); -+ -+ if (info->type == TYPE_DIR) { -+ exfat_chain_set(&cdir, info->start_clu, -+ EXFAT_B_TO_CLU(info->size, sbi), info->flags); -+ count = exfat_count_dir_entries(sb, &cdir); -+ if (count < 0) -+ return -EIO; -+ -+ info->num_subdirs = count + EXFAT_MIN_SUBDIR; -+ } -+ } -+ return 0; -+} -+ -+static int exfat_d_anon_disconn(struct dentry *dentry) -+{ -+ return IS_ROOT(dentry) && (dentry->d_flags & DCACHE_DISCONNECTED); -+} -+ -+static struct dentry *exfat_lookup(struct inode *dir, struct dentry *dentry, -+ unsigned int flags) -+{ -+ struct super_block *sb = dir->i_sb; -+ struct inode *inode; -+ struct dentry *alias; -+ struct exfat_dir_entry info; -+ int err; -+ loff_t i_pos; -+ mode_t i_mode; -+ -+ mutex_lock(&EXFAT_SB(sb)->s_lock); -+ err = exfat_find(dir, &dentry->d_name, &info); -+ if (err) { -+ if (err == -ENOENT) { -+ inode = NULL; -+ goto out; -+ } -+ goto unlock; -+ } -+ -+ i_pos = exfat_make_i_pos(&info); -+ inode = exfat_build_inode(sb, &info, i_pos); -+ if (IS_ERR(inode)) { -+ err = PTR_ERR(inode); -+ goto unlock; -+ } -+ -+ i_mode = inode->i_mode; -+ alias = d_find_alias(inode); -+ -+ /* -+ * Checking "alias->d_parent == dentry->d_parent" to make sure -+ * FS is not corrupted (especially double linked dir). -+ */ -+ if (alias && alias->d_parent == dentry->d_parent && -+ !exfat_d_anon_disconn(alias)) { -+ -+ /* -+ * Unhashed alias is able to exist because of revalidate() -+ * called by lookup_fast. You can easily make this status -+ * by calling create and lookup concurrently -+ * In such case, we reuse an alias instead of new dentry -+ */ -+ if (d_unhashed(alias)) { -+ WARN_ON(alias->d_name.hash_len != -+ dentry->d_name.hash_len); -+ exfat_msg(sb, KERN_INFO, -+ "rehashed a dentry(%p) in read lookup", alias); -+ d_drop(dentry); -+ d_rehash(alias); -+ } else if (!S_ISDIR(i_mode)) { -+ /* -+ * This inode has non anonymous-DCACHE_DISCONNECTED -+ * dentry. This means, the user did ->lookup() by an -+ * another name (longname vs 8.3 alias of it) in past. -+ * -+ * Switch to new one for reason of locality if possible. -+ */ -+ d_move(alias, dentry); -+ } -+ iput(inode); -+ mutex_unlock(&EXFAT_SB(sb)->s_lock); -+ return alias; -+ } -+ dput(alias); -+out: -+ mutex_unlock(&EXFAT_SB(sb)->s_lock); -+ if (!inode) -+ exfat_d_version_set(dentry, inode_query_iversion(dir)); -+ -+ return d_splice_alias(inode, dentry); -+unlock: -+ mutex_unlock(&EXFAT_SB(sb)->s_lock); -+ return ERR_PTR(err); -+} -+ -+/* remove an entry, BUT don't truncate */ -+static int exfat_unlink(struct inode *dir, struct dentry *dentry) -+{ -+ struct exfat_chain cdir; -+ struct exfat_dentry *ep; -+ struct super_block *sb = dir->i_sb; -+ struct inode *inode = dentry->d_inode; -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ struct buffer_head *bh; -+ sector_t sector; -+ int num_entries, entry, err = 0; -+ -+ mutex_lock(&EXFAT_SB(sb)->s_lock); -+ exfat_chain_dup(&cdir, &ei->dir); -+ entry = ei->entry; -+ if (ei->dir.dir == DIR_DELETED) { -+ exfat_msg(sb, KERN_ERR, "abnormal access to deleted dentry"); -+ err = -ENOENT; -+ goto unlock; -+ } -+ -+ ep = exfat_get_dentry(sb, &cdir, entry, &bh, §or); -+ if (!ep) { -+ err = -EIO; -+ goto unlock; -+ } -+ num_entries = exfat_count_ext_entries(sb, &cdir, entry, ep); -+ if (num_entries < 0) { -+ err = -EIO; -+ brelse(bh); -+ goto unlock; -+ } -+ num_entries++; -+ brelse(bh); -+ -+ exfat_set_vol_flags(sb, VOL_DIRTY); -+ /* update the directory entry */ -+ if (exfat_remove_entries(dir, &cdir, entry, 0, num_entries)) { -+ err = -EIO; -+ goto unlock; -+ } -+ -+ /* This doesn't modify ei */ -+ ei->dir.dir = DIR_DELETED; -+ exfat_set_vol_flags(sb, VOL_CLEAN); -+ -+ inode_inc_iversion(dir); -+ dir->i_mtime = dir->i_atime = current_time(dir); -+ if (IS_DIRSYNC(dir)) -+ exfat_sync_inode(dir); -+ else -+ mark_inode_dirty(dir); -+ -+ clear_nlink(inode); -+ inode->i_mtime = inode->i_atime = current_time(inode); -+ exfat_unhash_inode(inode); -+ exfat_d_version_set(dentry, inode_query_iversion(dir)); -+unlock: -+ mutex_unlock(&EXFAT_SB(sb)->s_lock); -+ return err; -+} -+ -+static int exfat_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) -+{ -+ struct super_block *sb = dir->i_sb; -+ struct inode *inode; -+ struct exfat_dir_entry info; -+ struct exfat_chain cdir; -+ loff_t i_pos; -+ int err; -+ -+ mutex_lock(&EXFAT_SB(sb)->s_lock); -+ exfat_set_vol_flags(sb, VOL_DIRTY); -+ err = exfat_add_entry(dir, dentry->d_name.name, &cdir, TYPE_DIR, -+ &info); -+ exfat_set_vol_flags(sb, VOL_CLEAN); -+ if (err) -+ goto unlock; -+ -+ inode_inc_iversion(dir); -+ dir->i_ctime = dir->i_mtime = current_time(dir); -+ if (IS_DIRSYNC(dir)) -+ exfat_sync_inode(dir); -+ else -+ mark_inode_dirty(dir); -+ inc_nlink(dir); -+ -+ i_pos = exfat_make_i_pos(&info); -+ inode = exfat_build_inode(sb, &info, i_pos); -+ if (IS_ERR(inode)) { -+ err = PTR_ERR(inode); -+ goto unlock; -+ } -+ -+ inode_inc_iversion(inode); -+ inode->i_mtime = inode->i_atime = inode->i_ctime = -+ EXFAT_I(inode)->i_crtime = current_time(inode); -+ /* timestamp is already written, so mark_inode_dirty() is unneeded. */ -+ -+ d_instantiate(dentry, inode); -+ -+unlock: -+ mutex_unlock(&EXFAT_SB(sb)->s_lock); -+ return err; -+} -+ -+static int exfat_check_dir_empty(struct super_block *sb, -+ struct exfat_chain *p_dir) -+{ -+ int i, dentries_per_clu; -+ unsigned int type; -+ struct exfat_chain clu; -+ struct exfat_dentry *ep; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct buffer_head *bh; -+ -+ dentries_per_clu = sbi->dentries_per_clu; -+ -+ exfat_chain_dup(&clu, p_dir); -+ -+ while (clu.dir != EXFAT_EOF_CLUSTER) { -+ for (i = 0; i < dentries_per_clu; i++) { -+ ep = exfat_get_dentry(sb, &clu, i, &bh, NULL); -+ if (!ep) -+ return -EIO; -+ type = exfat_get_entry_type(ep); -+ brelse(bh); -+ if (type == TYPE_UNUSED) -+ return 0; -+ -+ if (type != TYPE_FILE && type != TYPE_DIR) -+ continue; -+ -+ return -ENOTEMPTY; -+ } -+ -+ if (clu.flags == ALLOC_NO_FAT_CHAIN) { -+ if (--clu.size > 0) -+ clu.dir++; -+ else -+ clu.dir = EXFAT_EOF_CLUSTER; -+ } else { -+ if (exfat_get_next_cluster(sb, &(clu.dir))) -+ return -EIO; -+ } -+ } -+ -+ return 0; -+} -+ -+static int exfat_rmdir(struct inode *dir, struct dentry *dentry) -+{ -+ struct inode *inode = dentry->d_inode; -+ struct exfat_dentry *ep; -+ struct exfat_chain cdir, clu_to_free; -+ struct super_block *sb = inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ struct buffer_head *bh; -+ sector_t sector; -+ int num_entries, entry, err; -+ -+ mutex_lock(&EXFAT_SB(inode->i_sb)->s_lock); -+ -+ exfat_chain_dup(&cdir, &ei->dir); -+ entry = ei->entry; -+ -+ if (ei->dir.dir == DIR_DELETED) { -+ exfat_msg(sb, KERN_ERR, "abnormal access to deleted dentry"); -+ err = -ENOENT; -+ goto unlock; -+ } -+ -+ exfat_set_vol_flags(sb, VOL_DIRTY); -+ exfat_chain_set(&clu_to_free, ei->start_clu, -+ EXFAT_B_TO_CLU_ROUND_UP(i_size_read(inode), sbi), ei->flags); -+ -+ err = exfat_check_dir_empty(sb, &clu_to_free); -+ if (err) { -+ if (err == -EIO) -+ exfat_msg(sb, KERN_ERR, -+ "failed to exfat_check_dir_empty : err(%d)", -+ err); -+ goto unlock; -+ } -+ -+ ep = exfat_get_dentry(sb, &cdir, entry, &bh, §or); -+ if (!ep) { -+ err = -EIO; -+ goto unlock; -+ } -+ -+ num_entries = exfat_count_ext_entries(sb, &cdir, entry, ep); -+ if (num_entries < 0) { -+ err = -EIO; -+ brelse(bh); -+ goto unlock; -+ } -+ num_entries++; -+ brelse(bh); -+ -+ err = exfat_remove_entries(dir, &cdir, entry, 0, num_entries); -+ if (err) { -+ exfat_msg(sb, KERN_ERR, -+ "failed to exfat_remove_entries : err(%d)", -+ err); -+ goto unlock; -+ } -+ ei->dir.dir = DIR_DELETED; -+ exfat_set_vol_flags(sb, VOL_CLEAN); -+ -+ inode_inc_iversion(dir); -+ dir->i_mtime = dir->i_atime = current_time(dir); -+ if (IS_DIRSYNC(dir)) -+ exfat_sync_inode(dir); -+ else -+ mark_inode_dirty(dir); -+ drop_nlink(dir); -+ -+ clear_nlink(inode); -+ inode->i_mtime = inode->i_atime = current_time(inode); -+ exfat_unhash_inode(inode); -+ exfat_d_version_set(dentry, inode_query_iversion(dir)); -+unlock: -+ mutex_unlock(&EXFAT_SB(inode->i_sb)->s_lock); -+ return err; -+} -+ -+static int exfat_rename_file(struct inode *inode, struct exfat_chain *p_dir, -+ int oldentry, struct exfat_uni_name *p_uniname, -+ struct exfat_inode_info *ei) -+{ -+ int ret, num_old_entries, num_new_entries; -+ sector_t sector_old, sector_new; -+ struct exfat_dentry *epold, *epnew; -+ struct super_block *sb = inode->i_sb; -+ struct buffer_head *new_bh, *old_bh; -+ int sync = IS_DIRSYNC(inode); -+ -+ epold = exfat_get_dentry(sb, p_dir, oldentry, &old_bh, §or_old); -+ if (!epold) -+ return -EIO; -+ -+ num_old_entries = exfat_count_ext_entries(sb, p_dir, oldentry, epold); -+ if (num_old_entries < 0) -+ return -EIO; -+ num_old_entries++; -+ -+ num_new_entries = exfat_calc_num_entries(p_uniname); -+ if (num_new_entries < 0) -+ return num_new_entries; -+ -+ if (num_old_entries < num_new_entries) { -+ int newentry; -+ -+ newentry = -+ exfat_find_empty_entry(inode, p_dir, num_new_entries); -+ if (newentry < 0) -+ return newentry; /* -EIO or -ENOSPC */ -+ -+ epnew = exfat_get_dentry(sb, p_dir, newentry, &new_bh, -+ §or_new); -+ if (!epnew) -+ return -EIO; -+ -+ memcpy(epnew, epold, DENTRY_SIZE); -+ if (exfat_get_entry_type(epnew) == TYPE_FILE) { -+ epnew->dentry.file.attr |= cpu_to_le16(ATTR_ARCHIVE); -+ ei->attr |= ATTR_ARCHIVE; -+ } -+ exfat_update_bh(sb, new_bh, sync); -+ brelse(old_bh); -+ brelse(new_bh); -+ -+ epold = exfat_get_dentry(sb, p_dir, oldentry + 1, &old_bh, -+ §or_old); -+ epnew = exfat_get_dentry(sb, p_dir, newentry + 1, &new_bh, -+ §or_new); -+ if (!epold || !epnew) -+ return -EIO; -+ -+ memcpy(epnew, epold, DENTRY_SIZE); -+ exfat_update_bh(sb, new_bh, sync); -+ brelse(old_bh); -+ brelse(new_bh); -+ -+ ret = exfat_init_ext_entry(inode, p_dir, newentry, -+ num_new_entries, p_uniname); -+ if (ret) -+ return ret; -+ -+ exfat_remove_entries(inode, p_dir, oldentry, 0, -+ num_old_entries); -+ ei->entry = newentry; -+ } else { -+ if (exfat_get_entry_type(epold) == TYPE_FILE) { -+ epold->dentry.file.attr |= cpu_to_le16(ATTR_ARCHIVE); -+ ei->attr |= ATTR_ARCHIVE; -+ } -+ exfat_update_bh(sb, old_bh, sync); -+ brelse(old_bh); -+ ret = exfat_init_ext_entry(inode, p_dir, oldentry, -+ num_new_entries, p_uniname); -+ if (ret) -+ return ret; -+ -+ exfat_remove_entries(inode, p_dir, oldentry, num_new_entries, -+ num_old_entries); -+ } -+ return 0; -+} -+ -+static int exfat_move_file(struct inode *inode, struct exfat_chain *p_olddir, -+ int oldentry, struct exfat_chain *p_newdir, -+ struct exfat_uni_name *p_uniname, struct exfat_inode_info *ei) -+{ -+ int ret, newentry, num_new_entries, num_old_entries; -+ sector_t sector_mov, sector_new; -+ struct exfat_dentry *epmov, *epnew; -+ struct super_block *sb = inode->i_sb; -+ struct buffer_head *mov_bh, *new_bh; -+ -+ epmov = exfat_get_dentry(sb, p_olddir, oldentry, &mov_bh, §or_mov); -+ if (!epmov) -+ return -EIO; -+ -+ /* check if the source and target directory is the same */ -+ if (exfat_get_entry_type(epmov) == TYPE_DIR && -+ le32_to_cpu(epmov->dentry.stream.start_clu) == p_newdir->dir) -+ return -EINVAL; -+ -+ num_old_entries = exfat_count_ext_entries(sb, p_olddir, oldentry, -+ epmov); -+ if (num_old_entries < 0) -+ return -EIO; -+ num_old_entries++; -+ -+ num_new_entries = exfat_calc_num_entries(p_uniname); -+ if (num_new_entries < 0) -+ return num_new_entries; -+ -+ newentry = exfat_find_empty_entry(inode, p_newdir, num_new_entries); -+ if (newentry < 0) -+ return newentry; /* -EIO or -ENOSPC */ -+ -+ epnew = exfat_get_dentry(sb, p_newdir, newentry, &new_bh, §or_new); -+ if (!epnew) -+ return -EIO; -+ -+ memcpy(epnew, epmov, DENTRY_SIZE); -+ if (exfat_get_entry_type(epnew) == TYPE_FILE) { -+ epnew->dentry.file.attr |= cpu_to_le16(ATTR_ARCHIVE); -+ ei->attr |= ATTR_ARCHIVE; -+ } -+ exfat_update_bh(sb, new_bh, IS_DIRSYNC(inode)); -+ brelse(mov_bh); -+ brelse(new_bh); -+ -+ epmov = exfat_get_dentry(sb, p_olddir, oldentry + 1, &mov_bh, -+ §or_mov); -+ epnew = exfat_get_dentry(sb, p_newdir, newentry + 1, &new_bh, -+ §or_new); -+ if (!epmov || !epnew) -+ return -EIO; -+ -+ memcpy(epnew, epmov, DENTRY_SIZE); -+ exfat_update_bh(sb, new_bh, IS_DIRSYNC(inode)); -+ brelse(mov_bh); -+ brelse(new_bh); -+ -+ ret = exfat_init_ext_entry(inode, p_newdir, newentry, num_new_entries, -+ p_uniname); -+ if (ret) -+ return ret; -+ -+ exfat_remove_entries(inode, p_olddir, oldentry, 0, num_old_entries); -+ -+ exfat_chain_set(&ei->dir, p_newdir->dir, p_newdir->size, -+ p_newdir->flags); -+ -+ ei->entry = newentry; -+ return 0; -+} -+ -+static void exfat_update_parent_info(struct exfat_inode_info *ei, -+ struct inode *parent_inode) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(parent_inode->i_sb); -+ struct exfat_inode_info *parent_ei = EXFAT_I(parent_inode); -+ loff_t parent_isize = i_size_read(parent_inode); -+ -+ /* -+ * the problem that struct exfat_inode_info caches wrong parent info. -+ * -+ * because of flag-mismatch of ei->dir, -+ * there is abnormal traversing cluster chain. -+ */ -+ if (unlikely(parent_ei->flags != ei->dir.flags || -+ parent_isize != EXFAT_CLU_TO_B(ei->dir.size, sbi) || -+ parent_ei->start_clu != ei->dir.dir)) { -+ exfat_chain_set(&ei->dir, parent_ei->start_clu, -+ EXFAT_B_TO_CLU_ROUND_UP(parent_isize, sbi), -+ parent_ei->flags); -+ } -+} -+ -+/* rename or move a old file into a new file */ -+static int __exfat_rename(struct inode *old_parent_inode, -+ struct exfat_inode_info *ei, struct inode *new_parent_inode, -+ struct dentry *new_dentry) -+{ -+ int ret; -+ int dentry; -+ struct exfat_chain olddir, newdir; -+ struct exfat_chain *p_dir = NULL; -+ struct exfat_uni_name uni_name; -+ struct exfat_dentry *ep; -+ struct super_block *sb = old_parent_inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ const unsigned char *new_path = new_dentry->d_name.name; -+ struct inode *new_inode = new_dentry->d_inode; -+ int num_entries; -+ struct exfat_inode_info *new_ei = NULL; -+ unsigned int new_entry_type = TYPE_UNUSED; -+ int new_entry = 0; -+ struct buffer_head *old_bh, *new_bh = NULL; -+ -+ /* check the validity of pointer parameters */ -+ if (new_path == NULL || strlen(new_path) == 0) -+ return -EINVAL; -+ -+ if (ei->dir.dir == DIR_DELETED) { -+ exfat_msg(sb, KERN_ERR, -+ "abnormal access to deleted source dentry"); -+ return -ENOENT; -+ } -+ -+ exfat_update_parent_info(ei, old_parent_inode); -+ -+ exfat_chain_dup(&olddir, &ei->dir); -+ dentry = ei->entry; -+ -+ ep = exfat_get_dentry(sb, &olddir, dentry, &old_bh, NULL); -+ if (!ep) { -+ ret = -EIO; -+ goto out; -+ } -+ brelse(old_bh); -+ -+ /* check whether new dir is existing directory and empty */ -+ if (new_inode) { -+ ret = -EIO; -+ new_ei = EXFAT_I(new_inode); -+ -+ if (new_ei->dir.dir == DIR_DELETED) { -+ exfat_msg(sb, KERN_ERR, -+ "abnormal access to deleted target dentry"); -+ goto out; -+ } -+ -+ exfat_update_parent_info(new_ei, new_parent_inode); -+ -+ p_dir = &(new_ei->dir); -+ new_entry = new_ei->entry; -+ ep = exfat_get_dentry(sb, p_dir, new_entry, &new_bh, NULL); -+ if (!ep) -+ goto out; -+ -+ new_entry_type = exfat_get_entry_type(ep); -+ brelse(new_bh); -+ -+ /* if new_inode exists, update ei */ -+ if (new_entry_type == TYPE_DIR) { -+ struct exfat_chain new_clu; -+ -+ new_clu.dir = new_ei->start_clu; -+ new_clu.size = -+ EXFAT_B_TO_CLU_ROUND_UP(i_size_read(new_inode), -+ sbi); -+ new_clu.flags = new_ei->flags; -+ -+ ret = exfat_check_dir_empty(sb, &new_clu); -+ if (ret) -+ goto out; -+ } -+ } -+ -+ /* check the validity of directory name in the given new pathname */ -+ ret = exfat_resolve_path(new_parent_inode, new_path, &newdir, -+ &uni_name); -+ if (ret) -+ goto out; -+ -+ exfat_set_vol_flags(sb, VOL_DIRTY); -+ -+ if (olddir.dir == newdir.dir) -+ ret = exfat_rename_file(new_parent_inode, &olddir, dentry, -+ &uni_name, ei); -+ else -+ ret = exfat_move_file(new_parent_inode, &olddir, dentry, -+ &newdir, &uni_name, ei); -+ -+ if (!ret && new_inode) { -+ /* delete entries of new_dir */ -+ ep = exfat_get_dentry(sb, p_dir, new_entry, &new_bh, NULL); -+ if (!ep) { -+ ret = -EIO; -+ goto del_out; -+ } -+ -+ num_entries = exfat_count_ext_entries(sb, p_dir, new_entry, ep); -+ if (num_entries < 0) { -+ ret = -EIO; -+ goto del_out; -+ } -+ brelse(new_bh); -+ -+ if (exfat_remove_entries(new_inode, p_dir, new_entry, 0, -+ num_entries + 1)) { -+ ret = -EIO; -+ goto del_out; -+ } -+ -+ /* Free the clusters if new_inode is a dir(as if exfat_rmdir) */ -+ if (new_entry_type == TYPE_DIR) { -+ /* new_ei, new_clu_to_free */ -+ struct exfat_chain new_clu_to_free; -+ -+ exfat_chain_set(&new_clu_to_free, new_ei->start_clu, -+ EXFAT_B_TO_CLU_ROUND_UP(i_size_read(new_inode), -+ sbi), new_ei->flags); -+ -+ if (exfat_free_cluster(new_inode, &new_clu_to_free)) { -+ /* just set I/O error only */ -+ ret = -EIO; -+ } -+ -+ i_size_write(new_inode, 0); -+ new_ei->start_clu = EXFAT_EOF_CLUSTER; -+ new_ei->flags = ALLOC_NO_FAT_CHAIN; -+ } -+del_out: -+ /* Update new_inode ei -+ * Prevent syncing removed new_inode -+ * (new_ei is already initialized above code ("if (new_inode)") -+ */ -+ new_ei->dir.dir = DIR_DELETED; -+ } -+ exfat_set_vol_flags(sb, VOL_CLEAN); -+out: -+ return ret; -+} -+ -+static int exfat_rename(struct inode *old_dir, struct dentry *old_dentry, -+ struct inode *new_dir, struct dentry *new_dentry, -+ unsigned int flags) -+{ -+ struct inode *old_inode, *new_inode; -+ struct super_block *sb = old_dir->i_sb; -+ loff_t i_pos; -+ int err; -+ -+ /* -+ * The VFS already checks for existence, so for local filesystems -+ * the RENAME_NOREPLACE implementation is equivalent to plain rename. -+ * Don't support any other flags -+ */ -+ if (flags & ~RENAME_NOREPLACE) -+ return -EINVAL; -+ -+ mutex_lock(&EXFAT_SB(sb)->s_lock); -+ old_inode = old_dentry->d_inode; -+ new_inode = new_dentry->d_inode; -+ -+ err = __exfat_rename(old_dir, EXFAT_I(old_inode), new_dir, new_dentry); -+ if (err) -+ goto unlock; -+ -+ inode_inc_iversion(new_dir); -+ new_dir->i_ctime = new_dir->i_mtime = new_dir->i_atime = -+ EXFAT_I(new_dir)->i_crtime = current_time(new_dir); -+ if (IS_DIRSYNC(new_dir)) -+ exfat_sync_inode(new_dir); -+ else -+ mark_inode_dirty(new_dir); -+ -+ i_pos = ((loff_t)EXFAT_I(old_inode)->dir.dir << 32) | -+ (EXFAT_I(old_inode)->entry & 0xffffffff); -+ exfat_unhash_inode(old_inode); -+ exfat_hash_inode(old_inode, i_pos); -+ if (IS_DIRSYNC(new_dir)) -+ exfat_sync_inode(old_inode); -+ else -+ mark_inode_dirty(old_inode); -+ -+ if (S_ISDIR(old_inode->i_mode) && old_dir != new_dir) { -+ drop_nlink(old_dir); -+ if (!new_inode) -+ inc_nlink(new_dir); -+ } -+ -+ inode_inc_iversion(old_dir); -+ old_dir->i_ctime = old_dir->i_mtime = current_time(old_dir); -+ if (IS_DIRSYNC(old_dir)) -+ exfat_sync_inode(old_dir); -+ else -+ mark_inode_dirty(old_dir); -+ -+ if (new_inode) { -+ exfat_unhash_inode(new_inode); -+ -+ /* skip drop_nlink if new_inode already has been dropped */ -+ if (new_inode->i_nlink) { -+ drop_nlink(new_inode); -+ if (S_ISDIR(new_inode->i_mode)) -+ drop_nlink(new_inode); -+ } else { -+ exfat_msg(sb, KERN_WARNING, -+ "abnormal access to an inode dropped"); -+ WARN_ON(new_inode->i_nlink == 0); -+ } -+ new_inode->i_ctime = EXFAT_I(new_inode)->i_crtime = -+ current_time(new_inode); -+ } -+ -+unlock: -+ mutex_unlock(&EXFAT_SB(sb)->s_lock); -+ return err; -+} -+ -+const struct inode_operations exfat_dir_inode_operations = { -+ .create = exfat_create, -+ .lookup = exfat_lookup, -+ .unlink = exfat_unlink, -+ .mkdir = exfat_mkdir, -+ .rmdir = exfat_rmdir, -+ .rename = exfat_rename, -+ .setattr = exfat_setattr, -+ .getattr = exfat_getattr, -+}; --- -2.25.1 - diff --git a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-misc-operations.patch b/kernel/tools/perf/files/patches/mageia/fs-exfat-add-misc-operations.patch deleted file mode 100644 index 5d461d199f..0000000000 --- a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-misc-operations.patch +++ /dev/null @@ -1,193 +0,0 @@ -From 772b29cca528fcb21374bb3e597d848779938d16 Mon Sep 17 00:00:00 2001 -From: Namjae Jeon -Date: Mon, 2 Mar 2020 15:21:40 +0900 -Subject: [PATCH 09/14] exfat: add misc operations -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This adds the implementation of misc operations for exfat. - -Signed-off-by: Namjae Jeon -Signed-off-by: Sungjong Seo -Reviewed-by: Arnd Bergmann -Reviewed-by: Pali Rohár -Reviewed-by: Christoph Hellwig -Signed-off-by: Al Viro ---- - fs/exfat/misc.c | 163 ++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 163 insertions(+) - create mode 100644 fs/exfat/misc.c - -diff --git a/fs/exfat/misc.c b/fs/exfat/misc.c -new file mode 100644 -index 000000000000..14a3300848f6 ---- /dev/null -+++ b/fs/exfat/misc.c -@@ -0,0 +1,163 @@ -+// SPDX-License-Identifier: GPL-2.0-or-later -+/* -+ * Written 1992,1993 by Werner Almesberger -+ * 22/11/2000 - Fixed fat_date_unix2dos for dates earlier than 01/01/1980 -+ * and date_dos2unix for date==0 by Igor Zhbanov(bsg@uniyar.ac.ru) -+ * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -+ */ -+ -+#include -+#include -+#include -+#include -+ -+#include "exfat_raw.h" -+#include "exfat_fs.h" -+ -+/* -+ * exfat_fs_error reports a file system problem that might indicate fa data -+ * corruption/inconsistency. Depending on 'errors' mount option the -+ * panic() is called, or error message is printed FAT and nothing is done, -+ * or filesystem is remounted read-only (default behavior). -+ * In case the file system is remounted read-only, it can be made writable -+ * again by remounting it. -+ */ -+void __exfat_fs_error(struct super_block *sb, int report, const char *fmt, ...) -+{ -+ struct exfat_mount_options *opts = &EXFAT_SB(sb)->options; -+ va_list args; -+ struct va_format vaf; -+ -+ if (report) { -+ va_start(args, fmt); -+ vaf.fmt = fmt; -+ vaf.va = &args; -+ exfat_msg(sb, KERN_ERR, "error, %pV\n", &vaf); -+ va_end(args); -+ } -+ -+ if (opts->errors == EXFAT_ERRORS_PANIC) { -+ panic("exFAT-fs (%s): fs panic from previous error\n", -+ sb->s_id); -+ } else if (opts->errors == EXFAT_ERRORS_RO && !sb_rdonly(sb)) { -+ sb->s_flags |= SB_RDONLY; -+ exfat_msg(sb, KERN_ERR, "Filesystem has been set read-only"); -+ } -+} -+ -+/* -+ * exfat_msg() - print preformated EXFAT specific messages. -+ * All logs except what uses exfat_fs_error() should be written by exfat_msg() -+ */ -+void exfat_msg(struct super_block *sb, const char *level, const char *fmt, ...) -+{ -+ struct va_format vaf; -+ va_list args; -+ -+ va_start(args, fmt); -+ vaf.fmt = fmt; -+ vaf.va = &args; -+ /* level means KERN_ pacility level */ -+ printk("%sexFAT-fs (%s): %pV\n", level, sb->s_id, &vaf); -+ va_end(args); -+} -+ -+#define SECS_PER_MIN (60) -+#define TIMEZONE_SEC(x) ((x) * 15 * SECS_PER_MIN) -+ -+static void exfat_adjust_tz(struct timespec64 *ts, u8 tz_off) -+{ -+ if (tz_off <= 0x3F) -+ ts->tv_sec -= TIMEZONE_SEC(tz_off); -+ else /* 0x40 <= (tz_off & 0x7F) <=0x7F */ -+ ts->tv_sec += TIMEZONE_SEC(0x80 - tz_off); -+} -+ -+/* Convert a EXFAT time/date pair to a UNIX date (seconds since 1 1 70). */ -+void exfat_get_entry_time(struct exfat_sb_info *sbi, struct timespec64 *ts, -+ u8 tz, __le16 time, __le16 date, u8 time_ms) -+{ -+ u16 t = le16_to_cpu(time); -+ u16 d = le16_to_cpu(date); -+ -+ ts->tv_sec = mktime64(1980 + (d >> 9), d >> 5 & 0x000F, d & 0x001F, -+ t >> 11, (t >> 5) & 0x003F, (t & 0x001F) << 1); -+ -+ -+ /* time_ms field represent 0 ~ 199(1990 ms) */ -+ if (time_ms) { -+ ts->tv_sec += time_ms / 100; -+ ts->tv_nsec = (time_ms % 100) * 10 * NSEC_PER_MSEC; -+ } -+ -+ if (tz & EXFAT_TZ_VALID) -+ /* Adjust timezone to UTC0. */ -+ exfat_adjust_tz(ts, tz & ~EXFAT_TZ_VALID); -+ else -+ /* Convert from local time to UTC using time_offset. */ -+ ts->tv_sec -= sbi->options.time_offset * SECS_PER_MIN; -+} -+ -+/* Convert linear UNIX date to a EXFAT time/date pair. */ -+void exfat_set_entry_time(struct exfat_sb_info *sbi, struct timespec64 *ts, -+ u8 *tz, __le16 *time, __le16 *date, u8 *time_ms) -+{ -+ struct tm tm; -+ u16 t, d; -+ -+ time64_to_tm(ts->tv_sec, 0, &tm); -+ t = (tm.tm_hour << 11) | (tm.tm_min << 5) | (tm.tm_sec >> 1); -+ d = ((tm.tm_year - 80) << 9) | ((tm.tm_mon + 1) << 5) | tm.tm_mday; -+ -+ *time = cpu_to_le16(t); -+ *date = cpu_to_le16(d); -+ -+ /* time_ms field represent 0 ~ 199(1990 ms) */ -+ if (time_ms) -+ *time_ms = (tm.tm_sec & 1) * 100 + -+ ts->tv_nsec / (10 * NSEC_PER_MSEC); -+ -+ /* -+ * Record 00h value for OffsetFromUtc field and 1 value for OffsetValid -+ * to indicate that local time and UTC are the same. -+ */ -+ *tz = EXFAT_TZ_VALID; -+} -+ -+unsigned short exfat_calc_chksum_2byte(void *data, int len, -+ unsigned short chksum, int type) -+{ -+ int i; -+ unsigned char *c = (unsigned char *)data; -+ -+ for (i = 0; i < len; i++, c++) { -+ if (((i == 2) || (i == 3)) && (type == CS_DIR_ENTRY)) -+ continue; -+ chksum = (((chksum & 1) << 15) | ((chksum & 0xFFFE) >> 1)) + -+ (unsigned short)*c; -+ } -+ return chksum; -+} -+ -+void exfat_update_bh(struct super_block *sb, struct buffer_head *bh, int sync) -+{ -+ set_bit(EXFAT_SB_DIRTY, &EXFAT_SB(sb)->s_state); -+ set_buffer_uptodate(bh); -+ mark_buffer_dirty(bh); -+ -+ if (sync) -+ sync_dirty_buffer(bh); -+} -+ -+void exfat_chain_set(struct exfat_chain *ec, unsigned int dir, -+ unsigned int size, unsigned char flags) -+{ -+ ec->dir = dir; -+ ec->size = size; -+ ec->flags = flags; -+} -+ -+void exfat_chain_dup(struct exfat_chain *dup, struct exfat_chain *ec) -+{ -+ return exfat_chain_set(dup, ec->dir, ec->size, ec->flags); -+} --- -2.25.1 - diff --git a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-module_alias_fs.patch b/kernel/tools/perf/files/patches/mageia/fs-exfat-add-module_alias_fs.patch deleted file mode 100644 index 6232c18b72..0000000000 --- a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-module_alias_fs.patch +++ /dev/null @@ -1,30 +0,0 @@ -From c37f83b424911f9bb6c9f17a4543c9c77cd73282 Mon Sep 17 00:00:00 2001 -From: Thomas Backlund -Date: Sat, 4 Apr 2020 23:00:31 +0300 -Subject: [PATCH v2] exfat: add missing MODULE_ALIAS_FS() - -This adds the necessary MODULE_ALIAS_FS() to exfat so the module gets -automatically loaded when an exfat filesystem is mounted. - -Signed-off-by: Thomas Backlund -Cc: Namjae Jeon -Cc: Sungjong Seo ---- - fs/exfat/super.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/fs/exfat/super.c b/fs/exfat/super.c -index 16ed202ef527..b4a4063a0272 100644 ---- a/fs/exfat/super.c -+++ b/fs/exfat/super.c -@@ -717,6 +717,7 @@ static void __exit exit_exfat_fs(void) - module_init(init_exfat_fs); - module_exit(exit_exfat_fs); - -+MODULE_ALIAS_FS("exfat"); - MODULE_LICENSE("GPL"); - MODULE_DESCRIPTION("exFAT filesystem support"); - MODULE_AUTHOR("Samsung Electronics Co., Ltd."); --- -2.26.0 - diff --git a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-nls-operations.patch b/kernel/tools/perf/files/patches/mageia/fs-exfat-add-nls-operations.patch deleted file mode 100644 index 5c5792d53e..0000000000 --- a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-nls-operations.patch +++ /dev/null @@ -1,860 +0,0 @@ -From 370e812b3ec190fa492c9fd5a80c38b086d105c0 Mon Sep 17 00:00:00 2001 -From: Namjae Jeon -Date: Mon, 2 Mar 2020 15:21:41 +0900 -Subject: [PATCH 10/14] exfat: add nls operations -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This adds the implementation of nls operations for exfat. - -Signed-off-by: Namjae Jeon -Signed-off-by: Sungjong Seo -Reviewed-by: Pali Rohár -Reviewed-by: Christoph Hellwig -Signed-off-by: Al Viro ---- - fs/exfat/nls.c | 831 +++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 831 insertions(+) - create mode 100644 fs/exfat/nls.c - -diff --git a/fs/exfat/nls.c b/fs/exfat/nls.c -new file mode 100644 -index 000000000000..6d1c3ae130ff ---- /dev/null -+++ b/fs/exfat/nls.c -@@ -0,0 +1,831 @@ -+// SPDX-License-Identifier: GPL-2.0-or-later -+/* -+ * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -+ */ -+ -+#include -+#include -+#include -+#include -+ -+#include "exfat_raw.h" -+#include "exfat_fs.h" -+ -+/* Upcase tabel macro */ -+#define EXFAT_NUM_UPCASE (2918) -+#define UTBL_COUNT (0x10000) -+ -+/* -+ * Upcase table in compressed format (7.2.5.1 Recommended Up-case Table -+ * in exfat specification, See: -+ * https://docs.microsoft.com/en-us/windows/win32/fileio/exfat-specification). -+ */ -+static const unsigned short uni_def_upcase[EXFAT_NUM_UPCASE] = { -+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, -+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, -+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, -+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, -+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, -+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, -+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, -+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, -+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, -+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, -+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, -+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, -+ 0x0060, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, -+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, -+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, -+ 0x0058, 0x0059, 0x005a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, -+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, -+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, -+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, -+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, -+ 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, -+ 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, -+ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, -+ 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, -+ 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, -+ 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, -+ 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, -+ 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, -+ 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, -+ 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, -+ 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00f7, -+ 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x0178, -+ 0x0100, 0x0100, 0x0102, 0x0102, 0x0104, 0x0104, 0x0106, 0x0106, -+ 0x0108, 0x0108, 0x010a, 0x010a, 0x010c, 0x010c, 0x010e, 0x010e, -+ 0x0110, 0x0110, 0x0112, 0x0112, 0x0114, 0x0114, 0x0116, 0x0116, -+ 0x0118, 0x0118, 0x011a, 0x011a, 0x011c, 0x011c, 0x011e, 0x011e, -+ 0x0120, 0x0120, 0x0122, 0x0122, 0x0124, 0x0124, 0x0126, 0x0126, -+ 0x0128, 0x0128, 0x012a, 0x012a, 0x012c, 0x012c, 0x012e, 0x012e, -+ 0x0130, 0x0131, 0x0132, 0x0132, 0x0134, 0x0134, 0x0136, 0x0136, -+ 0x0138, 0x0139, 0x0139, 0x013b, 0x013b, 0x013d, 0x013d, 0x013f, -+ 0x013f, 0x0141, 0x0141, 0x0143, 0x0143, 0x0145, 0x0145, 0x0147, -+ 0x0147, 0x0149, 0x014a, 0x014a, 0x014c, 0x014c, 0x014e, 0x014e, -+ 0x0150, 0x0150, 0x0152, 0x0152, 0x0154, 0x0154, 0x0156, 0x0156, -+ 0x0158, 0x0158, 0x015a, 0x015a, 0x015c, 0x015c, 0x015e, 0x015e, -+ 0x0160, 0x0160, 0x0162, 0x0162, 0x0164, 0x0164, 0x0166, 0x0166, -+ 0x0168, 0x0168, 0x016a, 0x016a, 0x016c, 0x016c, 0x016e, 0x016e, -+ 0x0170, 0x0170, 0x0172, 0x0172, 0x0174, 0x0174, 0x0176, 0x0176, -+ 0x0178, 0x0179, 0x0179, 0x017b, 0x017b, 0x017d, 0x017d, 0x017f, -+ 0x0243, 0x0181, 0x0182, 0x0182, 0x0184, 0x0184, 0x0186, 0x0187, -+ 0x0187, 0x0189, 0x018a, 0x018b, 0x018b, 0x018d, 0x018e, 0x018f, -+ 0x0190, 0x0191, 0x0191, 0x0193, 0x0194, 0x01f6, 0x0196, 0x0197, -+ 0x0198, 0x0198, 0x023d, 0x019b, 0x019c, 0x019d, 0x0220, 0x019f, -+ 0x01a0, 0x01a0, 0x01a2, 0x01a2, 0x01a4, 0x01a4, 0x01a6, 0x01a7, -+ 0x01a7, 0x01a9, 0x01aa, 0x01ab, 0x01ac, 0x01ac, 0x01ae, 0x01af, -+ 0x01af, 0x01b1, 0x01b2, 0x01b3, 0x01b3, 0x01b5, 0x01b5, 0x01b7, -+ 0x01b8, 0x01b8, 0x01ba, 0x01bb, 0x01bc, 0x01bc, 0x01be, 0x01f7, -+ 0x01c0, 0x01c1, 0x01c2, 0x01c3, 0x01c4, 0x01c5, 0x01c4, 0x01c7, -+ 0x01c8, 0x01c7, 0x01ca, 0x01cb, 0x01ca, 0x01cd, 0x01cd, 0x01cf, -+ 0x01cf, 0x01d1, 0x01d1, 0x01d3, 0x01d3, 0x01d5, 0x01d5, 0x01d7, -+ 0x01d7, 0x01d9, 0x01d9, 0x01db, 0x01db, 0x018e, 0x01de, 0x01de, -+ 0x01e0, 0x01e0, 0x01e2, 0x01e2, 0x01e4, 0x01e4, 0x01e6, 0x01e6, -+ 0x01e8, 0x01e8, 0x01ea, 0x01ea, 0x01ec, 0x01ec, 0x01ee, 0x01ee, -+ 0x01f0, 0x01f1, 0x01f2, 0x01f1, 0x01f4, 0x01f4, 0x01f6, 0x01f7, -+ 0x01f8, 0x01f8, 0x01fa, 0x01fa, 0x01fc, 0x01fc, 0x01fe, 0x01fe, -+ 0x0200, 0x0200, 0x0202, 0x0202, 0x0204, 0x0204, 0x0206, 0x0206, -+ 0x0208, 0x0208, 0x020a, 0x020a, 0x020c, 0x020c, 0x020e, 0x020e, -+ 0x0210, 0x0210, 0x0212, 0x0212, 0x0214, 0x0214, 0x0216, 0x0216, -+ 0x0218, 0x0218, 0x021a, 0x021a, 0x021c, 0x021c, 0x021e, 0x021e, -+ 0x0220, 0x0221, 0x0222, 0x0222, 0x0224, 0x0224, 0x0226, 0x0226, -+ 0x0228, 0x0228, 0x022a, 0x022a, 0x022c, 0x022c, 0x022e, 0x022e, -+ 0x0230, 0x0230, 0x0232, 0x0232, 0x0234, 0x0235, 0x0236, 0x0237, -+ 0x0238, 0x0239, 0x2c65, 0x023b, 0x023b, 0x023d, 0x2c66, 0x023f, -+ 0x0240, 0x0241, 0x0241, 0x0243, 0x0244, 0x0245, 0x0246, 0x0246, -+ 0x0248, 0x0248, 0x024a, 0x024a, 0x024c, 0x024c, 0x024e, 0x024e, -+ 0x0250, 0x0251, 0x0252, 0x0181, 0x0186, 0x0255, 0x0189, 0x018a, -+ 0x0258, 0x018f, 0x025a, 0x0190, 0x025c, 0x025d, 0x025e, 0x025f, -+ 0x0193, 0x0261, 0x0262, 0x0194, 0x0264, 0x0265, 0x0266, 0x0267, -+ 0x0197, 0x0196, 0x026a, 0x2c62, 0x026c, 0x026d, 0x026e, 0x019c, -+ 0x0270, 0x0271, 0x019d, 0x0273, 0x0274, 0x019f, 0x0276, 0x0277, -+ 0x0278, 0x0279, 0x027a, 0x027b, 0x027c, 0x2c64, 0x027e, 0x027f, -+ 0x01a6, 0x0281, 0x0282, 0x01a9, 0x0284, 0x0285, 0x0286, 0x0287, -+ 0x01ae, 0x0244, 0x01b1, 0x01b2, 0x0245, 0x028d, 0x028e, 0x028f, -+ 0x0290, 0x0291, 0x01b7, 0x0293, 0x0294, 0x0295, 0x0296, 0x0297, -+ 0x0298, 0x0299, 0x029a, 0x029b, 0x029c, 0x029d, 0x029e, 0x029f, -+ 0x02a0, 0x02a1, 0x02a2, 0x02a3, 0x02a4, 0x02a5, 0x02a6, 0x02a7, -+ 0x02a8, 0x02a9, 0x02aa, 0x02ab, 0x02ac, 0x02ad, 0x02ae, 0x02af, -+ 0x02b0, 0x02b1, 0x02b2, 0x02b3, 0x02b4, 0x02b5, 0x02b6, 0x02b7, -+ 0x02b8, 0x02b9, 0x02ba, 0x02bb, 0x02bc, 0x02bd, 0x02be, 0x02bf, -+ 0x02c0, 0x02c1, 0x02c2, 0x02c3, 0x02c4, 0x02c5, 0x02c6, 0x02c7, -+ 0x02c8, 0x02c9, 0x02ca, 0x02cb, 0x02cc, 0x02cd, 0x02ce, 0x02cf, -+ 0x02d0, 0x02d1, 0x02d2, 0x02d3, 0x02d4, 0x02d5, 0x02d6, 0x02d7, -+ 0x02d8, 0x02d9, 0x02da, 0x02db, 0x02dc, 0x02dd, 0x02de, 0x02df, -+ 0x02e0, 0x02e1, 0x02e2, 0x02e3, 0x02e4, 0x02e5, 0x02e6, 0x02e7, -+ 0x02e8, 0x02e9, 0x02ea, 0x02eb, 0x02ec, 0x02ed, 0x02ee, 0x02ef, -+ 0x02f0, 0x02f1, 0x02f2, 0x02f3, 0x02f4, 0x02f5, 0x02f6, 0x02f7, -+ 0x02f8, 0x02f9, 0x02fa, 0x02fb, 0x02fc, 0x02fd, 0x02fe, 0x02ff, -+ 0x0300, 0x0301, 0x0302, 0x0303, 0x0304, 0x0305, 0x0306, 0x0307, -+ 0x0308, 0x0309, 0x030a, 0x030b, 0x030c, 0x030d, 0x030e, 0x030f, -+ 0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, 0x0316, 0x0317, -+ 0x0318, 0x0319, 0x031a, 0x031b, 0x031c, 0x031d, 0x031e, 0x031f, -+ 0x0320, 0x0321, 0x0322, 0x0323, 0x0324, 0x0325, 0x0326, 0x0327, -+ 0x0328, 0x0329, 0x032a, 0x032b, 0x032c, 0x032d, 0x032e, 0x032f, -+ 0x0330, 0x0331, 0x0332, 0x0333, 0x0334, 0x0335, 0x0336, 0x0337, -+ 0x0338, 0x0339, 0x033a, 0x033b, 0x033c, 0x033d, 0x033e, 0x033f, -+ 0x0340, 0x0341, 0x0342, 0x0343, 0x0344, 0x0345, 0x0346, 0x0347, -+ 0x0348, 0x0349, 0x034a, 0x034b, 0x034c, 0x034d, 0x034e, 0x034f, -+ 0x0350, 0x0351, 0x0352, 0x0353, 0x0354, 0x0355, 0x0356, 0x0357, -+ 0x0358, 0x0359, 0x035a, 0x035b, 0x035c, 0x035d, 0x035e, 0x035f, -+ 0x0360, 0x0361, 0x0362, 0x0363, 0x0364, 0x0365, 0x0366, 0x0367, -+ 0x0368, 0x0369, 0x036a, 0x036b, 0x036c, 0x036d, 0x036e, 0x036f, -+ 0x0370, 0x0371, 0x0372, 0x0373, 0x0374, 0x0375, 0x0376, 0x0377, -+ 0x0378, 0x0379, 0x037a, 0x03fd, 0x03fe, 0x03ff, 0x037e, 0x037f, -+ 0x0380, 0x0381, 0x0382, 0x0383, 0x0384, 0x0385, 0x0386, 0x0387, -+ 0x0388, 0x0389, 0x038a, 0x038b, 0x038c, 0x038d, 0x038e, 0x038f, -+ 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, -+ 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, -+ 0x03a0, 0x03a1, 0x03a2, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, -+ 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x0386, 0x0388, 0x0389, 0x038a, -+ 0x03b0, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, -+ 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, -+ 0x03a0, 0x03a1, 0x03a3, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, -+ 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x038c, 0x038e, 0x038f, 0x03cf, -+ 0x03d0, 0x03d1, 0x03d2, 0x03d3, 0x03d4, 0x03d5, 0x03d6, 0x03d7, -+ 0x03d8, 0x03d8, 0x03da, 0x03da, 0x03dc, 0x03dc, 0x03de, 0x03de, -+ 0x03e0, 0x03e0, 0x03e2, 0x03e2, 0x03e4, 0x03e4, 0x03e6, 0x03e6, -+ 0x03e8, 0x03e8, 0x03ea, 0x03ea, 0x03ec, 0x03ec, 0x03ee, 0x03ee, -+ 0x03f0, 0x03f1, 0x03f9, 0x03f3, 0x03f4, 0x03f5, 0x03f6, 0x03f7, -+ 0x03f7, 0x03f9, 0x03fa, 0x03fa, 0x03fc, 0x03fd, 0x03fe, 0x03ff, -+ 0x0400, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, -+ 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x040d, 0x040e, 0x040f, -+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, -+ 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, -+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, -+ 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, -+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, -+ 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, -+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, -+ 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, -+ 0x0400, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, -+ 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x040d, 0x040e, 0x040f, -+ 0x0460, 0x0460, 0x0462, 0x0462, 0x0464, 0x0464, 0x0466, 0x0466, -+ 0x0468, 0x0468, 0x046a, 0x046a, 0x046c, 0x046c, 0x046e, 0x046e, -+ 0x0470, 0x0470, 0x0472, 0x0472, 0x0474, 0x0474, 0x0476, 0x0476, -+ 0x0478, 0x0478, 0x047a, 0x047a, 0x047c, 0x047c, 0x047e, 0x047e, -+ 0x0480, 0x0480, 0x0482, 0x0483, 0x0484, 0x0485, 0x0486, 0x0487, -+ 0x0488, 0x0489, 0x048a, 0x048a, 0x048c, 0x048c, 0x048e, 0x048e, -+ 0x0490, 0x0490, 0x0492, 0x0492, 0x0494, 0x0494, 0x0496, 0x0496, -+ 0x0498, 0x0498, 0x049a, 0x049a, 0x049c, 0x049c, 0x049e, 0x049e, -+ 0x04a0, 0x04a0, 0x04a2, 0x04a2, 0x04a4, 0x04a4, 0x04a6, 0x04a6, -+ 0x04a8, 0x04a8, 0x04aa, 0x04aa, 0x04ac, 0x04ac, 0x04ae, 0x04ae, -+ 0x04b0, 0x04b0, 0x04b2, 0x04b2, 0x04b4, 0x04b4, 0x04b6, 0x04b6, -+ 0x04b8, 0x04b8, 0x04ba, 0x04ba, 0x04bc, 0x04bc, 0x04be, 0x04be, -+ 0x04c0, 0x04c1, 0x04c1, 0x04c3, 0x04c3, 0x04c5, 0x04c5, 0x04c7, -+ 0x04c7, 0x04c9, 0x04c9, 0x04cb, 0x04cb, 0x04cd, 0x04cd, 0x04c0, -+ 0x04d0, 0x04d0, 0x04d2, 0x04d2, 0x04d4, 0x04d4, 0x04d6, 0x04d6, -+ 0x04d8, 0x04d8, 0x04da, 0x04da, 0x04dc, 0x04dc, 0x04de, 0x04de, -+ 0x04e0, 0x04e0, 0x04e2, 0x04e2, 0x04e4, 0x04e4, 0x04e6, 0x04e6, -+ 0x04e8, 0x04e8, 0x04ea, 0x04ea, 0x04ec, 0x04ec, 0x04ee, 0x04ee, -+ 0x04f0, 0x04f0, 0x04f2, 0x04f2, 0x04f4, 0x04f4, 0x04f6, 0x04f6, -+ 0x04f8, 0x04f8, 0x04fa, 0x04fa, 0x04fc, 0x04fc, 0x04fe, 0x04fe, -+ 0x0500, 0x0500, 0x0502, 0x0502, 0x0504, 0x0504, 0x0506, 0x0506, -+ 0x0508, 0x0508, 0x050a, 0x050a, 0x050c, 0x050c, 0x050e, 0x050e, -+ 0x0510, 0x0510, 0x0512, 0x0512, 0x0514, 0x0515, 0x0516, 0x0517, -+ 0x0518, 0x0519, 0x051a, 0x051b, 0x051c, 0x051d, 0x051e, 0x051f, -+ 0x0520, 0x0521, 0x0522, 0x0523, 0x0524, 0x0525, 0x0526, 0x0527, -+ 0x0528, 0x0529, 0x052a, 0x052b, 0x052c, 0x052d, 0x052e, 0x052f, -+ 0x0530, 0x0531, 0x0532, 0x0533, 0x0534, 0x0535, 0x0536, 0x0537, -+ 0x0538, 0x0539, 0x053a, 0x053b, 0x053c, 0x053d, 0x053e, 0x053f, -+ 0x0540, 0x0541, 0x0542, 0x0543, 0x0544, 0x0545, 0x0546, 0x0547, -+ 0x0548, 0x0549, 0x054a, 0x054b, 0x054c, 0x054d, 0x054e, 0x054f, -+ 0x0550, 0x0551, 0x0552, 0x0553, 0x0554, 0x0555, 0x0556, 0x0557, -+ 0x0558, 0x0559, 0x055a, 0x055b, 0x055c, 0x055d, 0x055e, 0x055f, -+ 0x0560, 0x0531, 0x0532, 0x0533, 0x0534, 0x0535, 0x0536, 0x0537, -+ 0x0538, 0x0539, 0x053a, 0x053b, 0x053c, 0x053d, 0x053e, 0x053f, -+ 0x0540, 0x0541, 0x0542, 0x0543, 0x0544, 0x0545, 0x0546, 0x0547, -+ 0x0548, 0x0549, 0x054a, 0x054b, 0x054c, 0x054d, 0x054e, 0x054f, -+ 0x0550, 0x0551, 0x0552, 0x0553, 0x0554, 0x0555, 0x0556, 0xffff, -+ 0x17f6, 0x2c63, 0x1d7e, 0x1d7f, 0x1d80, 0x1d81, 0x1d82, 0x1d83, -+ 0x1d84, 0x1d85, 0x1d86, 0x1d87, 0x1d88, 0x1d89, 0x1d8a, 0x1d8b, -+ 0x1d8c, 0x1d8d, 0x1d8e, 0x1d8f, 0x1d90, 0x1d91, 0x1d92, 0x1d93, -+ 0x1d94, 0x1d95, 0x1d96, 0x1d97, 0x1d98, 0x1d99, 0x1d9a, 0x1d9b, -+ 0x1d9c, 0x1d9d, 0x1d9e, 0x1d9f, 0x1da0, 0x1da1, 0x1da2, 0x1da3, -+ 0x1da4, 0x1da5, 0x1da6, 0x1da7, 0x1da8, 0x1da9, 0x1daa, 0x1dab, -+ 0x1dac, 0x1dad, 0x1dae, 0x1daf, 0x1db0, 0x1db1, 0x1db2, 0x1db3, -+ 0x1db4, 0x1db5, 0x1db6, 0x1db7, 0x1db8, 0x1db9, 0x1dba, 0x1dbb, -+ 0x1dbc, 0x1dbd, 0x1dbe, 0x1dbf, 0x1dc0, 0x1dc1, 0x1dc2, 0x1dc3, -+ 0x1dc4, 0x1dc5, 0x1dc6, 0x1dc7, 0x1dc8, 0x1dc9, 0x1dca, 0x1dcb, -+ 0x1dcc, 0x1dcd, 0x1dce, 0x1dcf, 0x1dd0, 0x1dd1, 0x1dd2, 0x1dd3, -+ 0x1dd4, 0x1dd5, 0x1dd6, 0x1dd7, 0x1dd8, 0x1dd9, 0x1dda, 0x1ddb, -+ 0x1ddc, 0x1ddd, 0x1dde, 0x1ddf, 0x1de0, 0x1de1, 0x1de2, 0x1de3, -+ 0x1de4, 0x1de5, 0x1de6, 0x1de7, 0x1de8, 0x1de9, 0x1dea, 0x1deb, -+ 0x1dec, 0x1ded, 0x1dee, 0x1def, 0x1df0, 0x1df1, 0x1df2, 0x1df3, -+ 0x1df4, 0x1df5, 0x1df6, 0x1df7, 0x1df8, 0x1df9, 0x1dfa, 0x1dfb, -+ 0x1dfc, 0x1dfd, 0x1dfe, 0x1dff, 0x1e00, 0x1e00, 0x1e02, 0x1e02, -+ 0x1e04, 0x1e04, 0x1e06, 0x1e06, 0x1e08, 0x1e08, 0x1e0a, 0x1e0a, -+ 0x1e0c, 0x1e0c, 0x1e0e, 0x1e0e, 0x1e10, 0x1e10, 0x1e12, 0x1e12, -+ 0x1e14, 0x1e14, 0x1e16, 0x1e16, 0x1e18, 0x1e18, 0x1e1a, 0x1e1a, -+ 0x1e1c, 0x1e1c, 0x1e1e, 0x1e1e, 0x1e20, 0x1e20, 0x1e22, 0x1e22, -+ 0x1e24, 0x1e24, 0x1e26, 0x1e26, 0x1e28, 0x1e28, 0x1e2a, 0x1e2a, -+ 0x1e2c, 0x1e2c, 0x1e2e, 0x1e2e, 0x1e30, 0x1e30, 0x1e32, 0x1e32, -+ 0x1e34, 0x1e34, 0x1e36, 0x1e36, 0x1e38, 0x1e38, 0x1e3a, 0x1e3a, -+ 0x1e3c, 0x1e3c, 0x1e3e, 0x1e3e, 0x1e40, 0x1e40, 0x1e42, 0x1e42, -+ 0x1e44, 0x1e44, 0x1e46, 0x1e46, 0x1e48, 0x1e48, 0x1e4a, 0x1e4a, -+ 0x1e4c, 0x1e4c, 0x1e4e, 0x1e4e, 0x1e50, 0x1e50, 0x1e52, 0x1e52, -+ 0x1e54, 0x1e54, 0x1e56, 0x1e56, 0x1e58, 0x1e58, 0x1e5a, 0x1e5a, -+ 0x1e5c, 0x1e5c, 0x1e5e, 0x1e5e, 0x1e60, 0x1e60, 0x1e62, 0x1e62, -+ 0x1e64, 0x1e64, 0x1e66, 0x1e66, 0x1e68, 0x1e68, 0x1e6a, 0x1e6a, -+ 0x1e6c, 0x1e6c, 0x1e6e, 0x1e6e, 0x1e70, 0x1e70, 0x1e72, 0x1e72, -+ 0x1e74, 0x1e74, 0x1e76, 0x1e76, 0x1e78, 0x1e78, 0x1e7a, 0x1e7a, -+ 0x1e7c, 0x1e7c, 0x1e7e, 0x1e7e, 0x1e80, 0x1e80, 0x1e82, 0x1e82, -+ 0x1e84, 0x1e84, 0x1e86, 0x1e86, 0x1e88, 0x1e88, 0x1e8a, 0x1e8a, -+ 0x1e8c, 0x1e8c, 0x1e8e, 0x1e8e, 0x1e90, 0x1e90, 0x1e92, 0x1e92, -+ 0x1e94, 0x1e94, 0x1e96, 0x1e97, 0x1e98, 0x1e99, 0x1e9a, 0x1e9b, -+ 0x1e9c, 0x1e9d, 0x1e9e, 0x1e9f, 0x1ea0, 0x1ea0, 0x1ea2, 0x1ea2, -+ 0x1ea4, 0x1ea4, 0x1ea6, 0x1ea6, 0x1ea8, 0x1ea8, 0x1eaa, 0x1eaa, -+ 0x1eac, 0x1eac, 0x1eae, 0x1eae, 0x1eb0, 0x1eb0, 0x1eb2, 0x1eb2, -+ 0x1eb4, 0x1eb4, 0x1eb6, 0x1eb6, 0x1eb8, 0x1eb8, 0x1eba, 0x1eba, -+ 0x1ebc, 0x1ebc, 0x1ebe, 0x1ebe, 0x1ec0, 0x1ec0, 0x1ec2, 0x1ec2, -+ 0x1ec4, 0x1ec4, 0x1ec6, 0x1ec6, 0x1ec8, 0x1ec8, 0x1eca, 0x1eca, -+ 0x1ecc, 0x1ecc, 0x1ece, 0x1ece, 0x1ed0, 0x1ed0, 0x1ed2, 0x1ed2, -+ 0x1ed4, 0x1ed4, 0x1ed6, 0x1ed6, 0x1ed8, 0x1ed8, 0x1eda, 0x1eda, -+ 0x1edc, 0x1edc, 0x1ede, 0x1ede, 0x1ee0, 0x1ee0, 0x1ee2, 0x1ee2, -+ 0x1ee4, 0x1ee4, 0x1ee6, 0x1ee6, 0x1ee8, 0x1ee8, 0x1eea, 0x1eea, -+ 0x1eec, 0x1eec, 0x1eee, 0x1eee, 0x1ef0, 0x1ef0, 0x1ef2, 0x1ef2, -+ 0x1ef4, 0x1ef4, 0x1ef6, 0x1ef6, 0x1ef8, 0x1ef8, 0x1efa, 0x1efb, -+ 0x1efc, 0x1efd, 0x1efe, 0x1eff, 0x1f08, 0x1f09, 0x1f0a, 0x1f0b, -+ 0x1f0c, 0x1f0d, 0x1f0e, 0x1f0f, 0x1f08, 0x1f09, 0x1f0a, 0x1f0b, -+ 0x1f0c, 0x1f0d, 0x1f0e, 0x1f0f, 0x1f18, 0x1f19, 0x1f1a, 0x1f1b, -+ 0x1f1c, 0x1f1d, 0x1f16, 0x1f17, 0x1f18, 0x1f19, 0x1f1a, 0x1f1b, -+ 0x1f1c, 0x1f1d, 0x1f1e, 0x1f1f, 0x1f28, 0x1f29, 0x1f2a, 0x1f2b, -+ 0x1f2c, 0x1f2d, 0x1f2e, 0x1f2f, 0x1f28, 0x1f29, 0x1f2a, 0x1f2b, -+ 0x1f2c, 0x1f2d, 0x1f2e, 0x1f2f, 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, -+ 0x1f3c, 0x1f3d, 0x1f3e, 0x1f3f, 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, -+ 0x1f3c, 0x1f3d, 0x1f3e, 0x1f3f, 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, -+ 0x1f4c, 0x1f4d, 0x1f46, 0x1f47, 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, -+ 0x1f4c, 0x1f4d, 0x1f4e, 0x1f4f, 0x1f50, 0x1f59, 0x1f52, 0x1f5b, -+ 0x1f54, 0x1f5d, 0x1f56, 0x1f5f, 0x1f58, 0x1f59, 0x1f5a, 0x1f5b, -+ 0x1f5c, 0x1f5d, 0x1f5e, 0x1f5f, 0x1f68, 0x1f69, 0x1f6a, 0x1f6b, -+ 0x1f6c, 0x1f6d, 0x1f6e, 0x1f6f, 0x1f68, 0x1f69, 0x1f6a, 0x1f6b, -+ 0x1f6c, 0x1f6d, 0x1f6e, 0x1f6f, 0x1fba, 0x1fbb, 0x1fc8, 0x1fc9, -+ 0x1fca, 0x1fcb, 0x1fda, 0x1fdb, 0x1ff8, 0x1ff9, 0x1fea, 0x1feb, -+ 0x1ffa, 0x1ffb, 0x1f7e, 0x1f7f, 0x1f88, 0x1f89, 0x1f8a, 0x1f8b, -+ 0x1f8c, 0x1f8d, 0x1f8e, 0x1f8f, 0x1f88, 0x1f89, 0x1f8a, 0x1f8b, -+ 0x1f8c, 0x1f8d, 0x1f8e, 0x1f8f, 0x1f98, 0x1f99, 0x1f9a, 0x1f9b, -+ 0x1f9c, 0x1f9d, 0x1f9e, 0x1f9f, 0x1f98, 0x1f99, 0x1f9a, 0x1f9b, -+ 0x1f9c, 0x1f9d, 0x1f9e, 0x1f9f, 0x1fa8, 0x1fa9, 0x1faa, 0x1fab, -+ 0x1fac, 0x1fad, 0x1fae, 0x1faf, 0x1fa8, 0x1fa9, 0x1faa, 0x1fab, -+ 0x1fac, 0x1fad, 0x1fae, 0x1faf, 0x1fb8, 0x1fb9, 0x1fb2, 0x1fbc, -+ 0x1fb4, 0x1fb5, 0x1fb6, 0x1fb7, 0x1fb8, 0x1fb9, 0x1fba, 0x1fbb, -+ 0x1fbc, 0x1fbd, 0x1fbe, 0x1fbf, 0x1fc0, 0x1fc1, 0x1fc2, 0x1fc3, -+ 0x1fc4, 0x1fc5, 0x1fc6, 0x1fc7, 0x1fc8, 0x1fc9, 0x1fca, 0x1fcb, -+ 0x1fc3, 0x1fcd, 0x1fce, 0x1fcf, 0x1fd8, 0x1fd9, 0x1fd2, 0x1fd3, -+ 0x1fd4, 0x1fd5, 0x1fd6, 0x1fd7, 0x1fd8, 0x1fd9, 0x1fda, 0x1fdb, -+ 0x1fdc, 0x1fdd, 0x1fde, 0x1fdf, 0x1fe8, 0x1fe9, 0x1fe2, 0x1fe3, -+ 0x1fe4, 0x1fec, 0x1fe6, 0x1fe7, 0x1fe8, 0x1fe9, 0x1fea, 0x1feb, -+ 0x1fec, 0x1fed, 0x1fee, 0x1fef, 0x1ff0, 0x1ff1, 0x1ff2, 0x1ff3, -+ 0x1ff4, 0x1ff5, 0x1ff6, 0x1ff7, 0x1ff8, 0x1ff9, 0x1ffa, 0x1ffb, -+ 0x1ff3, 0x1ffd, 0x1ffe, 0x1fff, 0x2000, 0x2001, 0x2002, 0x2003, -+ 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200a, 0x200b, -+ 0x200c, 0x200d, 0x200e, 0x200f, 0x2010, 0x2011, 0x2012, 0x2013, -+ 0x2014, 0x2015, 0x2016, 0x2017, 0x2018, 0x2019, 0x201a, 0x201b, -+ 0x201c, 0x201d, 0x201e, 0x201f, 0x2020, 0x2021, 0x2022, 0x2023, -+ 0x2024, 0x2025, 0x2026, 0x2027, 0x2028, 0x2029, 0x202a, 0x202b, -+ 0x202c, 0x202d, 0x202e, 0x202f, 0x2030, 0x2031, 0x2032, 0x2033, -+ 0x2034, 0x2035, 0x2036, 0x2037, 0x2038, 0x2039, 0x203a, 0x203b, -+ 0x203c, 0x203d, 0x203e, 0x203f, 0x2040, 0x2041, 0x2042, 0x2043, -+ 0x2044, 0x2045, 0x2046, 0x2047, 0x2048, 0x2049, 0x204a, 0x204b, -+ 0x204c, 0x204d, 0x204e, 0x204f, 0x2050, 0x2051, 0x2052, 0x2053, -+ 0x2054, 0x2055, 0x2056, 0x2057, 0x2058, 0x2059, 0x205a, 0x205b, -+ 0x205c, 0x205d, 0x205e, 0x205f, 0x2060, 0x2061, 0x2062, 0x2063, -+ 0x2064, 0x2065, 0x2066, 0x2067, 0x2068, 0x2069, 0x206a, 0x206b, -+ 0x206c, 0x206d, 0x206e, 0x206f, 0x2070, 0x2071, 0x2072, 0x2073, -+ 0x2074, 0x2075, 0x2076, 0x2077, 0x2078, 0x2079, 0x207a, 0x207b, -+ 0x207c, 0x207d, 0x207e, 0x207f, 0x2080, 0x2081, 0x2082, 0x2083, -+ 0x2084, 0x2085, 0x2086, 0x2087, 0x2088, 0x2089, 0x208a, 0x208b, -+ 0x208c, 0x208d, 0x208e, 0x208f, 0x2090, 0x2091, 0x2092, 0x2093, -+ 0x2094, 0x2095, 0x2096, 0x2097, 0x2098, 0x2099, 0x209a, 0x209b, -+ 0x209c, 0x209d, 0x209e, 0x209f, 0x20a0, 0x20a1, 0x20a2, 0x20a3, -+ 0x20a4, 0x20a5, 0x20a6, 0x20a7, 0x20a8, 0x20a9, 0x20aa, 0x20ab, -+ 0x20ac, 0x20ad, 0x20ae, 0x20af, 0x20b0, 0x20b1, 0x20b2, 0x20b3, -+ 0x20b4, 0x20b5, 0x20b6, 0x20b7, 0x20b8, 0x20b9, 0x20ba, 0x20bb, -+ 0x20bc, 0x20bd, 0x20be, 0x20bf, 0x20c0, 0x20c1, 0x20c2, 0x20c3, -+ 0x20c4, 0x20c5, 0x20c6, 0x20c7, 0x20c8, 0x20c9, 0x20ca, 0x20cb, -+ 0x20cc, 0x20cd, 0x20ce, 0x20cf, 0x20d0, 0x20d1, 0x20d2, 0x20d3, -+ 0x20d4, 0x20d5, 0x20d6, 0x20d7, 0x20d8, 0x20d9, 0x20da, 0x20db, -+ 0x20dc, 0x20dd, 0x20de, 0x20df, 0x20e0, 0x20e1, 0x20e2, 0x20e3, -+ 0x20e4, 0x20e5, 0x20e6, 0x20e7, 0x20e8, 0x20e9, 0x20ea, 0x20eb, -+ 0x20ec, 0x20ed, 0x20ee, 0x20ef, 0x20f0, 0x20f1, 0x20f2, 0x20f3, -+ 0x20f4, 0x20f5, 0x20f6, 0x20f7, 0x20f8, 0x20f9, 0x20fa, 0x20fb, -+ 0x20fc, 0x20fd, 0x20fe, 0x20ff, 0x2100, 0x2101, 0x2102, 0x2103, -+ 0x2104, 0x2105, 0x2106, 0x2107, 0x2108, 0x2109, 0x210a, 0x210b, -+ 0x210c, 0x210d, 0x210e, 0x210f, 0x2110, 0x2111, 0x2112, 0x2113, -+ 0x2114, 0x2115, 0x2116, 0x2117, 0x2118, 0x2119, 0x211a, 0x211b, -+ 0x211c, 0x211d, 0x211e, 0x211f, 0x2120, 0x2121, 0x2122, 0x2123, -+ 0x2124, 0x2125, 0x2126, 0x2127, 0x2128, 0x2129, 0x212a, 0x212b, -+ 0x212c, 0x212d, 0x212e, 0x212f, 0x2130, 0x2131, 0x2132, 0x2133, -+ 0x2134, 0x2135, 0x2136, 0x2137, 0x2138, 0x2139, 0x213a, 0x213b, -+ 0x213c, 0x213d, 0x213e, 0x213f, 0x2140, 0x2141, 0x2142, 0x2143, -+ 0x2144, 0x2145, 0x2146, 0x2147, 0x2148, 0x2149, 0x214a, 0x214b, -+ 0x214c, 0x214d, 0x2132, 0x214f, 0x2150, 0x2151, 0x2152, 0x2153, -+ 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215a, 0x215b, -+ 0x215c, 0x215d, 0x215e, 0x215f, 0x2160, 0x2161, 0x2162, 0x2163, -+ 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216a, 0x216b, -+ 0x216c, 0x216d, 0x216e, 0x216f, 0x2160, 0x2161, 0x2162, 0x2163, -+ 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216a, 0x216b, -+ 0x216c, 0x216d, 0x216e, 0x216f, 0x2180, 0x2181, 0x2182, 0x2183, -+ 0x2183, 0xffff, 0x034b, 0x24b6, 0x24b7, 0x24b8, 0x24b9, 0x24ba, -+ 0x24bb, 0x24bc, 0x24bd, 0x24be, 0x24bf, 0x24c0, 0x24c1, 0x24c2, -+ 0x24c3, 0x24c4, 0x24c5, 0x24c6, 0x24c7, 0x24c8, 0x24c9, 0x24ca, -+ 0x24cb, 0x24cc, 0x24cd, 0x24ce, 0x24cf, 0xffff, 0x0746, 0x2c00, -+ 0x2c01, 0x2c02, 0x2c03, 0x2c04, 0x2c05, 0x2c06, 0x2c07, 0x2c08, -+ 0x2c09, 0x2c0a, 0x2c0b, 0x2c0c, 0x2c0d, 0x2c0e, 0x2c0f, 0x2c10, -+ 0x2c11, 0x2c12, 0x2c13, 0x2c14, 0x2c15, 0x2c16, 0x2c17, 0x2c18, -+ 0x2c19, 0x2c1a, 0x2c1b, 0x2c1c, 0x2c1d, 0x2c1e, 0x2c1f, 0x2c20, -+ 0x2c21, 0x2c22, 0x2c23, 0x2c24, 0x2c25, 0x2c26, 0x2c27, 0x2c28, -+ 0x2c29, 0x2c2a, 0x2c2b, 0x2c2c, 0x2c2d, 0x2c2e, 0x2c5f, 0x2c60, -+ 0x2c60, 0x2c62, 0x2c63, 0x2c64, 0x2c65, 0x2c66, 0x2c67, 0x2c67, -+ 0x2c69, 0x2c69, 0x2c6b, 0x2c6b, 0x2c6d, 0x2c6e, 0x2c6f, 0x2c70, -+ 0x2c71, 0x2c72, 0x2c73, 0x2c74, 0x2c75, 0x2c75, 0x2c77, 0x2c78, -+ 0x2c79, 0x2c7a, 0x2c7b, 0x2c7c, 0x2c7d, 0x2c7e, 0x2c7f, 0x2c80, -+ 0x2c80, 0x2c82, 0x2c82, 0x2c84, 0x2c84, 0x2c86, 0x2c86, 0x2c88, -+ 0x2c88, 0x2c8a, 0x2c8a, 0x2c8c, 0x2c8c, 0x2c8e, 0x2c8e, 0x2c90, -+ 0x2c90, 0x2c92, 0x2c92, 0x2c94, 0x2c94, 0x2c96, 0x2c96, 0x2c98, -+ 0x2c98, 0x2c9a, 0x2c9a, 0x2c9c, 0x2c9c, 0x2c9e, 0x2c9e, 0x2ca0, -+ 0x2ca0, 0x2ca2, 0x2ca2, 0x2ca4, 0x2ca4, 0x2ca6, 0x2ca6, 0x2ca8, -+ 0x2ca8, 0x2caa, 0x2caa, 0x2cac, 0x2cac, 0x2cae, 0x2cae, 0x2cb0, -+ 0x2cb0, 0x2cb2, 0x2cb2, 0x2cb4, 0x2cb4, 0x2cb6, 0x2cb6, 0x2cb8, -+ 0x2cb8, 0x2cba, 0x2cba, 0x2cbc, 0x2cbc, 0x2cbe, 0x2cbe, 0x2cc0, -+ 0x2cc0, 0x2cc2, 0x2cc2, 0x2cc4, 0x2cc4, 0x2cc6, 0x2cc6, 0x2cc8, -+ 0x2cc8, 0x2cca, 0x2cca, 0x2ccc, 0x2ccc, 0x2cce, 0x2cce, 0x2cd0, -+ 0x2cd0, 0x2cd2, 0x2cd2, 0x2cd4, 0x2cd4, 0x2cd6, 0x2cd6, 0x2cd8, -+ 0x2cd8, 0x2cda, 0x2cda, 0x2cdc, 0x2cdc, 0x2cde, 0x2cde, 0x2ce0, -+ 0x2ce0, 0x2ce2, 0x2ce2, 0x2ce4, 0x2ce5, 0x2ce6, 0x2ce7, 0x2ce8, -+ 0x2ce9, 0x2cea, 0x2ceb, 0x2cec, 0x2ced, 0x2cee, 0x2cef, 0x2cf0, -+ 0x2cf1, 0x2cf2, 0x2cf3, 0x2cf4, 0x2cf5, 0x2cf6, 0x2cf7, 0x2cf8, -+ 0x2cf9, 0x2cfa, 0x2cfb, 0x2cfc, 0x2cfd, 0x2cfe, 0x2cff, 0x10a0, -+ 0x10a1, 0x10a2, 0x10a3, 0x10a4, 0x10a5, 0x10a6, 0x10a7, 0x10a8, -+ 0x10a9, 0x10aa, 0x10ab, 0x10ac, 0x10ad, 0x10ae, 0x10af, 0x10b0, -+ 0x10b1, 0x10b2, 0x10b3, 0x10b4, 0x10b5, 0x10b6, 0x10b7, 0x10b8, -+ 0x10b9, 0x10ba, 0x10bb, 0x10bc, 0x10bd, 0x10be, 0x10bf, 0x10c0, -+ 0x10c1, 0x10c2, 0x10c3, 0x10c4, 0x10c5, 0xffff, 0xd21b, 0xff21, -+ 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, -+ 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, -+ 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, -+ 0xff3a, 0xff5b, 0xff5c, 0xff5d, 0xff5e, 0xff5f, 0xff60, 0xff61, -+ 0xff62, 0xff63, 0xff64, 0xff65, 0xff66, 0xff67, 0xff68, 0xff69, -+ 0xff6a, 0xff6b, 0xff6c, 0xff6d, 0xff6e, 0xff6f, 0xff70, 0xff71, -+ 0xff72, 0xff73, 0xff74, 0xff75, 0xff76, 0xff77, 0xff78, 0xff79, -+ 0xff7a, 0xff7b, 0xff7c, 0xff7d, 0xff7e, 0xff7f, 0xff80, 0xff81, -+ 0xff82, 0xff83, 0xff84, 0xff85, 0xff86, 0xff87, 0xff88, 0xff89, -+ 0xff8a, 0xff8b, 0xff8c, 0xff8d, 0xff8e, 0xff8f, 0xff90, 0xff91, -+ 0xff92, 0xff93, 0xff94, 0xff95, 0xff96, 0xff97, 0xff98, 0xff99, -+ 0xff9a, 0xff9b, 0xff9c, 0xff9d, 0xff9e, 0xff9f, 0xffa0, 0xffa1, -+ 0xffa2, 0xffa3, 0xffa4, 0xffa5, 0xffa6, 0xffa7, 0xffa8, 0xffa9, -+ 0xffaa, 0xffab, 0xffac, 0xffad, 0xffae, 0xffaf, 0xffb0, 0xffb1, -+ 0xffb2, 0xffb3, 0xffb4, 0xffb5, 0xffb6, 0xffb7, 0xffb8, 0xffb9, -+ 0xffba, 0xffbb, 0xffbc, 0xffbd, 0xffbe, 0xffbf, 0xffc0, 0xffc1, -+ 0xffc2, 0xffc3, 0xffc4, 0xffc5, 0xffc6, 0xffc7, 0xffc8, 0xffc9, -+ 0xffca, 0xffcb, 0xffcc, 0xffcd, 0xffce, 0xffcf, 0xffd0, 0xffd1, -+ 0xffd2, 0xffd3, 0xffd4, 0xffd5, 0xffd6, 0xffd7, 0xffd8, 0xffd9, -+ 0xffda, 0xffdb, 0xffdc, 0xffdd, 0xffde, 0xffdf, 0xffe0, 0xffe1, -+ 0xffe2, 0xffe3, 0xffe4, 0xffe5, 0xffe6, 0xffe7, 0xffe8, 0xffe9, -+ 0xffea, 0xffeb, 0xffec, 0xffed, 0xffee, 0xffef, 0xfff0, 0xfff1, -+ 0xfff2, 0xfff3, 0xfff4, 0xfff5, 0xfff6, 0xfff7, 0xfff8, 0xfff9, -+ 0xfffa, 0xfffb, 0xfffc, 0xfffd, 0xfffe, 0xffff, -+}; -+ -+/* -+ * Allow full-width illegal characters : -+ * "MS windows 7" supports full-width-invalid-name-characters. -+ * So we should check half-width-invalid-name-characters(ASCII) only -+ * for compatibility. -+ * -+ * " * / : < > ? \ | -+ */ -+static unsigned short bad_uni_chars[] = { -+ 0x0022, 0x002A, 0x002F, 0x003A, -+ 0x003C, 0x003E, 0x003F, 0x005C, 0x007C, -+ 0 -+}; -+ -+static int exfat_convert_char_to_ucs2(struct nls_table *nls, -+ const unsigned char *ch, int ch_len, unsigned short *ucs2, -+ int *lossy) -+{ -+ int len; -+ -+ *ucs2 = 0x0; -+ -+ if (ch[0] < 0x80) { -+ *ucs2 = ch[0]; -+ return 1; -+ } -+ -+ len = nls->char2uni(ch, ch_len, ucs2); -+ if (len < 0) { -+ /* conversion failed */ -+ if (lossy != NULL) -+ *lossy |= NLS_NAME_LOSSY; -+ *ucs2 = '_'; -+ return 1; -+ } -+ return len; -+} -+ -+static int exfat_convert_ucs2_to_char(struct nls_table *nls, -+ unsigned short ucs2, unsigned char *ch, int *lossy) -+{ -+ int len; -+ -+ ch[0] = 0x0; -+ -+ if (ucs2 < 0x0080) { -+ ch[0] = ucs2; -+ return 1; -+ } -+ -+ len = nls->uni2char(ucs2, ch, MAX_CHARSET_SIZE); -+ if (len < 0) { -+ /* conversion failed */ -+ if (lossy != NULL) -+ *lossy |= NLS_NAME_LOSSY; -+ ch[0] = '_'; -+ return 1; -+ } -+ return len; -+} -+ -+unsigned short exfat_toupper(struct super_block *sb, unsigned short a) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ -+ return sbi->vol_utbl[a] ? sbi->vol_utbl[a] : a; -+} -+ -+static unsigned short *exfat_wstrchr(unsigned short *str, unsigned short wchar) -+{ -+ while (*str) { -+ if (*(str++) == wchar) -+ return str; -+ } -+ return NULL; -+} -+ -+int exfat_uniname_ncmp(struct super_block *sb, unsigned short *a, -+ unsigned short *b, unsigned int len) -+{ -+ int i; -+ -+ for (i = 0; i < len; i++, a++, b++) -+ if (exfat_toupper(sb, *a) != exfat_toupper(sb, *b)) -+ return 1; -+ return 0; -+} -+ -+static int exfat_utf16_to_utf8(struct super_block *sb, -+ struct exfat_uni_name *p_uniname, unsigned char *p_cstring, -+ int buflen) -+{ -+ int len; -+ const unsigned short *uniname = p_uniname->name; -+ -+ /* always len >= 0 */ -+ len = utf16s_to_utf8s(uniname, MAX_NAME_LENGTH, UTF16_HOST_ENDIAN, -+ p_cstring, buflen); -+ p_cstring[len] = '\0'; -+ return len; -+} -+ -+static int exfat_utf8_to_utf16(struct super_block *sb, -+ const unsigned char *p_cstring, const int len, -+ struct exfat_uni_name *p_uniname, int *p_lossy) -+{ -+ int i, unilen, lossy = NLS_NAME_NO_LOSSY; -+ unsigned short upname[MAX_NAME_LENGTH + 1]; -+ unsigned short *uniname = p_uniname->name; -+ -+ WARN_ON(!len); -+ -+ unilen = utf8s_to_utf16s(p_cstring, len, UTF16_HOST_ENDIAN, -+ (wchar_t *)uniname, MAX_NAME_LENGTH + 2); -+ if (unilen < 0) { -+ exfat_msg(sb, KERN_ERR, -+ "failed to %s (err : %d) nls len : %d", -+ __func__, unilen, len); -+ return unilen; -+ } -+ -+ if (unilen > MAX_NAME_LENGTH) { -+ exfat_msg(sb, KERN_ERR, -+ "failed to %s (estr:ENAMETOOLONG) nls len : %d, unilen : %d > %d", -+ __func__, len, unilen, MAX_NAME_LENGTH); -+ return -ENAMETOOLONG; -+ } -+ -+ p_uniname->name_len = unilen & 0xFF; -+ -+ for (i = 0; i < unilen; i++) { -+ if (*uniname < 0x0020 || -+ exfat_wstrchr(bad_uni_chars, *uniname)) -+ lossy |= NLS_NAME_LOSSY; -+ -+ upname[i] = exfat_toupper(sb, *uniname); -+ uniname++; -+ } -+ -+ *uniname = '\0'; -+ p_uniname->name_len = unilen; -+ p_uniname->name_hash = exfat_calc_chksum_2byte(upname, unilen << 1, 0, -+ CS_DEFAULT); -+ -+ if (p_lossy) -+ *p_lossy = lossy; -+ return unilen; -+} -+ -+#define PLANE_SIZE 0x00010000 -+#define SURROGATE_MASK 0xfffff800 -+#define SURROGATE_PAIR 0x0000d800 -+#define SURROGATE_LOW 0x00000400 -+#define SURROGATE_BITS 0x000003ff -+ -+unsigned short exfat_high_surrogate(unicode_t u) -+{ -+ return ((u - PLANE_SIZE) >> 10) + SURROGATE_PAIR; -+} -+ -+unsigned short exfat_low_surrogate(unicode_t u) -+{ -+ return ((u - PLANE_SIZE) & SURROGATE_BITS) | SURROGATE_PAIR | -+ SURROGATE_LOW; -+} -+ -+static int __exfat_utf16_to_nls(struct super_block *sb, -+ struct exfat_uni_name *p_uniname, unsigned char *p_cstring, -+ int buflen) -+{ -+ int i, j, len, out_len = 0; -+ unsigned char buf[MAX_CHARSET_SIZE]; -+ const unsigned short *uniname = p_uniname->name; -+ struct nls_table *nls = EXFAT_SB(sb)->nls_io; -+ -+ i = 0; -+ while (i < MAX_NAME_LENGTH && out_len < (buflen - 1)) { -+ if (*uniname == '\0') -+ break; -+ if ((*uniname & SURROGATE_MASK) != SURROGATE_PAIR) { -+ len = exfat_convert_ucs2_to_char(nls, *uniname, buf, -+ NULL); -+ } else { -+ /* Process UTF-16 surrogate pair as one character */ -+ if (!(*uniname & SURROGATE_LOW) && -+ i+1 < MAX_NAME_LENGTH && -+ (*(uniname+1) & SURROGATE_MASK) == SURROGATE_PAIR && -+ (*(uniname+1) & SURROGATE_LOW)) { -+ uniname++; -+ i++; -+ } -+ -+ /* -+ * UTF-16 surrogate pair encodes code points above -+ * U+FFFF. Code points above U+FFFF are not supported -+ * by kernel NLS framework therefore use replacement -+ * character -+ */ -+ len = 1; -+ buf[0] = '_'; -+ } -+ -+ if (out_len + len >= buflen) -+ len = buflen - 1 - out_len; -+ out_len += len; -+ -+ if (len > 1) { -+ for (j = 0; j < len; j++) -+ *p_cstring++ = buf[j]; -+ } else { /* len == 1 */ -+ *p_cstring++ = *buf; -+ } -+ -+ uniname++; -+ i++; -+ } -+ -+ *p_cstring = '\0'; -+ return out_len; -+} -+ -+static int exfat_nls_to_ucs2(struct super_block *sb, -+ const unsigned char *p_cstring, const int len, -+ struct exfat_uni_name *p_uniname, int *p_lossy) -+{ -+ int i = 0, unilen = 0, lossy = NLS_NAME_NO_LOSSY; -+ unsigned short upname[MAX_NAME_LENGTH + 1]; -+ unsigned short *uniname = p_uniname->name; -+ struct nls_table *nls = EXFAT_SB(sb)->nls_io; -+ -+ WARN_ON(!len); -+ -+ while (unilen < MAX_NAME_LENGTH && i < len) { -+ i += exfat_convert_char_to_ucs2(nls, p_cstring + i, len - i, -+ uniname, &lossy); -+ -+ if (*uniname < 0x0020 || -+ exfat_wstrchr(bad_uni_chars, *uniname)) -+ lossy |= NLS_NAME_LOSSY; -+ -+ upname[unilen] = exfat_toupper(sb, *uniname); -+ uniname++; -+ unilen++; -+ } -+ -+ if (p_cstring[i] != '\0') -+ lossy |= NLS_NAME_OVERLEN; -+ -+ *uniname = '\0'; -+ p_uniname->name_len = unilen; -+ p_uniname->name_hash = exfat_calc_chksum_2byte(upname, unilen << 1, 0, -+ CS_DEFAULT); -+ -+ if (p_lossy) -+ *p_lossy = lossy; -+ return unilen; -+} -+ -+int exfat_utf16_to_nls(struct super_block *sb, struct exfat_uni_name *uniname, -+ unsigned char *p_cstring, int buflen) -+{ -+ if (EXFAT_SB(sb)->options.utf8) -+ return exfat_utf16_to_utf8(sb, uniname, p_cstring, -+ buflen); -+ return __exfat_utf16_to_nls(sb, uniname, p_cstring, buflen); -+} -+ -+int exfat_nls_to_utf16(struct super_block *sb, const unsigned char *p_cstring, -+ const int len, struct exfat_uni_name *uniname, int *p_lossy) -+{ -+ if (EXFAT_SB(sb)->options.utf8) -+ return exfat_utf8_to_utf16(sb, p_cstring, len, -+ uniname, p_lossy); -+ return exfat_nls_to_ucs2(sb, p_cstring, len, uniname, p_lossy); -+} -+ -+static int exfat_load_upcase_table(struct super_block *sb, -+ sector_t sector, unsigned long long num_sectors, -+ unsigned int utbl_checksum) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ unsigned int sect_size = sb->s_blocksize; -+ unsigned int i, index = 0, checksum = 0; -+ int ret; -+ unsigned char skip = false; -+ unsigned short *upcase_table; -+ -+ upcase_table = kcalloc(UTBL_COUNT, sizeof(unsigned short), GFP_KERNEL); -+ if (!upcase_table) -+ return -ENOMEM; -+ -+ sbi->vol_utbl = upcase_table; -+ num_sectors += sector; -+ -+ while (sector < num_sectors) { -+ struct buffer_head *bh; -+ -+ bh = sb_bread(sb, sector); -+ if (!bh) { -+ exfat_msg(sb, KERN_ERR, -+ "failed to read sector(0x%llx)\n", -+ (unsigned long long)sector); -+ ret = -EIO; -+ goto free_table; -+ } -+ sector++; -+ for (i = 0; i < sect_size && index <= 0xFFFF; i += 2) { -+ unsigned short uni = get_unaligned_le16(bh->b_data + i); -+ -+ checksum = ((checksum & 1) ? 0x80000000 : 0) + -+ (checksum >> 1) + -+ *(((unsigned char *)bh->b_data) + i); -+ checksum = ((checksum & 1) ? 0x80000000 : 0) + -+ (checksum >> 1) + -+ *(((unsigned char *)bh->b_data) + (i + 1)); -+ -+ if (skip) { -+ index += uni; -+ skip = false; -+ } else if (uni == index) { -+ index++; -+ } else if (uni == 0xFFFF) { -+ skip = true; -+ } else { /* uni != index , uni != 0xFFFF */ -+ upcase_table[index] = uni; -+ index++; -+ } -+ } -+ brelse(bh); -+ } -+ -+ if (index >= 0xFFFF && utbl_checksum == checksum) -+ return 0; -+ -+ exfat_msg(sb, KERN_ERR, -+ "failed to load upcase table (idx : 0x%08x, chksum : 0x%08x, utbl_chksum : 0x%08x)\n", -+ index, checksum, utbl_checksum); -+ ret = -EINVAL; -+free_table: -+ exfat_free_upcase_table(sbi); -+ return ret; -+} -+ -+static int exfat_load_default_upcase_table(struct super_block *sb) -+{ -+ int i, ret = -EIO; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ unsigned char skip = false; -+ unsigned short uni = 0, *upcase_table; -+ unsigned int index = 0; -+ -+ upcase_table = kcalloc(UTBL_COUNT, sizeof(unsigned short), GFP_KERNEL); -+ if (!upcase_table) -+ return -ENOMEM; -+ -+ sbi->vol_utbl = upcase_table; -+ -+ for (i = 0; index <= 0xFFFF && i < EXFAT_NUM_UPCASE; i++) { -+ uni = uni_def_upcase[i]; -+ if (skip) { -+ index += uni; -+ skip = false; -+ } else if (uni == index) { -+ index++; -+ } else if (uni == 0xFFFF) { -+ skip = true; -+ } else { -+ upcase_table[index] = uni; -+ index++; -+ } -+ } -+ -+ if (index >= 0xFFFF) -+ return 0; -+ -+ /* FATAL error: default upcase table has error */ -+ exfat_free_upcase_table(sbi); -+ return ret; -+} -+ -+int exfat_create_upcase_table(struct super_block *sb) -+{ -+ int i, ret; -+ unsigned int tbl_clu, type; -+ sector_t sector; -+ unsigned long long tbl_size, num_sectors; -+ unsigned char blksize_bits = sb->s_blocksize_bits; -+ struct exfat_chain clu; -+ struct exfat_dentry *ep; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct buffer_head *bh; -+ -+ clu.dir = sbi->root_dir; -+ clu.flags = ALLOC_FAT_CHAIN; -+ -+ while (clu.dir != EXFAT_EOF_CLUSTER) { -+ for (i = 0; i < sbi->dentries_per_clu; i++) { -+ ep = exfat_get_dentry(sb, &clu, i, &bh, NULL); -+ if (!ep) -+ return -EIO; -+ -+ type = exfat_get_entry_type(ep); -+ if (type == TYPE_UNUSED) { -+ brelse(bh); -+ break; -+ } -+ -+ if (type != TYPE_UPCASE) { -+ brelse(bh); -+ continue; -+ } -+ -+ tbl_clu = le32_to_cpu(ep->dentry.upcase.start_clu); -+ tbl_size = le64_to_cpu(ep->dentry.upcase.size); -+ -+ sector = exfat_cluster_to_sector(sbi, tbl_clu); -+ num_sectors = ((tbl_size - 1) >> blksize_bits) + 1; -+ ret = exfat_load_upcase_table(sb, sector, num_sectors, -+ le32_to_cpu(ep->dentry.upcase.checksum)); -+ -+ brelse(bh); -+ if (ret && ret != -EIO) -+ goto load_default; -+ -+ /* load successfully */ -+ return ret; -+ } -+ -+ if (exfat_get_next_cluster(sb, &(clu.dir))) -+ return -EIO; -+ } -+ -+load_default: -+ /* load default upcase table */ -+ return exfat_load_default_upcase_table(sb); -+} -+ -+void exfat_free_upcase_table(struct exfat_sb_info *sbi) -+{ -+ kfree(sbi->vol_utbl); -+} --- -2.25.1 - diff --git a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-super-block-operations.patch b/kernel/tools/perf/files/patches/mageia/fs-exfat-add-super-block-operations.patch deleted file mode 100644 index f51a251870..0000000000 --- a/kernel/tools/perf/files/patches/mageia/fs-exfat-add-super-block-operations.patch +++ /dev/null @@ -1,758 +0,0 @@ -From 719c1e1829166da399903b13da6dcc5344e73449 Mon Sep 17 00:00:00 2001 -From: Namjae Jeon -Date: Mon, 2 Mar 2020 15:21:33 +0900 -Subject: [PATCH 02/14] exfat: add super block operations -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This adds the implementation of superblock operations for exfat. - -Signed-off-by: Namjae Jeon -Signed-off-by: Sungjong Seo -Reviewed-by: Pali Rohár -Reviewed-by: Christoph Hellwig -Reviewed-by: Arnd Bergmann -Signed-off-by: Al Viro ---- - fs/exfat/super.c | 728 +++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 728 insertions(+) - create mode 100644 fs/exfat/super.c - -diff --git a/fs/exfat/super.c b/fs/exfat/super.c -new file mode 100644 -index 000000000000..f06e0b53e393 ---- /dev/null -+++ b/fs/exfat/super.c -@@ -0,0 +1,728 @@ -+// SPDX-License-Identifier: GPL-2.0-or-later -+/* -+ * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "exfat_raw.h" -+#include "exfat_fs.h" -+ -+static char exfat_default_iocharset[] = CONFIG_EXFAT_DEFAULT_IOCHARSET; -+static struct kmem_cache *exfat_inode_cachep; -+ -+static void exfat_free_iocharset(struct exfat_sb_info *sbi) -+{ -+ if (sbi->options.iocharset != exfat_default_iocharset) -+ kfree(sbi->options.iocharset); -+} -+ -+static void exfat_delayed_free(struct rcu_head *p) -+{ -+ struct exfat_sb_info *sbi = container_of(p, struct exfat_sb_info, rcu); -+ -+ unload_nls(sbi->nls_io); -+ exfat_free_iocharset(sbi); -+ exfat_free_upcase_table(sbi); -+ kfree(sbi); -+} -+ -+static void exfat_put_super(struct super_block *sb) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ -+ mutex_lock(&sbi->s_lock); -+ if (test_and_clear_bit(EXFAT_SB_DIRTY, &sbi->s_state)) -+ sync_blockdev(sb->s_bdev); -+ exfat_set_vol_flags(sb, VOL_CLEAN); -+ exfat_free_bitmap(sbi); -+ mutex_unlock(&sbi->s_lock); -+ -+ call_rcu(&sbi->rcu, exfat_delayed_free); -+} -+ -+static int exfat_sync_fs(struct super_block *sb, int wait) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ int err = 0; -+ -+ /* If there are some dirty buffers in the bdev inode */ -+ mutex_lock(&sbi->s_lock); -+ if (test_and_clear_bit(EXFAT_SB_DIRTY, &sbi->s_state)) { -+ sync_blockdev(sb->s_bdev); -+ if (exfat_set_vol_flags(sb, VOL_CLEAN)) -+ err = -EIO; -+ } -+ mutex_unlock(&sbi->s_lock); -+ return err; -+} -+ -+static int exfat_statfs(struct dentry *dentry, struct kstatfs *buf) -+{ -+ struct super_block *sb = dentry->d_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ unsigned long long id = huge_encode_dev(sb->s_bdev->bd_dev); -+ -+ if (sbi->used_clusters == EXFAT_CLUSTERS_UNTRACKED) { -+ mutex_lock(&sbi->s_lock); -+ if (exfat_count_used_clusters(sb, &sbi->used_clusters)) { -+ mutex_unlock(&sbi->s_lock); -+ return -EIO; -+ } -+ mutex_unlock(&sbi->s_lock); -+ } -+ -+ buf->f_type = sb->s_magic; -+ buf->f_bsize = sbi->cluster_size; -+ buf->f_blocks = sbi->num_clusters - 2; /* clu 0 & 1 */ -+ buf->f_bfree = buf->f_blocks - sbi->used_clusters; -+ buf->f_bavail = buf->f_bfree; -+ buf->f_fsid.val[0] = (unsigned int)id; -+ buf->f_fsid.val[1] = (unsigned int)(id >> 32); -+ /* Unicode utf16 255 characters */ -+ buf->f_namelen = EXFAT_MAX_FILE_LEN * NLS_MAX_CHARSET_SIZE; -+ return 0; -+} -+ -+int exfat_set_vol_flags(struct super_block *sb, unsigned short new_flag) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct pbr64 *bpb; -+ bool sync = 0; -+ -+ /* flags are not changed */ -+ if (sbi->vol_flag == new_flag) -+ return 0; -+ -+ sbi->vol_flag = new_flag; -+ -+ /* skip updating volume dirty flag, -+ * if this volume has been mounted with read-only -+ */ -+ if (sb_rdonly(sb)) -+ return 0; -+ -+ if (!sbi->pbr_bh) { -+ sbi->pbr_bh = sb_bread(sb, 0); -+ if (!sbi->pbr_bh) { -+ exfat_msg(sb, KERN_ERR, "failed to read boot sector"); -+ return -ENOMEM; -+ } -+ } -+ -+ bpb = (struct pbr64 *)sbi->pbr_bh->b_data; -+ bpb->bsx.vol_flags = cpu_to_le16(new_flag); -+ -+ if (new_flag == VOL_DIRTY && !buffer_dirty(sbi->pbr_bh)) -+ sync = true; -+ else -+ sync = false; -+ -+ set_buffer_uptodate(sbi->pbr_bh); -+ mark_buffer_dirty(sbi->pbr_bh); -+ -+ if (sync) -+ sync_dirty_buffer(sbi->pbr_bh); -+ return 0; -+} -+ -+static int exfat_show_options(struct seq_file *m, struct dentry *root) -+{ -+ struct super_block *sb = root->d_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct exfat_mount_options *opts = &sbi->options; -+ -+ /* Show partition info */ -+ if (!uid_eq(opts->fs_uid, GLOBAL_ROOT_UID)) -+ seq_printf(m, ",uid=%u", -+ from_kuid_munged(&init_user_ns, opts->fs_uid)); -+ if (!gid_eq(opts->fs_gid, GLOBAL_ROOT_GID)) -+ seq_printf(m, ",gid=%u", -+ from_kgid_munged(&init_user_ns, opts->fs_gid)); -+ seq_printf(m, ",fmask=%04o,dmask=%04o", opts->fs_fmask, opts->fs_dmask); -+ if (opts->allow_utime) -+ seq_printf(m, ",allow_utime=%04o", opts->allow_utime); -+ if (opts->utf8) -+ seq_puts(m, ",iocharset=utf8"); -+ else if (sbi->nls_io) -+ seq_printf(m, ",iocharset=%s", sbi->nls_io->charset); -+ seq_printf(m, ",bps=%ld", sb->s_blocksize); -+ if (opts->errors == EXFAT_ERRORS_CONT) -+ seq_puts(m, ",errors=continue"); -+ else if (opts->errors == EXFAT_ERRORS_PANIC) -+ seq_puts(m, ",errors=panic"); -+ else -+ seq_puts(m, ",errors=remount-ro"); -+ if (opts->discard) -+ seq_puts(m, ",discard"); -+ if (opts->time_offset) -+ seq_printf(m, ",time_offset=%d", opts->time_offset); -+ return 0; -+} -+ -+static struct inode *exfat_alloc_inode(struct super_block *sb) -+{ -+ struct exfat_inode_info *ei; -+ -+ ei = kmem_cache_alloc(exfat_inode_cachep, GFP_NOFS); -+ if (!ei) -+ return NULL; -+ -+ init_rwsem(&ei->truncate_lock); -+ return &ei->vfs_inode; -+} -+ -+static void exfat_free_inode(struct inode *inode) -+{ -+ kmem_cache_free(exfat_inode_cachep, EXFAT_I(inode)); -+} -+ -+static const struct super_operations exfat_sops = { -+ .alloc_inode = exfat_alloc_inode, -+ .free_inode = exfat_free_inode, -+ .write_inode = exfat_write_inode, -+ .evict_inode = exfat_evict_inode, -+ .put_super = exfat_put_super, -+ .sync_fs = exfat_sync_fs, -+ .statfs = exfat_statfs, -+ .show_options = exfat_show_options, -+}; -+ -+enum { -+ Opt_uid, -+ Opt_gid, -+ Opt_umask, -+ Opt_dmask, -+ Opt_fmask, -+ Opt_allow_utime, -+ Opt_charset, -+ Opt_errors, -+ Opt_discard, -+ Opt_time_offset, -+}; -+ -+static const struct fs_parameter_spec exfat_param_specs[] = { -+ fsparam_u32("uid", Opt_uid), -+ fsparam_u32("gid", Opt_gid), -+ fsparam_u32oct("umask", Opt_umask), -+ fsparam_u32oct("dmask", Opt_dmask), -+ fsparam_u32oct("fmask", Opt_fmask), -+ fsparam_u32oct("allow_utime", Opt_allow_utime), -+ fsparam_string("iocharset", Opt_charset), -+ fsparam_enum("errors", Opt_errors), -+ fsparam_flag("discard", Opt_discard), -+ fsparam_s32("time_offset", Opt_time_offset), -+ {} -+}; -+ -+static const struct fs_parameter_enum exfat_param_enums[] = { -+ { Opt_errors, "continue", EXFAT_ERRORS_CONT }, -+ { Opt_errors, "panic", EXFAT_ERRORS_PANIC }, -+ { Opt_errors, "remount-ro", EXFAT_ERRORS_RO }, -+ {} -+}; -+ -+static const struct fs_parameter_description exfat_parameters = { -+ .name = "exfat", -+ .specs = exfat_param_specs, -+ .enums = exfat_param_enums, -+}; -+ -+static int exfat_parse_param(struct fs_context *fc, struct fs_parameter *param) -+{ -+ struct exfat_sb_info *sbi = fc->s_fs_info; -+ struct exfat_mount_options *opts = &sbi->options; -+ struct fs_parse_result result; -+ int opt; -+ -+ opt = fs_parse(fc, &exfat_parameters, param, &result); -+ if (opt < 0) -+ return opt; -+ -+ switch (opt) { -+ case Opt_uid: -+ opts->fs_uid = make_kuid(current_user_ns(), result.uint_32); -+ break; -+ case Opt_gid: -+ opts->fs_gid = make_kgid(current_user_ns(), result.uint_32); -+ break; -+ case Opt_umask: -+ opts->fs_fmask = result.uint_32; -+ opts->fs_dmask = result.uint_32; -+ break; -+ case Opt_dmask: -+ opts->fs_dmask = result.uint_32; -+ break; -+ case Opt_fmask: -+ opts->fs_fmask = result.uint_32; -+ break; -+ case Opt_allow_utime: -+ opts->allow_utime = result.uint_32 & 0022; -+ break; -+ case Opt_charset: -+ exfat_free_iocharset(sbi); -+ opts->iocharset = kstrdup(param->string, GFP_KERNEL); -+ if (!opts->iocharset) -+ return -ENOMEM; -+ break; -+ case Opt_errors: -+ opts->errors = result.uint_32; -+ break; -+ case Opt_discard: -+ opts->discard = 1; -+ break; -+ case Opt_time_offset: -+ /* -+ * Make the limit 24 just in case someone invents something -+ * unusual. -+ */ -+ if (result.int_32 < -24 * 60 || result.int_32 > 24 * 60) -+ return -EINVAL; -+ opts->time_offset = result.int_32; -+ break; -+ default: -+ return -EINVAL; -+ } -+ -+ return 0; -+} -+ -+static void exfat_hash_init(struct super_block *sb) -+{ -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ int i; -+ -+ spin_lock_init(&sbi->inode_hash_lock); -+ for (i = 0; i < EXFAT_HASH_SIZE; i++) -+ INIT_HLIST_HEAD(&sbi->inode_hashtable[i]); -+} -+ -+static int exfat_read_root(struct inode *inode) -+{ -+ struct super_block *sb = inode->i_sb; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ struct exfat_inode_info *ei = EXFAT_I(inode); -+ struct exfat_chain cdir; -+ int num_subdirs, num_clu = 0; -+ -+ exfat_chain_set(&ei->dir, sbi->root_dir, 0, ALLOC_FAT_CHAIN); -+ ei->entry = -1; -+ ei->start_clu = sbi->root_dir; -+ ei->flags = ALLOC_FAT_CHAIN; -+ ei->type = TYPE_DIR; -+ ei->version = 0; -+ ei->rwoffset = 0; -+ ei->hint_bmap.off = EXFAT_EOF_CLUSTER; -+ ei->hint_stat.eidx = 0; -+ ei->hint_stat.clu = sbi->root_dir; -+ ei->hint_femp.eidx = EXFAT_HINT_NONE; -+ -+ exfat_chain_set(&cdir, sbi->root_dir, 0, ALLOC_FAT_CHAIN); -+ if (exfat_count_num_clusters(sb, &cdir, &num_clu)) -+ return -EIO; -+ i_size_write(inode, num_clu << sbi->cluster_size_bits); -+ -+ num_subdirs = exfat_count_dir_entries(sb, &cdir); -+ if (num_subdirs < 0) -+ return -EIO; -+ set_nlink(inode, num_subdirs + EXFAT_MIN_SUBDIR); -+ -+ inode->i_uid = sbi->options.fs_uid; -+ inode->i_gid = sbi->options.fs_gid; -+ inode_inc_iversion(inode); -+ inode->i_generation = 0; -+ inode->i_mode = exfat_make_mode(sbi, ATTR_SUBDIR, 0777); -+ inode->i_op = &exfat_dir_inode_operations; -+ inode->i_fop = &exfat_dir_operations; -+ -+ inode->i_blocks = ((i_size_read(inode) + (sbi->cluster_size - 1)) -+ & ~(sbi->cluster_size - 1)) >> inode->i_blkbits; -+ EXFAT_I(inode)->i_pos = ((loff_t)sbi->root_dir << 32) | 0xffffffff; -+ EXFAT_I(inode)->i_size_aligned = i_size_read(inode); -+ EXFAT_I(inode)->i_size_ondisk = i_size_read(inode); -+ -+ exfat_save_attr(inode, ATTR_SUBDIR); -+ inode->i_mtime = inode->i_atime = inode->i_ctime = ei->i_crtime = -+ current_time(inode); -+ exfat_cache_init_inode(inode); -+ return 0; -+} -+ -+static struct pbr *exfat_read_pbr_with_logical_sector(struct super_block *sb, -+ struct buffer_head **prev_bh) -+{ -+ struct pbr *p_pbr = (struct pbr *) (*prev_bh)->b_data; -+ unsigned short logical_sect = 0; -+ -+ logical_sect = 1 << p_pbr->bsx.f64.sect_size_bits; -+ -+ if (!is_power_of_2(logical_sect) || -+ logical_sect < 512 || logical_sect > 4096) { -+ exfat_msg(sb, KERN_ERR, "bogus logical sector size %u", -+ logical_sect); -+ return NULL; -+ } -+ -+ if (logical_sect < sb->s_blocksize) { -+ exfat_msg(sb, KERN_ERR, -+ "logical sector size too small for device (logical sector size = %u)", -+ logical_sect); -+ return NULL; -+ } -+ -+ if (logical_sect > sb->s_blocksize) { -+ struct buffer_head *bh = NULL; -+ -+ __brelse(*prev_bh); -+ *prev_bh = NULL; -+ -+ if (!sb_set_blocksize(sb, logical_sect)) { -+ exfat_msg(sb, KERN_ERR, -+ "unable to set blocksize %u", logical_sect); -+ return NULL; -+ } -+ bh = sb_bread(sb, 0); -+ if (!bh) { -+ exfat_msg(sb, KERN_ERR, -+ "unable to read boot sector (logical sector size = %lu)", -+ sb->s_blocksize); -+ return NULL; -+ } -+ -+ *prev_bh = bh; -+ p_pbr = (struct pbr *) bh->b_data; -+ } -+ return p_pbr; -+} -+ -+/* mount the file system volume */ -+static int __exfat_fill_super(struct super_block *sb) -+{ -+ int ret; -+ struct pbr *p_pbr; -+ struct pbr64 *p_bpb; -+ struct buffer_head *bh; -+ struct exfat_sb_info *sbi = EXFAT_SB(sb); -+ -+ /* set block size to read super block */ -+ sb_min_blocksize(sb, 512); -+ -+ /* read boot sector */ -+ bh = sb_bread(sb, 0); -+ if (!bh) { -+ exfat_msg(sb, KERN_ERR, "unable to read boot sector"); -+ return -EIO; -+ } -+ -+ /* PRB is read */ -+ p_pbr = (struct pbr *)bh->b_data; -+ -+ /* check the validity of PBR */ -+ if (le16_to_cpu((p_pbr->signature)) != PBR_SIGNATURE) { -+ exfat_msg(sb, KERN_ERR, "invalid boot record signature"); -+ ret = -EINVAL; -+ goto free_bh; -+ } -+ -+ -+ /* check logical sector size */ -+ p_pbr = exfat_read_pbr_with_logical_sector(sb, &bh); -+ if (!p_pbr) { -+ ret = -EIO; -+ goto free_bh; -+ } -+ -+ /* -+ * res_zero field must be filled with zero to prevent mounting -+ * from FAT volume. -+ */ -+ if (memchr_inv(p_pbr->bpb.f64.res_zero, 0, -+ sizeof(p_pbr->bpb.f64.res_zero))) { -+ ret = -EINVAL; -+ goto free_bh; -+ } -+ -+ p_bpb = (struct pbr64 *)p_pbr; -+ if (!p_bpb->bsx.num_fats) { -+ exfat_msg(sb, KERN_ERR, "bogus number of FAT structure"); -+ ret = -EINVAL; -+ goto free_bh; -+ } -+ -+ sbi->sect_per_clus = 1 << p_bpb->bsx.sect_per_clus_bits; -+ sbi->sect_per_clus_bits = p_bpb->bsx.sect_per_clus_bits; -+ sbi->cluster_size_bits = sbi->sect_per_clus_bits + sb->s_blocksize_bits; -+ sbi->cluster_size = 1 << sbi->cluster_size_bits; -+ sbi->num_FAT_sectors = le32_to_cpu(p_bpb->bsx.fat_length); -+ sbi->FAT1_start_sector = le32_to_cpu(p_bpb->bsx.fat_offset); -+ sbi->FAT2_start_sector = p_bpb->bsx.num_fats == 1 ? -+ sbi->FAT1_start_sector : -+ sbi->FAT1_start_sector + sbi->num_FAT_sectors; -+ sbi->data_start_sector = le32_to_cpu(p_bpb->bsx.clu_offset); -+ sbi->num_sectors = le64_to_cpu(p_bpb->bsx.vol_length); -+ /* because the cluster index starts with 2 */ -+ sbi->num_clusters = le32_to_cpu(p_bpb->bsx.clu_count) + -+ EXFAT_RESERVED_CLUSTERS; -+ -+ sbi->root_dir = le32_to_cpu(p_bpb->bsx.root_cluster); -+ sbi->dentries_per_clu = 1 << -+ (sbi->cluster_size_bits - DENTRY_SIZE_BITS); -+ -+ sbi->vol_flag = le16_to_cpu(p_bpb->bsx.vol_flags); -+ sbi->clu_srch_ptr = EXFAT_FIRST_CLUSTER; -+ sbi->used_clusters = EXFAT_CLUSTERS_UNTRACKED; -+ -+ if (le16_to_cpu(p_bpb->bsx.vol_flags) & VOL_DIRTY) { -+ sbi->vol_flag |= VOL_DIRTY; -+ exfat_msg(sb, KERN_WARNING, -+ "Volume was not properly unmounted. Some data may be corrupt. Please run fsck."); -+ } -+ -+ /* exFAT file size is limited by a disk volume size */ -+ sb->s_maxbytes = (u64)(sbi->num_clusters - EXFAT_RESERVED_CLUSTERS) << -+ sbi->cluster_size_bits; -+ -+ ret = exfat_create_upcase_table(sb); -+ if (ret) { -+ exfat_msg(sb, KERN_ERR, "failed to load upcase table"); -+ goto free_bh; -+ } -+ -+ ret = exfat_load_bitmap(sb); -+ if (ret) { -+ exfat_msg(sb, KERN_ERR, "failed to load alloc-bitmap"); -+ goto free_upcase_table; -+ } -+ -+ ret = exfat_count_used_clusters(sb, &sbi->used_clusters); -+ if (ret) { -+ exfat_msg(sb, KERN_ERR, "failed to scan clusters"); -+ goto free_alloc_bitmap; -+ } -+ -+ return 0; -+ -+free_alloc_bitmap: -+ exfat_free_bitmap(sbi); -+free_upcase_table: -+ exfat_free_upcase_table(sbi); -+free_bh: -+ brelse(bh); -+ return ret; -+} -+ -+static int exfat_fill_super(struct super_block *sb, struct fs_context *fc) -+{ -+ struct exfat_sb_info *sbi = sb->s_fs_info; -+ struct exfat_mount_options *opts = &sbi->options; -+ struct inode *root_inode; -+ int err; -+ -+ if (opts->allow_utime == (unsigned short)-1) -+ opts->allow_utime = ~opts->fs_dmask & 0022; -+ -+ if (opts->discard) { -+ struct request_queue *q = bdev_get_queue(sb->s_bdev); -+ -+ if (!blk_queue_discard(q)) -+ exfat_msg(sb, KERN_WARNING, -+ "mounting with \"discard\" option, but the device does not support discard"); -+ opts->discard = 0; -+ } -+ -+ sb->s_flags |= SB_NODIRATIME; -+ sb->s_magic = EXFAT_SUPER_MAGIC; -+ sb->s_op = &exfat_sops; -+ -+ sb->s_time_gran = 1; -+ sb->s_time_min = EXFAT_MIN_TIMESTAMP_SECS; -+ sb->s_time_max = EXFAT_MAX_TIMESTAMP_SECS; -+ -+ err = __exfat_fill_super(sb); -+ if (err) { -+ exfat_msg(sb, KERN_ERR, "failed to recognize exfat type"); -+ goto check_nls_io; -+ } -+ -+ /* set up enough so that it can read an inode */ -+ exfat_hash_init(sb); -+ -+ if (!strcmp(sbi->options.iocharset, "utf8")) -+ opts->utf8 = 1; -+ else { -+ sbi->nls_io = load_nls(sbi->options.iocharset); -+ if (!sbi->nls_io) { -+ exfat_msg(sb, KERN_ERR, "IO charset %s not found", -+ sbi->options.iocharset); -+ err = -EINVAL; -+ goto free_table; -+ } -+ } -+ -+ if (sbi->options.utf8) -+ sb->s_d_op = &exfat_utf8_dentry_ops; -+ else -+ sb->s_d_op = &exfat_dentry_ops; -+ -+ root_inode = new_inode(sb); -+ if (!root_inode) { -+ exfat_msg(sb, KERN_ERR, "failed to allocate root inode."); -+ err = -ENOMEM; -+ goto free_table; -+ } -+ -+ root_inode->i_ino = EXFAT_ROOT_INO; -+ inode_set_iversion(root_inode, 1); -+ err = exfat_read_root(root_inode); -+ if (err) { -+ exfat_msg(sb, KERN_ERR, "failed to initialize root inode."); -+ goto put_inode; -+ } -+ -+ exfat_hash_inode(root_inode, EXFAT_I(root_inode)->i_pos); -+ insert_inode_hash(root_inode); -+ -+ sb->s_root = d_make_root(root_inode); -+ if (!sb->s_root) { -+ exfat_msg(sb, KERN_ERR, "failed to get the root dentry"); -+ err = -ENOMEM; -+ goto put_inode; -+ } -+ -+ return 0; -+ -+put_inode: -+ iput(root_inode); -+ sb->s_root = NULL; -+ -+free_table: -+ exfat_free_upcase_table(sbi); -+ exfat_free_bitmap(sbi); -+ -+check_nls_io: -+ unload_nls(sbi->nls_io); -+ exfat_free_iocharset(sbi); -+ sb->s_fs_info = NULL; -+ kfree(sbi); -+ return err; -+} -+ -+static int exfat_get_tree(struct fs_context *fc) -+{ -+ return get_tree_bdev(fc, exfat_fill_super); -+} -+ -+static void exfat_free(struct fs_context *fc) -+{ -+ kfree(fc->s_fs_info); -+} -+ -+static const struct fs_context_operations exfat_context_ops = { -+ .parse_param = exfat_parse_param, -+ .get_tree = exfat_get_tree, -+ .free = exfat_free, -+}; -+ -+static int exfat_init_fs_context(struct fs_context *fc) -+{ -+ struct exfat_sb_info *sbi; -+ -+ sbi = kzalloc(sizeof(struct exfat_sb_info), GFP_KERNEL); -+ if (!sbi) -+ return -ENOMEM; -+ -+ mutex_init(&sbi->s_lock); -+ ratelimit_state_init(&sbi->ratelimit, DEFAULT_RATELIMIT_INTERVAL, -+ DEFAULT_RATELIMIT_BURST); -+ -+ sbi->options.fs_uid = current_uid(); -+ sbi->options.fs_gid = current_gid(); -+ sbi->options.fs_fmask = current->fs->umask; -+ sbi->options.fs_dmask = current->fs->umask; -+ sbi->options.allow_utime = -1; -+ sbi->options.iocharset = exfat_default_iocharset; -+ sbi->options.errors = EXFAT_ERRORS_RO; -+ -+ fc->s_fs_info = sbi; -+ fc->ops = &exfat_context_ops; -+ return 0; -+} -+ -+static struct file_system_type exfat_fs_type = { -+ .owner = THIS_MODULE, -+ .name = "exfat", -+ .init_fs_context = exfat_init_fs_context, -+ .parameters = &exfat_parameters, -+ .kill_sb = kill_block_super, -+ .fs_flags = FS_REQUIRES_DEV, -+}; -+ -+static void exfat_inode_init_once(void *foo) -+{ -+ struct exfat_inode_info *ei = (struct exfat_inode_info *)foo; -+ -+ INIT_HLIST_NODE(&ei->i_hash_fat); -+ inode_init_once(&ei->vfs_inode); -+} -+ -+static int __init init_exfat_fs(void) -+{ -+ int err; -+ -+ err = exfat_cache_init(); -+ if (err) -+ return err; -+ -+ exfat_inode_cachep = kmem_cache_create("exfat_inode_cache", -+ sizeof(struct exfat_inode_info), -+ 0, SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, -+ exfat_inode_init_once); -+ if (!exfat_inode_cachep) { -+ err = -ENOMEM; -+ goto shutdown_cache; -+ } -+ -+ err = register_filesystem(&exfat_fs_type); -+ if (err) -+ goto destroy_cache; -+ -+ return 0; -+ -+destroy_cache: -+ kmem_cache_destroy(exfat_inode_cachep); -+shutdown_cache: -+ exfat_cache_shutdown(); -+ return err; -+} -+ -+static void __exit exit_exfat_fs(void) -+{ -+ /* -+ * Make sure all delayed rcu free inodes are flushed before we -+ * destroy cache. -+ */ -+ rcu_barrier(); -+ kmem_cache_destroy(exfat_inode_cachep); -+ unregister_filesystem(&exfat_fs_type); -+ exfat_cache_shutdown(); -+} -+ -+module_init(init_exfat_fs); -+module_exit(exit_exfat_fs); -+ -+MODULE_LICENSE("GPL"); -+MODULE_DESCRIPTION("exFAT filesystem support"); -+MODULE_AUTHOR("Samsung Electronics Co., Ltd."); --- -2.25.1 - diff --git a/kernel/tools/perf/files/patches/mageia/fs-exfat-fix-discard-support.patch b/kernel/tools/perf/files/patches/mageia/fs-exfat-fix-discard-support.patch deleted file mode 100644 index 5de9917c40..0000000000 --- a/kernel/tools/perf/files/patches/mageia/fs-exfat-fix-discard-support.patch +++ /dev/null @@ -1,32 +0,0 @@ -From: =?UTF-8?q?Pali=20Roh=C3=A1r?= -Subject: [PATCH 4/4] exfat: Fix discard support -Date: Tue, 17 Mar 2020 23:25:55 +0100 - -Discard support was always unconditionally disabled. Now it is disabled -only in the case when blk_queue_discard() returns false. - -Signed-off-by: Pali Rohár ---- - fs/exfat/super.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/fs/exfat/super.c b/fs/exfat/super.c -index 16ed202ef527..30e914ad17b5 100644 ---- a/fs/exfat/super.c -+++ b/fs/exfat/super.c -@@ -531,10 +531,11 @@ static int exfat_fill_super(struct super_block *sb, struct fs_context *fc) - if (opts->discard) { - struct request_queue *q = bdev_get_queue(sb->s_bdev); - -- if (!blk_queue_discard(q)) -+ if (!blk_queue_discard(q)) { - exfat_msg(sb, KERN_WARNING, - "mounting with \"discard\" option, but the device does not support discard"); -- opts->discard = 0; -+ opts->discard = 0; -+ } - } - - sb->s_flags |= SB_NODIRATIME; --- -2.20.1 diff --git a/kernel/tools/perf/files/patches/mageia/fs-exfat-remove-from-staging.patch b/kernel/tools/perf/files/patches/mageia/fs-exfat-remove-from-staging.patch deleted file mode 100644 index 252683728e..0000000000 --- a/kernel/tools/perf/files/patches/mageia/fs-exfat-remove-from-staging.patch +++ /dev/null @@ -1,9152 +0,0 @@ - -This removes the staging driver in favour of the one being merged upstream in 5.7 - -Signed-off-by: Thomas Backlund - ---- - MAINTAINERS | 6 - drivers/staging/Kconfig | 2 - drivers/staging/Makefile | 1 - drivers/staging/exfat/Kconfig | 41 -- - drivers/staging/exfat/Makefile | 10 - drivers/staging/exfat/TODO | 69 --- - drivers/staging/exfat/exfat.h | 824 ---------------------------------------- - drivers/staging/exfat/exfat_blkdev.c | 136 ------ - drivers/staging/exfat/exfat_cache.c | 555 --------------------------- - drivers/staging/exfat/exfat_core.c | 2582 -------------------------------------------------------------------------------------------------------------------------------- - drivers/staging/exfat/exfat_nls.c | 212 ---------- - drivers/staging/exfat/exfat_super.c | 3883 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - drivers/staging/exfat/exfat_upcase.c | 740 ------------------------------------ - 13 files changed, 9061 deletions(-) - -diff -Nurp linux-5.6.3.orig/drivers/staging/exfat/exfat_blkdev.c linux-5.6.3/drivers/staging/exfat/exfat_blkdev.c ---- linux-5.6.3.orig/drivers/staging/exfat/exfat_blkdev.c 2020-03-30 01:25:41.000000000 +0300 -+++ linux-5.6.3/drivers/staging/exfat/exfat_blkdev.c 1970-01-01 02:00:00.000000000 +0200 -@@ -1,136 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0-or-later --/* -- * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -- */ -- --#include --#include --#include --#include "exfat.h" -- --void exfat_bdev_open(struct super_block *sb) --{ -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- -- if (p_bd->opened) -- return; -- -- p_bd->sector_size = bdev_logical_block_size(sb->s_bdev); -- p_bd->sector_size_bits = ilog2(p_bd->sector_size); -- p_bd->sector_size_mask = p_bd->sector_size - 1; -- p_bd->num_sectors = i_size_read(sb->s_bdev->bd_inode) >> -- p_bd->sector_size_bits; -- p_bd->opened = true; --} -- --void exfat_bdev_close(struct super_block *sb) --{ -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- -- p_bd->opened = false; --} -- --int exfat_bdev_read(struct super_block *sb, sector_t secno, struct buffer_head **bh, -- u32 num_secs, bool read) --{ -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); --#ifdef CONFIG_STAGING_EXFAT_KERNEL_DEBUG -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- long flags = sbi->debug_flags; -- -- if (flags & EXFAT_DEBUGFLAGS_ERROR_RW) -- return -EIO; --#endif /* CONFIG_STAGING_EXFAT_KERNEL_DEBUG */ -- -- if (!p_bd->opened) -- return -ENODEV; -- -- if (*bh) -- __brelse(*bh); -- -- if (read) -- *bh = __bread(sb->s_bdev, secno, -- num_secs << p_bd->sector_size_bits); -- else -- *bh = __getblk(sb->s_bdev, secno, -- num_secs << p_bd->sector_size_bits); -- -- if (*bh) -- return 0; -- -- WARN(!p_fs->dev_ejected, -- "[EXFAT] No bh, device seems wrong or to be ejected.\n"); -- -- return -EIO; --} -- --int exfat_bdev_write(struct super_block *sb, sector_t secno, struct buffer_head *bh, -- u32 num_secs, bool sync) --{ -- s32 count; -- struct buffer_head *bh2; -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); --#ifdef CONFIG_STAGING_EXFAT_KERNEL_DEBUG -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- long flags = sbi->debug_flags; -- -- if (flags & EXFAT_DEBUGFLAGS_ERROR_RW) -- return -EIO; --#endif /* CONFIG_STAGING_EXFAT_KERNEL_DEBUG */ -- -- if (!p_bd->opened) -- return -ENODEV; -- -- if (secno == bh->b_blocknr) { -- lock_buffer(bh); -- set_buffer_uptodate(bh); -- mark_buffer_dirty(bh); -- unlock_buffer(bh); -- if (sync && (sync_dirty_buffer(bh) != 0)) -- return -EIO; -- } else { -- count = num_secs << p_bd->sector_size_bits; -- -- bh2 = __getblk(sb->s_bdev, secno, count); -- if (!bh2) -- goto no_bh; -- -- lock_buffer(bh2); -- memcpy(bh2->b_data, bh->b_data, count); -- set_buffer_uptodate(bh2); -- mark_buffer_dirty(bh2); -- unlock_buffer(bh2); -- if (sync && (sync_dirty_buffer(bh2) != 0)) { -- __brelse(bh2); -- goto no_bh; -- } -- __brelse(bh2); -- } -- -- return 0; -- --no_bh: -- WARN(!p_fs->dev_ejected, -- "[EXFAT] No bh, device seems wrong or to be ejected.\n"); -- -- return -EIO; --} -- --int exfat_bdev_sync(struct super_block *sb) --{ -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); --#ifdef CONFIG_STAGING_EXFAT_KERNEL_DEBUG -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- long flags = sbi->debug_flags; -- -- if (flags & EXFAT_DEBUGFLAGS_ERROR_RW) -- return -EIO; --#endif /* CONFIG_STAGING_EXFAT_KERNEL_DEBUG */ -- -- if (!p_bd->opened) -- return -ENODEV; -- -- return sync_blockdev(sb->s_bdev); --} -diff -Nurp linux-5.6.3.orig/drivers/staging/exfat/exfat_cache.c linux-5.6.3/drivers/staging/exfat/exfat_cache.c ---- linux-5.6.3.orig/drivers/staging/exfat/exfat_cache.c 2020-03-30 01:25:41.000000000 +0300 -+++ linux-5.6.3/drivers/staging/exfat/exfat_cache.c 1970-01-01 02:00:00.000000000 +0200 -@@ -1,555 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0-or-later --/* -- * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -- */ -- --#include --#include --#include --#include "exfat.h" -- --#define LOCKBIT 0x01 --#define DIRTYBIT 0x02 -- --/* Local variables */ --static DEFINE_MUTEX(f_mutex); --static DEFINE_MUTEX(b_mutex); -- --static struct buf_cache_t *FAT_cache_find(struct super_block *sb, sector_t sec) --{ -- s32 off; -- struct buf_cache_t *bp, *hp; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- off = (sec + -- (sec >> p_fs->sectors_per_clu_bits)) & (FAT_CACHE_HASH_SIZE - 1); -- -- hp = &p_fs->FAT_cache_hash_list[off]; -- for (bp = hp->hash_next; bp != hp; bp = bp->hash_next) { -- if ((bp->drv == p_fs->drv) && (bp->sec == sec)) { -- WARN(!bp->buf_bh, -- "[EXFAT] FAT_cache has no bh. It will make system panic.\n"); -- -- touch_buffer(bp->buf_bh); -- return bp; -- } -- } -- return NULL; --} -- --static void push_to_mru(struct buf_cache_t *bp, struct buf_cache_t *list) --{ -- bp->next = list->next; -- bp->prev = list; -- list->next->prev = bp; -- list->next = bp; --} -- --static void push_to_lru(struct buf_cache_t *bp, struct buf_cache_t *list) --{ -- bp->prev = list->prev; -- bp->next = list; -- list->prev->next = bp; -- list->prev = bp; --} -- --static void move_to_mru(struct buf_cache_t *bp, struct buf_cache_t *list) --{ -- bp->prev->next = bp->next; -- bp->next->prev = bp->prev; -- push_to_mru(bp, list); --} -- --static void move_to_lru(struct buf_cache_t *bp, struct buf_cache_t *list) --{ -- bp->prev->next = bp->next; -- bp->next->prev = bp->prev; -- push_to_lru(bp, list); --} -- --static struct buf_cache_t *FAT_cache_get(struct super_block *sb, sector_t sec) --{ -- struct buf_cache_t *bp; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- bp = p_fs->FAT_cache_lru_list.prev; -- -- move_to_mru(bp, &p_fs->FAT_cache_lru_list); -- return bp; --} -- --static void FAT_cache_insert_hash(struct super_block *sb, -- struct buf_cache_t *bp) --{ -- s32 off; -- struct buf_cache_t *hp; -- struct fs_info_t *p_fs; -- -- p_fs = &(EXFAT_SB(sb)->fs_info); -- off = (bp->sec + -- (bp->sec >> p_fs->sectors_per_clu_bits)) & -- (FAT_CACHE_HASH_SIZE - 1); -- -- hp = &p_fs->FAT_cache_hash_list[off]; -- bp->hash_next = hp->hash_next; -- bp->hash_prev = hp; -- hp->hash_next->hash_prev = bp; -- hp->hash_next = bp; --} -- --static void FAT_cache_remove_hash(struct buf_cache_t *bp) --{ -- (bp->hash_prev)->hash_next = bp->hash_next; -- (bp->hash_next)->hash_prev = bp->hash_prev; --} -- --static void buf_cache_insert_hash(struct super_block *sb, -- struct buf_cache_t *bp) --{ -- s32 off; -- struct buf_cache_t *hp; -- struct fs_info_t *p_fs; -- -- p_fs = &(EXFAT_SB(sb)->fs_info); -- off = (bp->sec + -- (bp->sec >> p_fs->sectors_per_clu_bits)) & -- (BUF_CACHE_HASH_SIZE - 1); -- -- hp = &p_fs->buf_cache_hash_list[off]; -- bp->hash_next = hp->hash_next; -- bp->hash_prev = hp; -- hp->hash_next->hash_prev = bp; -- hp->hash_next = bp; --} -- --static void buf_cache_remove_hash(struct buf_cache_t *bp) --{ -- (bp->hash_prev)->hash_next = bp->hash_next; -- (bp->hash_next)->hash_prev = bp->hash_prev; --} -- --void exfat_buf_init(struct super_block *sb) --{ -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- int i; -- -- /* LRU list */ -- p_fs->FAT_cache_lru_list.next = &p_fs->FAT_cache_lru_list; -- p_fs->FAT_cache_lru_list.prev = &p_fs->FAT_cache_lru_list; -- -- for (i = 0; i < FAT_CACHE_SIZE; i++) { -- p_fs->FAT_cache_array[i].drv = -1; -- p_fs->FAT_cache_array[i].sec = ~0; -- p_fs->FAT_cache_array[i].flag = 0; -- p_fs->FAT_cache_array[i].buf_bh = NULL; -- p_fs->FAT_cache_array[i].prev = NULL; -- p_fs->FAT_cache_array[i].next = NULL; -- push_to_mru(&p_fs->FAT_cache_array[i], -- &p_fs->FAT_cache_lru_list); -- } -- -- p_fs->buf_cache_lru_list.next = &p_fs->buf_cache_lru_list; -- p_fs->buf_cache_lru_list.prev = &p_fs->buf_cache_lru_list; -- -- for (i = 0; i < BUF_CACHE_SIZE; i++) { -- p_fs->buf_cache_array[i].drv = -1; -- p_fs->buf_cache_array[i].sec = ~0; -- p_fs->buf_cache_array[i].flag = 0; -- p_fs->buf_cache_array[i].buf_bh = NULL; -- p_fs->buf_cache_array[i].prev = NULL; -- p_fs->buf_cache_array[i].next = NULL; -- push_to_mru(&p_fs->buf_cache_array[i], -- &p_fs->buf_cache_lru_list); -- } -- -- /* HASH list */ -- for (i = 0; i < FAT_CACHE_HASH_SIZE; i++) { -- p_fs->FAT_cache_hash_list[i].drv = -1; -- p_fs->FAT_cache_hash_list[i].sec = ~0; -- p_fs->FAT_cache_hash_list[i].hash_next = -- &p_fs->FAT_cache_hash_list[i]; -- p_fs->FAT_cache_hash_list[i].hash_prev = -- &p_fs->FAT_cache_hash_list[i]; -- } -- -- for (i = 0; i < FAT_CACHE_SIZE; i++) -- FAT_cache_insert_hash(sb, &p_fs->FAT_cache_array[i]); -- -- for (i = 0; i < BUF_CACHE_HASH_SIZE; i++) { -- p_fs->buf_cache_hash_list[i].drv = -1; -- p_fs->buf_cache_hash_list[i].sec = ~0; -- p_fs->buf_cache_hash_list[i].hash_next = -- &p_fs->buf_cache_hash_list[i]; -- p_fs->buf_cache_hash_list[i].hash_prev = -- &p_fs->buf_cache_hash_list[i]; -- } -- -- for (i = 0; i < BUF_CACHE_SIZE; i++) -- buf_cache_insert_hash(sb, &p_fs->buf_cache_array[i]); --} -- --void exfat_buf_shutdown(struct super_block *sb) --{ --} -- --static int __exfat_fat_read(struct super_block *sb, u32 loc, u32 *content) --{ -- s32 off; -- u32 _content; -- sector_t sec; -- u8 *fat_sector, *fat_entry; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- -- sec = p_fs->FAT1_start_sector + -- (loc >> (p_bd->sector_size_bits - 2)); -- off = (loc << 2) & p_bd->sector_size_mask; -- -- fat_sector = exfat_fat_getblk(sb, sec); -- if (!fat_sector) -- return -1; -- -- fat_entry = &fat_sector[off]; -- _content = GET32_A(fat_entry); -- -- if (_content >= CLUSTER_32(0xFFFFFFF8)) { -- *content = CLUSTER_32(~0); -- return 0; -- } -- *content = CLUSTER_32(_content); -- return 0; --} -- --/* in : sb, loc -- * out: content -- * returns 0 on success -- * -1 on error -- */ --int exfat_fat_read(struct super_block *sb, u32 loc, u32 *content) --{ -- s32 ret; -- -- mutex_lock(&f_mutex); -- ret = __exfat_fat_read(sb, loc, content); -- mutex_unlock(&f_mutex); -- -- return ret; --} -- --static s32 __exfat_fat_write(struct super_block *sb, u32 loc, u32 content) --{ -- s32 off; -- sector_t sec; -- u8 *fat_sector, *fat_entry; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- -- sec = p_fs->FAT1_start_sector + (loc >> -- (p_bd->sector_size_bits - 2)); -- off = (loc << 2) & p_bd->sector_size_mask; -- -- fat_sector = exfat_fat_getblk(sb, sec); -- if (!fat_sector) -- return -1; -- -- fat_entry = &fat_sector[off]; -- -- SET32_A(fat_entry, content); -- -- exfat_fat_modify(sb, sec); -- return 0; --} -- --int exfat_fat_write(struct super_block *sb, u32 loc, u32 content) --{ -- s32 ret; -- -- mutex_lock(&f_mutex); -- ret = __exfat_fat_write(sb, loc, content); -- mutex_unlock(&f_mutex); -- -- return ret; --} -- --u8 *exfat_fat_getblk(struct super_block *sb, sector_t sec) --{ -- struct buf_cache_t *bp; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- bp = FAT_cache_find(sb, sec); -- if (bp) { -- move_to_mru(bp, &p_fs->FAT_cache_lru_list); -- return bp->buf_bh->b_data; -- } -- -- bp = FAT_cache_get(sb, sec); -- -- FAT_cache_remove_hash(bp); -- -- bp->drv = p_fs->drv; -- bp->sec = sec; -- bp->flag = 0; -- -- FAT_cache_insert_hash(sb, bp); -- -- if (sector_read(sb, sec, &bp->buf_bh, 1) != 0) { -- FAT_cache_remove_hash(bp); -- bp->drv = -1; -- bp->sec = ~0; -- bp->flag = 0; -- bp->buf_bh = NULL; -- -- move_to_lru(bp, &p_fs->FAT_cache_lru_list); -- return NULL; -- } -- -- return bp->buf_bh->b_data; --} -- --void exfat_fat_modify(struct super_block *sb, sector_t sec) --{ -- struct buf_cache_t *bp; -- -- bp = FAT_cache_find(sb, sec); -- if (bp) -- sector_write(sb, sec, bp->buf_bh, 0); --} -- --void exfat_fat_release_all(struct super_block *sb) --{ -- struct buf_cache_t *bp; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- mutex_lock(&f_mutex); -- -- bp = p_fs->FAT_cache_lru_list.next; -- while (bp != &p_fs->FAT_cache_lru_list) { -- if (bp->drv == p_fs->drv) { -- bp->drv = -1; -- bp->sec = ~0; -- bp->flag = 0; -- -- if (bp->buf_bh) { -- __brelse(bp->buf_bh); -- bp->buf_bh = NULL; -- } -- } -- bp = bp->next; -- } -- -- mutex_unlock(&f_mutex); --} -- --void exfat_fat_sync(struct super_block *sb) --{ -- struct buf_cache_t *bp; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- mutex_lock(&f_mutex); -- -- bp = p_fs->FAT_cache_lru_list.next; -- while (bp != &p_fs->FAT_cache_lru_list) { -- if ((bp->drv == p_fs->drv) && (bp->flag & DIRTYBIT)) { -- sync_dirty_buffer(bp->buf_bh); -- bp->flag &= ~(DIRTYBIT); -- } -- bp = bp->next; -- } -- -- mutex_unlock(&f_mutex); --} -- --static struct buf_cache_t *buf_cache_find(struct super_block *sb, sector_t sec) --{ -- s32 off; -- struct buf_cache_t *bp, *hp; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- off = (sec + (sec >> p_fs->sectors_per_clu_bits)) & -- (BUF_CACHE_HASH_SIZE - 1); -- -- hp = &p_fs->buf_cache_hash_list[off]; -- for (bp = hp->hash_next; bp != hp; bp = bp->hash_next) { -- if ((bp->drv == p_fs->drv) && (bp->sec == sec)) { -- touch_buffer(bp->buf_bh); -- return bp; -- } -- } -- return NULL; --} -- --static struct buf_cache_t *buf_cache_get(struct super_block *sb, sector_t sec) --{ -- struct buf_cache_t *bp; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- bp = p_fs->buf_cache_lru_list.prev; -- while (bp->flag & LOCKBIT) -- bp = bp->prev; -- -- move_to_mru(bp, &p_fs->buf_cache_lru_list); -- return bp; --} -- --static u8 *__exfat_buf_getblk(struct super_block *sb, sector_t sec) --{ -- struct buf_cache_t *bp; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- bp = buf_cache_find(sb, sec); -- if (bp) { -- move_to_mru(bp, &p_fs->buf_cache_lru_list); -- return bp->buf_bh->b_data; -- } -- -- bp = buf_cache_get(sb, sec); -- -- buf_cache_remove_hash(bp); -- -- bp->drv = p_fs->drv; -- bp->sec = sec; -- bp->flag = 0; -- -- buf_cache_insert_hash(sb, bp); -- -- if (sector_read(sb, sec, &bp->buf_bh, 1) != 0) { -- buf_cache_remove_hash(bp); -- bp->drv = -1; -- bp->sec = ~0; -- bp->flag = 0; -- bp->buf_bh = NULL; -- -- move_to_lru(bp, &p_fs->buf_cache_lru_list); -- return NULL; -- } -- -- return bp->buf_bh->b_data; --} -- --u8 *exfat_buf_getblk(struct super_block *sb, sector_t sec) --{ -- u8 *buf; -- -- mutex_lock(&b_mutex); -- buf = __exfat_buf_getblk(sb, sec); -- mutex_unlock(&b_mutex); -- -- return buf; --} -- --void exfat_buf_modify(struct super_block *sb, sector_t sec) --{ -- struct buf_cache_t *bp; -- -- mutex_lock(&b_mutex); -- -- bp = buf_cache_find(sb, sec); -- if (likely(bp)) -- sector_write(sb, sec, bp->buf_bh, 0); -- -- WARN(!bp, "[EXFAT] failed to find buffer_cache(sector:%llu).\n", -- (unsigned long long)sec); -- -- mutex_unlock(&b_mutex); --} -- --void exfat_buf_lock(struct super_block *sb, sector_t sec) --{ -- struct buf_cache_t *bp; -- -- mutex_lock(&b_mutex); -- -- bp = buf_cache_find(sb, sec); -- if (likely(bp)) -- bp->flag |= LOCKBIT; -- -- WARN(!bp, "[EXFAT] failed to find buffer_cache(sector:%llu).\n", -- (unsigned long long)sec); -- -- mutex_unlock(&b_mutex); --} -- --void exfat_buf_unlock(struct super_block *sb, sector_t sec) --{ -- struct buf_cache_t *bp; -- -- mutex_lock(&b_mutex); -- -- bp = buf_cache_find(sb, sec); -- if (likely(bp)) -- bp->flag &= ~(LOCKBIT); -- -- WARN(!bp, "[EXFAT] failed to find buffer_cache(sector:%llu).\n", -- (unsigned long long)sec); -- -- mutex_unlock(&b_mutex); --} -- --void exfat_buf_release(struct super_block *sb, sector_t sec) --{ -- struct buf_cache_t *bp; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- mutex_lock(&b_mutex); -- -- bp = buf_cache_find(sb, sec); -- if (likely(bp)) { -- bp->drv = -1; -- bp->sec = ~0; -- bp->flag = 0; -- -- if (bp->buf_bh) { -- __brelse(bp->buf_bh); -- bp->buf_bh = NULL; -- } -- -- move_to_lru(bp, &p_fs->buf_cache_lru_list); -- } -- -- mutex_unlock(&b_mutex); --} -- --void exfat_buf_release_all(struct super_block *sb) --{ -- struct buf_cache_t *bp; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- mutex_lock(&b_mutex); -- -- bp = p_fs->buf_cache_lru_list.next; -- while (bp != &p_fs->buf_cache_lru_list) { -- if (bp->drv == p_fs->drv) { -- bp->drv = -1; -- bp->sec = ~0; -- bp->flag = 0; -- -- if (bp->buf_bh) { -- __brelse(bp->buf_bh); -- bp->buf_bh = NULL; -- } -- } -- bp = bp->next; -- } -- -- mutex_unlock(&b_mutex); --} -- --void exfat_buf_sync(struct super_block *sb) --{ -- struct buf_cache_t *bp; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- mutex_lock(&b_mutex); -- -- bp = p_fs->buf_cache_lru_list.next; -- while (bp != &p_fs->buf_cache_lru_list) { -- if ((bp->drv == p_fs->drv) && (bp->flag & DIRTYBIT)) { -- sync_dirty_buffer(bp->buf_bh); -- bp->flag &= ~(DIRTYBIT); -- } -- bp = bp->next; -- } -- -- mutex_unlock(&b_mutex); --} -diff -Nurp linux-5.6.3.orig/drivers/staging/exfat/exfat_core.c linux-5.6.3/drivers/staging/exfat/exfat_core.c ---- linux-5.6.3.orig/drivers/staging/exfat/exfat_core.c 2020-03-30 01:25:41.000000000 +0300 -+++ linux-5.6.3/drivers/staging/exfat/exfat_core.c 1970-01-01 02:00:00.000000000 +0200 -@@ -1,2582 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0-or-later --/* -- * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -- */ -- --#include --#include --#include --#include --#include --#include --#include "exfat.h" -- --static void __set_sb_dirty(struct super_block *sb) --{ -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- -- sbi->s_dirt = 1; --} -- --static u8 name_buf[MAX_PATH_LENGTH * MAX_CHARSET_SIZE]; -- --static u8 free_bit[] = { -- 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, /* 0 ~ 19 */ -- 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, /* 20 ~ 39 */ -- 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, /* 40 ~ 59 */ -- 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, /* 60 ~ 79 */ -- 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, /* 80 ~ 99 */ -- 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, /* 100 ~ 119 */ -- 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, /* 120 ~ 139 */ -- 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, /* 140 ~ 159 */ -- 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, /* 160 ~ 179 */ -- 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, /* 180 ~ 199 */ -- 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, /* 200 ~ 219 */ -- 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, /* 220 ~ 239 */ -- 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 /* 240 ~ 254 */ --}; -- --static u8 used_bit[] = { -- 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, /* 0 ~ 19 */ -- 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, /* 20 ~ 39 */ -- 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, /* 40 ~ 59 */ -- 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, /* 60 ~ 79 */ -- 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, /* 80 ~ 99 */ -- 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, /* 100 ~ 119 */ -- 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, /* 120 ~ 139 */ -- 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, /* 140 ~ 159 */ -- 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, /* 160 ~ 179 */ -- 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, /* 180 ~ 199 */ -- 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, /* 200 ~ 219 */ -- 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, /* 220 ~ 239 */ -- 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 /* 240 ~ 255 */ --}; -- --#define BITMAP_LOC(v) ((v) >> 3) --#define BITMAP_SHIFT(v) ((v) & 0x07) -- --static inline s32 exfat_bitmap_test(u8 *bitmap, int i) --{ -- u8 data; -- -- data = bitmap[BITMAP_LOC(i)]; -- if ((data >> BITMAP_SHIFT(i)) & 0x01) -- return 1; -- return 0; --} -- --static inline void exfat_bitmap_set(u8 *bitmap, int i) --{ -- bitmap[BITMAP_LOC(i)] |= (0x01 << BITMAP_SHIFT(i)); --} -- --static inline void exfat_bitmap_clear(u8 *bitmap, int i) --{ -- bitmap[BITMAP_LOC(i)] &= ~(0x01 << BITMAP_SHIFT(i)); --} -- --/* -- * File System Management Functions -- */ -- --void fs_set_vol_flags(struct super_block *sb, u32 new_flag) --{ -- struct pbr_sector_t *p_pbr; -- struct bpbex_t *p_bpb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- if (p_fs->vol_flag == new_flag) -- return; -- -- p_fs->vol_flag = new_flag; -- -- if (!p_fs->pbr_bh) { -- if (sector_read(sb, p_fs->PBR_sector, -- &p_fs->pbr_bh, 1) != 0) -- return; -- } -- -- p_pbr = (struct pbr_sector_t *)p_fs->pbr_bh->b_data; -- p_bpb = (struct bpbex_t *)p_pbr->bpb; -- SET16(p_bpb->vol_flags, (u16)new_flag); -- -- /* XXX duyoung -- * what can we do here? (cuz fs_set_vol_flags() is void) -- */ -- if ((new_flag == VOL_DIRTY) && (!buffer_dirty(p_fs->pbr_bh))) -- sector_write(sb, p_fs->PBR_sector, p_fs->pbr_bh, 1); -- else -- sector_write(sb, p_fs->PBR_sector, p_fs->pbr_bh, 0); --} -- --void fs_error(struct super_block *sb) --{ -- struct exfat_mount_options *opts = &EXFAT_SB(sb)->options; -- -- if (opts->errors == EXFAT_ERRORS_PANIC) { -- panic("[EXFAT] Filesystem panic from previous error\n"); -- } else if ((opts->errors == EXFAT_ERRORS_RO) && !sb_rdonly(sb)) { -- sb->s_flags |= SB_RDONLY; -- pr_err("[EXFAT] Filesystem has been set read-only\n"); -- } --} -- --/* -- * Cluster Management Functions -- */ -- --static s32 clear_cluster(struct super_block *sb, u32 clu) --{ -- sector_t s, n; -- s32 ret = 0; -- struct buffer_head *tmp_bh = NULL; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- -- if (clu == CLUSTER_32(0)) { /* FAT16 root_dir */ -- s = p_fs->root_start_sector; -- n = p_fs->data_start_sector; -- } else { -- s = START_SECTOR(clu); -- n = s + p_fs->sectors_per_clu; -- } -- -- for (; s < n; s++) { -- ret = sector_read(sb, s, &tmp_bh, 0); -- if (ret != 0) -- return ret; -- -- memset((char *)tmp_bh->b_data, 0x0, p_bd->sector_size); -- ret = sector_write(sb, s, tmp_bh, 0); -- if (ret != 0) -- break; -- } -- -- brelse(tmp_bh); -- return ret; --} -- --static s32 set_alloc_bitmap(struct super_block *sb, u32 clu) --{ -- int i, b; -- sector_t sector; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- -- i = clu >> (p_bd->sector_size_bits + 3); -- b = clu & ((p_bd->sector_size << 3) - 1); -- -- sector = START_SECTOR(p_fs->map_clu) + i; -- -- exfat_bitmap_set((u8 *)p_fs->vol_amap[i]->b_data, b); -- -- return sector_write(sb, sector, p_fs->vol_amap[i], 0); --} -- --static s32 clr_alloc_bitmap(struct super_block *sb, u32 clu) --{ -- int i, b; -- sector_t sector; --#ifdef CONFIG_STAGING_EXFAT_DISCARD -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- struct exfat_mount_options *opts = &sbi->options; -- int ret; --#endif /* CONFIG_STAGING_EXFAT_DISCARD */ -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- -- i = clu >> (p_bd->sector_size_bits + 3); -- b = clu & ((p_bd->sector_size << 3) - 1); -- -- sector = START_SECTOR(p_fs->map_clu) + i; -- -- exfat_bitmap_clear((u8 *)p_fs->vol_amap[i]->b_data, b); -- --#ifdef CONFIG_STAGING_EXFAT_DISCARD -- if (opts->discard) { -- ret = sb_issue_discard(sb, START_SECTOR(clu), -- (1 << p_fs->sectors_per_clu_bits), -- GFP_NOFS, 0); -- if (ret == -EOPNOTSUPP) { -- pr_warn("discard not supported by device, disabling"); -- opts->discard = 0; -- } else { -- return ret; -- } -- } --#endif /* CONFIG_STAGING_EXFAT_DISCARD */ -- -- return sector_write(sb, sector, p_fs->vol_amap[i], 0); --} -- --static u32 test_alloc_bitmap(struct super_block *sb, u32 clu) --{ -- int i, map_i, map_b; -- u32 clu_base, clu_free; -- u8 k, clu_mask; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- -- clu_base = (clu & ~(0x7)) + 2; -- clu_mask = (1 << (clu - clu_base + 2)) - 1; -- -- map_i = clu >> (p_bd->sector_size_bits + 3); -- map_b = (clu >> 3) & p_bd->sector_size_mask; -- -- for (i = 2; i < p_fs->num_clusters; i += 8) { -- k = *(((u8 *)p_fs->vol_amap[map_i]->b_data) + map_b); -- if (clu_mask > 0) { -- k |= clu_mask; -- clu_mask = 0; -- } -- if (k < 0xFF) { -- clu_free = clu_base + free_bit[k]; -- if (clu_free < p_fs->num_clusters) -- return clu_free; -- } -- clu_base += 8; -- -- if (((++map_b) >= p_bd->sector_size) || -- (clu_base >= p_fs->num_clusters)) { -- if ((++map_i) >= p_fs->map_sectors) { -- clu_base = 2; -- map_i = 0; -- } -- map_b = 0; -- } -- } -- -- return CLUSTER_32(~0); --} -- --s32 exfat_alloc_cluster(struct super_block *sb, s32 num_alloc, -- struct chain_t *p_chain) --{ -- s32 num_clusters = 0; -- u32 hint_clu, new_clu, last_clu = CLUSTER_32(~0); -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- hint_clu = p_chain->dir; -- if (hint_clu == CLUSTER_32(~0)) { -- hint_clu = test_alloc_bitmap(sb, p_fs->clu_srch_ptr - 2); -- if (hint_clu == CLUSTER_32(~0)) -- return 0; -- } else if (hint_clu >= p_fs->num_clusters) { -- hint_clu = 2; -- p_chain->flags = 0x01; -- } -- -- __set_sb_dirty(sb); -- -- p_chain->dir = CLUSTER_32(~0); -- -- while ((new_clu = test_alloc_bitmap(sb, hint_clu - 2)) != CLUSTER_32(~0)) { -- if (new_clu != hint_clu) { -- if (p_chain->flags == 0x03) { -- exfat_chain_cont_cluster(sb, p_chain->dir, -- num_clusters); -- p_chain->flags = 0x01; -- } -- } -- -- if (set_alloc_bitmap(sb, new_clu - 2) != 0) -- return -EIO; -- -- num_clusters++; -- -- if (p_chain->flags == 0x01) { -- if (exfat_fat_write(sb, new_clu, CLUSTER_32(~0)) < 0) -- return -EIO; -- } -- -- if (p_chain->dir == CLUSTER_32(~0)) { -- p_chain->dir = new_clu; -- } else { -- if (p_chain->flags == 0x01) { -- if (exfat_fat_write(sb, last_clu, new_clu) < 0) -- return -EIO; -- } -- } -- last_clu = new_clu; -- -- if ((--num_alloc) == 0) { -- p_fs->clu_srch_ptr = hint_clu; -- if (p_fs->used_clusters != UINT_MAX) -- p_fs->used_clusters += num_clusters; -- -- p_chain->size += num_clusters; -- return num_clusters; -- } -- -- hint_clu = new_clu + 1; -- if (hint_clu >= p_fs->num_clusters) { -- hint_clu = 2; -- -- if (p_chain->flags == 0x03) { -- exfat_chain_cont_cluster(sb, p_chain->dir, -- num_clusters); -- p_chain->flags = 0x01; -- } -- } -- } -- -- p_fs->clu_srch_ptr = hint_clu; -- if (p_fs->used_clusters != UINT_MAX) -- p_fs->used_clusters += num_clusters; -- -- p_chain->size += num_clusters; -- return num_clusters; --} -- --void exfat_free_cluster(struct super_block *sb, struct chain_t *p_chain, -- s32 do_relse) --{ -- s32 num_clusters = 0; -- u32 clu; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- int i; -- sector_t sector; -- -- if ((p_chain->dir == CLUSTER_32(0)) || (p_chain->dir == CLUSTER_32(~0))) -- return; -- -- if (p_chain->size <= 0) { -- pr_err("[EXFAT] free_cluster : skip free-req clu:%u, because of zero-size truncation\n", -- p_chain->dir); -- return; -- } -- -- __set_sb_dirty(sb); -- clu = p_chain->dir; -- -- if (p_chain->flags == 0x03) { -- do { -- if (do_relse) { -- sector = START_SECTOR(clu); -- for (i = 0; i < p_fs->sectors_per_clu; i++) -- exfat_buf_release(sb, sector + i); -- } -- -- if (clr_alloc_bitmap(sb, clu - 2) != 0) -- break; -- clu++; -- -- num_clusters++; -- } while (num_clusters < p_chain->size); -- } else { -- do { -- if (p_fs->dev_ejected) -- break; -- -- if (do_relse) { -- sector = START_SECTOR(clu); -- for (i = 0; i < p_fs->sectors_per_clu; i++) -- exfat_buf_release(sb, sector + i); -- } -- -- if (clr_alloc_bitmap(sb, clu - 2) != 0) -- break; -- -- if (exfat_fat_read(sb, clu, &clu) == -1) -- break; -- num_clusters++; -- } while ((clu != CLUSTER_32(0)) && (clu != CLUSTER_32(~0))); -- } -- -- if (p_fs->used_clusters != UINT_MAX) -- p_fs->used_clusters -= num_clusters; --} -- --static u32 find_last_cluster(struct super_block *sb, struct chain_t *p_chain) --{ -- u32 clu, next; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- clu = p_chain->dir; -- -- if (p_chain->flags == 0x03) { -- clu += p_chain->size - 1; -- } else { -- while ((exfat_fat_read(sb, clu, &next) == 0) && -- (next != CLUSTER_32(~0))) { -- if (p_fs->dev_ejected) -- break; -- clu = next; -- } -- } -- -- return clu; --} -- --s32 count_num_clusters(struct super_block *sb, struct chain_t *p_chain) --{ -- int i, count = 0; -- u32 clu; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- if ((p_chain->dir == CLUSTER_32(0)) || (p_chain->dir == CLUSTER_32(~0))) -- return 0; -- -- clu = p_chain->dir; -- -- if (p_chain->flags == 0x03) { -- count = p_chain->size; -- } else { -- for (i = 2; i < p_fs->num_clusters; i++) { -- count++; -- if (exfat_fat_read(sb, clu, &clu) != 0) -- return 0; -- if (clu == CLUSTER_32(~0)) -- break; -- } -- } -- -- return count; --} -- --s32 exfat_count_used_clusters(struct super_block *sb) --{ -- int i, map_i, map_b, count = 0; -- u8 k; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- -- map_i = 0; -- map_b = 0; -- -- for (i = 2; i < p_fs->num_clusters; i += 8) { -- k = *(((u8 *)p_fs->vol_amap[map_i]->b_data) + map_b); -- count += used_bit[k]; -- -- if ((++map_b) >= p_bd->sector_size) { -- map_i++; -- map_b = 0; -- } -- } -- -- return count; --} -- --void exfat_chain_cont_cluster(struct super_block *sb, u32 chain, s32 len) --{ -- if (len == 0) -- return; -- -- while (len > 1) { -- if (exfat_fat_write(sb, chain, chain + 1) < 0) -- break; -- chain++; -- len--; -- } -- exfat_fat_write(sb, chain, CLUSTER_32(~0)); --} -- --/* -- * Allocation Bitmap Management Functions -- */ -- --s32 load_alloc_bitmap(struct super_block *sb) --{ -- int i, j, ret; -- u32 map_size; -- u32 type; -- sector_t sector; -- struct chain_t clu; -- struct bmap_dentry_t *ep; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- -- clu.dir = p_fs->root_dir; -- clu.flags = 0x01; -- -- while (clu.dir != CLUSTER_32(~0)) { -- if (p_fs->dev_ejected) -- break; -- -- for (i = 0; i < p_fs->dentries_per_clu; i++) { -- ep = (struct bmap_dentry_t *)get_entry_in_dir(sb, &clu, -- i, NULL); -- if (!ep) -- return -ENOENT; -- -- type = exfat_get_entry_type((struct dentry_t *)ep); -- -- if (type == TYPE_UNUSED) -- break; -- if (type != TYPE_BITMAP) -- continue; -- -- if (ep->flags == 0x0) { -- p_fs->map_clu = GET32_A(ep->start_clu); -- map_size = (u32)GET64_A(ep->size); -- -- p_fs->map_sectors = ((map_size - 1) >> p_bd->sector_size_bits) + 1; -- -- p_fs->vol_amap = kmalloc_array(p_fs->map_sectors, -- sizeof(struct buffer_head *), -- GFP_KERNEL); -- if (!p_fs->vol_amap) -- return -ENOMEM; -- -- sector = START_SECTOR(p_fs->map_clu); -- -- for (j = 0; j < p_fs->map_sectors; j++) { -- p_fs->vol_amap[j] = NULL; -- ret = sector_read(sb, sector + j, &p_fs->vol_amap[j], 1); -- if (ret != 0) { -- /* release all buffers and free vol_amap */ -- i = 0; -- while (i < j) -- brelse(p_fs->vol_amap[i++]); -- -- kfree(p_fs->vol_amap); -- p_fs->vol_amap = NULL; -- return ret; -- } -- } -- -- p_fs->pbr_bh = NULL; -- return 0; -- } -- } -- -- if (exfat_fat_read(sb, clu.dir, &clu.dir) != 0) -- return -EIO; -- } -- -- return -EFSCORRUPTED; --} -- --void free_alloc_bitmap(struct super_block *sb) --{ -- int i; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- brelse(p_fs->pbr_bh); -- -- for (i = 0; i < p_fs->map_sectors; i++) -- __brelse(p_fs->vol_amap[i]); -- -- kfree(p_fs->vol_amap); -- p_fs->vol_amap = NULL; --} -- --void sync_alloc_bitmap(struct super_block *sb) --{ -- int i; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- if (!p_fs->vol_amap) -- return; -- -- for (i = 0; i < p_fs->map_sectors; i++) -- sync_dirty_buffer(p_fs->vol_amap[i]); --} -- --/* -- * Upcase table Management Functions -- */ --static s32 __load_upcase_table(struct super_block *sb, sector_t sector, -- u32 num_sectors, u32 utbl_checksum) --{ -- int i, ret = -EINVAL; -- u32 j; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- struct buffer_head *tmp_bh = NULL; -- sector_t end_sector = num_sectors + sector; -- -- bool skip = false; -- u32 index = 0; -- u16 uni = 0; -- u16 **upcase_table; -- -- u32 checksum = 0; -- -- upcase_table = kmalloc_array(UTBL_COL_COUNT, sizeof(u16 *), GFP_KERNEL); -- p_fs->vol_utbl = upcase_table; -- if (!upcase_table) -- return -ENOMEM; -- memset(upcase_table, 0, UTBL_COL_COUNT * sizeof(u16 *)); -- -- while (sector < end_sector) { -- ret = sector_read(sb, sector, &tmp_bh, 1); -- if (ret != 0) { -- pr_debug("sector read (0x%llX)fail\n", -- (unsigned long long)sector); -- goto error; -- } -- sector++; -- -- for (i = 0; i < p_bd->sector_size && index <= 0xFFFF; i += 2) { -- uni = GET16(((u8 *)tmp_bh->b_data) + i); -- -- checksum = ((checksum & 1) ? 0x80000000 : 0) + -- (checksum >> 1) + *(((u8 *)tmp_bh->b_data) + -- i); -- checksum = ((checksum & 1) ? 0x80000000 : 0) + -- (checksum >> 1) + *(((u8 *)tmp_bh->b_data) + -- (i + 1)); -- -- if (skip) { -- pr_debug("skip from 0x%X ", index); -- index += uni; -- pr_debug("to 0x%X (amount of 0x%X)\n", -- index, uni); -- skip = false; -- } else if (uni == index) { -- index++; -- } else if (uni == 0xFFFF) { -- skip = true; -- } else { /* uni != index , uni != 0xFFFF */ -- u16 col_index = get_col_index(index); -- -- if (!upcase_table[col_index]) { -- pr_debug("alloc = 0x%X\n", col_index); -- upcase_table[col_index] = kmalloc_array(UTBL_ROW_COUNT, -- sizeof(u16), GFP_KERNEL); -- if (!upcase_table[col_index]) { -- ret = -ENOMEM; -- goto error; -- } -- -- for (j = 0; j < UTBL_ROW_COUNT; j++) -- upcase_table[col_index][j] = (col_index << LOW_INDEX_BIT) | j; -- } -- -- upcase_table[col_index][get_row_index(index)] = uni; -- index++; -- } -- } -- } -- if (index >= 0xFFFF && utbl_checksum == checksum) { -- if (tmp_bh) -- brelse(tmp_bh); -- return 0; -- } -- ret = -EINVAL; --error: -- if (tmp_bh) -- brelse(tmp_bh); -- free_upcase_table(sb); -- return ret; --} -- --static s32 __load_default_upcase_table(struct super_block *sb) --{ -- int i, ret = -EINVAL; -- u32 j; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- bool skip = false; -- u32 index = 0; -- u16 uni = 0; -- u16 **upcase_table; -- -- upcase_table = kmalloc_array(UTBL_COL_COUNT, sizeof(u16 *), GFP_KERNEL); -- p_fs->vol_utbl = upcase_table; -- if (!upcase_table) -- return -ENOMEM; -- memset(upcase_table, 0, UTBL_COL_COUNT * sizeof(u16 *)); -- -- for (i = 0; index <= 0xFFFF && i < NUM_UPCASE * 2; i += 2) { -- uni = GET16(uni_upcase + i); -- if (skip) { -- pr_debug("skip from 0x%X ", index); -- index += uni; -- pr_debug("to 0x%X (amount of 0x%X)\n", index, uni); -- skip = false; -- } else if (uni == index) { -- index++; -- } else if (uni == 0xFFFF) { -- skip = true; -- } else { /* uni != index , uni != 0xFFFF */ -- u16 col_index = get_col_index(index); -- -- if (!upcase_table[col_index]) { -- pr_debug("alloc = 0x%X\n", col_index); -- upcase_table[col_index] = kmalloc_array(UTBL_ROW_COUNT, -- sizeof(u16), -- GFP_KERNEL); -- if (!upcase_table[col_index]) { -- ret = -ENOMEM; -- goto error; -- } -- -- for (j = 0; j < UTBL_ROW_COUNT; j++) -- upcase_table[col_index][j] = (col_index << LOW_INDEX_BIT) | j; -- } -- -- upcase_table[col_index][get_row_index(index)] = uni; -- index++; -- } -- } -- -- if (index >= 0xFFFF) -- return 0; -- --error: -- /* FATAL error: default upcase table has error */ -- free_upcase_table(sb); -- return ret; --} -- --s32 load_upcase_table(struct super_block *sb) --{ -- int i; -- u32 tbl_clu, tbl_size; -- sector_t sector; -- u32 type, num_sectors; -- struct chain_t clu; -- struct case_dentry_t *ep; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- -- clu.dir = p_fs->root_dir; -- clu.flags = 0x01; -- -- if (p_fs->dev_ejected) -- return -EIO; -- -- while (clu.dir != CLUSTER_32(~0)) { -- for (i = 0; i < p_fs->dentries_per_clu; i++) { -- ep = (struct case_dentry_t *)get_entry_in_dir(sb, &clu, -- i, NULL); -- if (!ep) -- return -ENOENT; -- -- type = exfat_get_entry_type((struct dentry_t *)ep); -- -- if (type == TYPE_UNUSED) -- break; -- if (type != TYPE_UPCASE) -- continue; -- -- tbl_clu = GET32_A(ep->start_clu); -- tbl_size = (u32)GET64_A(ep->size); -- -- sector = START_SECTOR(tbl_clu); -- num_sectors = ((tbl_size - 1) >> p_bd->sector_size_bits) + 1; -- if (__load_upcase_table(sb, sector, num_sectors, -- GET32_A(ep->checksum)) != 0) -- break; -- return 0; -- } -- if (exfat_fat_read(sb, clu.dir, &clu.dir) != 0) -- return -EIO; -- } -- /* load default upcase table */ -- return __load_default_upcase_table(sb); --} -- --void free_upcase_table(struct super_block *sb) --{ -- u32 i; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- u16 **upcase_table; -- -- upcase_table = p_fs->vol_utbl; -- for (i = 0; i < UTBL_COL_COUNT; i++) -- kfree(upcase_table[i]); -- -- kfree(p_fs->vol_utbl); -- p_fs->vol_utbl = NULL; --} -- --/* -- * Directory Entry Management Functions -- */ -- --u32 exfat_get_entry_type(struct dentry_t *p_entry) --{ -- struct file_dentry_t *ep = (struct file_dentry_t *)p_entry; -- -- if (ep->type == 0x0) { -- return TYPE_UNUSED; -- } else if (ep->type < 0x80) { -- return TYPE_DELETED; -- } else if (ep->type == 0x80) { -- return TYPE_INVALID; -- } else if (ep->type < 0xA0) { -- if (ep->type == 0x81) { -- return TYPE_BITMAP; -- } else if (ep->type == 0x82) { -- return TYPE_UPCASE; -- } else if (ep->type == 0x83) { -- return TYPE_VOLUME; -- } else if (ep->type == 0x85) { -- if (GET16_A(ep->attr) & ATTR_SUBDIR) -- return TYPE_DIR; -- else -- return TYPE_FILE; -- } -- return TYPE_CRITICAL_PRI; -- } else if (ep->type < 0xC0) { -- if (ep->type == 0xA0) -- return TYPE_GUID; -- else if (ep->type == 0xA1) -- return TYPE_PADDING; -- else if (ep->type == 0xA2) -- return TYPE_ACLTAB; -- return TYPE_BENIGN_PRI; -- } else if (ep->type < 0xE0) { -- if (ep->type == 0xC0) -- return TYPE_STREAM; -- else if (ep->type == 0xC1) -- return TYPE_EXTEND; -- else if (ep->type == 0xC2) -- return TYPE_ACL; -- return TYPE_CRITICAL_SEC; -- } -- -- return TYPE_BENIGN_SEC; --} -- --static void exfat_set_entry_type(struct dentry_t *p_entry, u32 type) --{ -- struct file_dentry_t *ep = (struct file_dentry_t *)p_entry; -- -- if (type == TYPE_UNUSED) { -- ep->type = 0x0; -- } else if (type == TYPE_DELETED) { -- ep->type &= ~0x80; -- } else if (type == TYPE_STREAM) { -- ep->type = 0xC0; -- } else if (type == TYPE_EXTEND) { -- ep->type = 0xC1; -- } else if (type == TYPE_BITMAP) { -- ep->type = 0x81; -- } else if (type == TYPE_UPCASE) { -- ep->type = 0x82; -- } else if (type == TYPE_VOLUME) { -- ep->type = 0x83; -- } else if (type == TYPE_DIR) { -- ep->type = 0x85; -- SET16_A(ep->attr, ATTR_SUBDIR); -- } else if (type == TYPE_FILE) { -- ep->type = 0x85; -- SET16_A(ep->attr, ATTR_ARCHIVE); -- } else if (type == TYPE_SYMLINK) { -- ep->type = 0x85; -- SET16_A(ep->attr, ATTR_ARCHIVE | ATTR_SYMLINK); -- } --} -- --u32 exfat_get_entry_attr(struct dentry_t *p_entry) --{ -- struct file_dentry_t *ep = (struct file_dentry_t *)p_entry; -- -- return (u32)GET16_A(ep->attr); --} -- --void exfat_set_entry_attr(struct dentry_t *p_entry, u32 attr) --{ -- struct file_dentry_t *ep = (struct file_dentry_t *)p_entry; -- -- SET16_A(ep->attr, (u16)attr); --} -- --u8 exfat_get_entry_flag(struct dentry_t *p_entry) --{ -- struct strm_dentry_t *ep = (struct strm_dentry_t *)p_entry; -- -- return ep->flags; --} -- --void exfat_set_entry_flag(struct dentry_t *p_entry, u8 flags) --{ -- struct strm_dentry_t *ep = (struct strm_dentry_t *)p_entry; -- -- ep->flags = flags; --} -- --u32 exfat_get_entry_clu0(struct dentry_t *p_entry) --{ -- struct strm_dentry_t *ep = (struct strm_dentry_t *)p_entry; -- -- return GET32_A(ep->start_clu); --} -- --void exfat_set_entry_clu0(struct dentry_t *p_entry, u32 start_clu) --{ -- struct strm_dentry_t *ep = (struct strm_dentry_t *)p_entry; -- -- SET32_A(ep->start_clu, start_clu); --} -- --u64 exfat_get_entry_size(struct dentry_t *p_entry) --{ -- struct strm_dentry_t *ep = (struct strm_dentry_t *)p_entry; -- -- return GET64_A(ep->valid_size); --} -- --void exfat_set_entry_size(struct dentry_t *p_entry, u64 size) --{ -- struct strm_dentry_t *ep = (struct strm_dentry_t *)p_entry; -- -- SET64_A(ep->valid_size, size); -- SET64_A(ep->size, size); --} -- --void exfat_get_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp, -- u8 mode) --{ -- u16 t = 0x00, d = 0x21; -- struct file_dentry_t *ep = (struct file_dentry_t *)p_entry; -- -- switch (mode) { -- case TM_CREATE: -- t = GET16_A(ep->create_time); -- d = GET16_A(ep->create_date); -- break; -- case TM_MODIFY: -- t = GET16_A(ep->modify_time); -- d = GET16_A(ep->modify_date); -- break; -- case TM_ACCESS: -- t = GET16_A(ep->access_time); -- d = GET16_A(ep->access_date); -- break; -- } -- -- tp->sec = (t & 0x001F) << 1; -- tp->min = (t >> 5) & 0x003F; -- tp->hour = (t >> 11); -- tp->day = (d & 0x001F); -- tp->mon = (d >> 5) & 0x000F; -- tp->year = (d >> 9); --} -- --void exfat_set_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp, -- u8 mode) --{ -- u16 t, d; -- struct file_dentry_t *ep = (struct file_dentry_t *)p_entry; -- -- t = (tp->hour << 11) | (tp->min << 5) | (tp->sec >> 1); -- d = (tp->year << 9) | (tp->mon << 5) | tp->day; -- -- switch (mode) { -- case TM_CREATE: -- SET16_A(ep->create_time, t); -- SET16_A(ep->create_date, d); -- break; -- case TM_MODIFY: -- SET16_A(ep->modify_time, t); -- SET16_A(ep->modify_date, d); -- break; -- case TM_ACCESS: -- SET16_A(ep->access_time, t); -- SET16_A(ep->access_date, d); -- break; -- } --} -- --static void init_file_entry(struct file_dentry_t *ep, u32 type) --{ -- struct timestamp_t tm, *tp; -- -- exfat_set_entry_type((struct dentry_t *)ep, type); -- -- tp = tm_current(&tm); -- exfat_set_entry_time((struct dentry_t *)ep, tp, TM_CREATE); -- exfat_set_entry_time((struct dentry_t *)ep, tp, TM_MODIFY); -- exfat_set_entry_time((struct dentry_t *)ep, tp, TM_ACCESS); -- ep->create_time_ms = 0; -- ep->modify_time_ms = 0; -- ep->access_time_ms = 0; --} -- --static void init_strm_entry(struct strm_dentry_t *ep, u8 flags, u32 start_clu, u64 size) --{ -- exfat_set_entry_type((struct dentry_t *)ep, TYPE_STREAM); -- ep->flags = flags; -- SET32_A(ep->start_clu, start_clu); -- SET64_A(ep->valid_size, size); -- SET64_A(ep->size, size); --} -- --static void init_name_entry(struct name_dentry_t *ep, u16 *uniname) --{ -- int i; -- -- exfat_set_entry_type((struct dentry_t *)ep, TYPE_EXTEND); -- ep->flags = 0x0; -- -- for (i = 0; i < 30; i++, i++) { -- SET16_A(ep->unicode_0_14 + i, *uniname); -- if (*uniname == 0x0) -- break; -- uniname++; -- } --} -- --static s32 exfat_init_dir_entry(struct super_block *sb, struct chain_t *p_dir, -- s32 entry, u32 type, u32 start_clu, u64 size) --{ -- sector_t sector; -- u8 flags; -- struct file_dentry_t *file_ep; -- struct strm_dentry_t *strm_ep; -- -- flags = (type == TYPE_FILE) ? 0x01 : 0x03; -- -- /* we cannot use get_entry_set_in_dir here because file ep is not initialized yet */ -- file_ep = (struct file_dentry_t *)get_entry_in_dir(sb, p_dir, entry, -- §or); -- if (!file_ep) -- return -ENOENT; -- -- strm_ep = (struct strm_dentry_t *)get_entry_in_dir(sb, p_dir, entry + 1, -- §or); -- if (!strm_ep) -- return -ENOENT; -- -- init_file_entry(file_ep, type); -- exfat_buf_modify(sb, sector); -- -- init_strm_entry(strm_ep, flags, start_clu, size); -- exfat_buf_modify(sb, sector); -- -- return 0; --} -- --static s32 exfat_init_ext_entry(struct super_block *sb, struct chain_t *p_dir, -- s32 entry, s32 num_entries, -- struct uni_name_t *p_uniname, -- struct dos_name_t *p_dosname) --{ -- int i; -- sector_t sector; -- u16 *uniname = p_uniname->name; -- struct file_dentry_t *file_ep; -- struct strm_dentry_t *strm_ep; -- struct name_dentry_t *name_ep; -- -- file_ep = (struct file_dentry_t *)get_entry_in_dir(sb, p_dir, entry, -- §or); -- if (!file_ep) -- return -ENOENT; -- -- file_ep->num_ext = (u8)(num_entries - 1); -- exfat_buf_modify(sb, sector); -- -- strm_ep = (struct strm_dentry_t *)get_entry_in_dir(sb, p_dir, entry + 1, -- §or); -- if (!strm_ep) -- return -ENOENT; -- -- strm_ep->name_len = p_uniname->name_len; -- SET16_A(strm_ep->name_hash, p_uniname->name_hash); -- exfat_buf_modify(sb, sector); -- -- for (i = 2; i < num_entries; i++) { -- name_ep = (struct name_dentry_t *)get_entry_in_dir(sb, p_dir, -- entry + i, -- §or); -- if (!name_ep) -- return -ENOENT; -- -- init_name_entry(name_ep, uniname); -- exfat_buf_modify(sb, sector); -- uniname += 15; -- } -- -- update_dir_checksum(sb, p_dir, entry); -- -- return 0; --} -- --void exfat_delete_dir_entry(struct super_block *sb, struct chain_t *p_dir, -- s32 entry, s32 order, s32 num_entries) --{ -- int i; -- sector_t sector; -- struct dentry_t *ep; -- -- for (i = order; i < num_entries; i++) { -- ep = get_entry_in_dir(sb, p_dir, entry + i, §or); -- if (!ep) -- return; -- -- exfat_set_entry_type(ep, TYPE_DELETED); -- exfat_buf_modify(sb, sector); -- } --} -- --void update_dir_checksum(struct super_block *sb, struct chain_t *p_dir, -- s32 entry) --{ -- int i, num_entries; -- sector_t sector; -- u16 chksum; -- struct file_dentry_t *file_ep; -- struct dentry_t *ep; -- -- file_ep = (struct file_dentry_t *)get_entry_in_dir(sb, p_dir, entry, -- §or); -- if (!file_ep) -- return; -- -- exfat_buf_lock(sb, sector); -- -- num_entries = (s32)file_ep->num_ext + 1; -- chksum = calc_checksum_2byte((void *)file_ep, DENTRY_SIZE, 0, -- CS_DIR_ENTRY); -- -- for (i = 1; i < num_entries; i++) { -- ep = get_entry_in_dir(sb, p_dir, entry + i, NULL); -- if (!ep) { -- exfat_buf_unlock(sb, sector); -- return; -- } -- -- chksum = calc_checksum_2byte((void *)ep, DENTRY_SIZE, chksum, -- CS_DEFAULT); -- } -- -- SET16_A(file_ep->checksum, chksum); -- exfat_buf_modify(sb, sector); -- exfat_buf_unlock(sb, sector); --} -- --static s32 __write_partial_entries_in_entry_set(struct super_block *sb, -- struct entry_set_cache_t *es, -- sector_t sec, s32 off, u32 count) --{ -- s32 num_entries, buf_off = (off - es->offset); -- u32 remaining_byte_in_sector, copy_entries; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- u32 clu; -- u8 *buf, *esbuf = (u8 *)&es->__buf; -- -- pr_debug("%s entered es %p sec %llu off %d count %d\n", -- __func__, es, (unsigned long long)sec, off, count); -- num_entries = count; -- -- while (num_entries) { -- /* white per sector base */ -- remaining_byte_in_sector = (1 << p_bd->sector_size_bits) - off; -- copy_entries = min_t(s32, -- remaining_byte_in_sector >> DENTRY_SIZE_BITS, -- num_entries); -- buf = exfat_buf_getblk(sb, sec); -- if (!buf) -- goto err_out; -- pr_debug("es->buf %p buf_off %u\n", esbuf, buf_off); -- pr_debug("copying %d entries from %p to sector %llu\n", -- copy_entries, (esbuf + buf_off), -- (unsigned long long)sec); -- memcpy(buf + off, esbuf + buf_off, -- copy_entries << DENTRY_SIZE_BITS); -- exfat_buf_modify(sb, sec); -- num_entries -= copy_entries; -- -- if (num_entries) { -- /* get next sector */ -- if (IS_LAST_SECTOR_IN_CLUSTER(sec)) { -- clu = GET_CLUSTER_FROM_SECTOR(sec); -- if (es->alloc_flag == 0x03) { -- clu++; -- } else { -- if (exfat_fat_read(sb, clu, &clu) == -1) -- goto err_out; -- } -- sec = START_SECTOR(clu); -- } else { -- sec++; -- } -- off = 0; -- buf_off += copy_entries << DENTRY_SIZE_BITS; -- } -- } -- -- pr_debug("%s exited successfully\n", __func__); -- return 0; --err_out: -- pr_debug("%s failed\n", __func__); -- return -EINVAL; --} -- --/* write back all entries in entry set */ --static s32 write_whole_entry_set(struct super_block *sb, struct entry_set_cache_t *es) --{ -- return __write_partial_entries_in_entry_set(sb, es, es->sector, -- es->offset, -- es->num_entries); --} -- --void update_dir_checksum_with_entry_set(struct super_block *sb, -- struct entry_set_cache_t *es) --{ -- struct dentry_t *ep; -- u16 chksum = 0; -- s32 chksum_type = CS_DIR_ENTRY, i; -- -- ep = (struct dentry_t *)&es->__buf; -- for (i = 0; i < es->num_entries; i++) { -- pr_debug("%s ep %p\n", __func__, ep); -- chksum = calc_checksum_2byte((void *)ep, DENTRY_SIZE, chksum, -- chksum_type); -- ep++; -- chksum_type = CS_DEFAULT; -- } -- -- ep = (struct dentry_t *)&es->__buf; -- SET16_A(((struct file_dentry_t *)ep)->checksum, chksum); -- write_whole_entry_set(sb, es); --} -- --static s32 _walk_fat_chain(struct super_block *sb, struct chain_t *p_dir, -- s32 byte_offset, u32 *clu) --{ -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- s32 clu_offset; -- u32 cur_clu; -- -- clu_offset = byte_offset >> p_fs->cluster_size_bits; -- cur_clu = p_dir->dir; -- -- if (p_dir->flags == 0x03) { -- cur_clu += clu_offset; -- } else { -- while (clu_offset > 0) { -- if (exfat_fat_read(sb, cur_clu, &cur_clu) == -1) -- return -EIO; -- clu_offset--; -- } -- } -- -- if (clu) -- *clu = cur_clu; -- return 0; --} -- --static s32 find_location(struct super_block *sb, struct chain_t *p_dir, s32 entry, -- sector_t *sector, s32 *offset) --{ -- s32 off, ret; -- u32 clu = 0; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- -- off = entry << DENTRY_SIZE_BITS; -- -- if (p_dir->dir == CLUSTER_32(0)) { /* FAT16 root_dir */ -- *offset = off & p_bd->sector_size_mask; -- *sector = off >> p_bd->sector_size_bits; -- *sector += p_fs->root_start_sector; -- } else { -- ret = _walk_fat_chain(sb, p_dir, off, &clu); -- if (ret != 0) -- return ret; -- -- /* byte offset in cluster */ -- off &= p_fs->cluster_size - 1; -- -- /* byte offset in sector */ -- *offset = off & p_bd->sector_size_mask; -- -- /* sector offset in cluster */ -- *sector = off >> p_bd->sector_size_bits; -- *sector += START_SECTOR(clu); -- } -- return 0; --} -- --struct dentry_t *get_entry_in_dir(struct super_block *sb, struct chain_t *p_dir, -- s32 entry, sector_t *sector) --{ -- s32 off; -- sector_t sec; -- u8 *buf; -- -- if (find_location(sb, p_dir, entry, &sec, &off) != 0) -- return NULL; -- -- buf = exfat_buf_getblk(sb, sec); -- -- if (!buf) -- return NULL; -- -- if (sector) -- *sector = sec; -- return (struct dentry_t *)(buf + off); --} -- --/* returns a set of dentries for a file or dir. -- * Note that this is a copy (dump) of dentries so that user should call write_entry_set() -- * to apply changes made in this entry set to the real device. -- * in: -- * sb+p_dir+entry: indicates a file/dir -- * type: specifies how many dentries should be included. -- * out: -- * file_ep: will point the first dentry(= file dentry) on success -- * return: -- * pointer of entry set on success, -- * NULL on failure. -- */ -- --#define ES_MODE_STARTED 0 --#define ES_MODE_GET_FILE_ENTRY 1 --#define ES_MODE_GET_STRM_ENTRY 2 --#define ES_MODE_GET_NAME_ENTRY 3 --#define ES_MODE_GET_CRITICAL_SEC_ENTRY 4 --struct entry_set_cache_t *get_entry_set_in_dir(struct super_block *sb, -- struct chain_t *p_dir, s32 entry, -- u32 type, -- struct dentry_t **file_ep) --{ -- s32 off, ret, byte_offset; -- u32 clu = 0; -- sector_t sec; -- u32 entry_type; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- struct entry_set_cache_t *es = NULL; -- struct dentry_t *ep, *pos; -- u8 *buf; -- u8 num_entries; -- s32 mode = ES_MODE_STARTED; -- size_t bufsize; -- -- pr_debug("%s entered p_dir dir %u flags %x size %d\n", -- __func__, p_dir->dir, p_dir->flags, p_dir->size); -- -- byte_offset = entry << DENTRY_SIZE_BITS; -- ret = _walk_fat_chain(sb, p_dir, byte_offset, &clu); -- if (ret != 0) -- return NULL; -- -- /* byte offset in cluster */ -- byte_offset &= p_fs->cluster_size - 1; -- -- /* byte offset in sector */ -- off = byte_offset & p_bd->sector_size_mask; -- -- /* sector offset in cluster */ -- sec = byte_offset >> p_bd->sector_size_bits; -- sec += START_SECTOR(clu); -- -- buf = exfat_buf_getblk(sb, sec); -- if (!buf) -- goto err_out; -- -- ep = (struct dentry_t *)(buf + off); -- entry_type = exfat_get_entry_type(ep); -- -- if ((entry_type != TYPE_FILE) && (entry_type != TYPE_DIR)) -- goto err_out; -- -- if (type == ES_ALL_ENTRIES) -- num_entries = ((struct file_dentry_t *)ep)->num_ext + 1; -- else -- num_entries = type; -- -- bufsize = offsetof(struct entry_set_cache_t, __buf) + (num_entries) * -- sizeof(struct dentry_t); -- pr_debug("%s: trying to kmalloc %zx bytes for %d entries\n", __func__, -- bufsize, num_entries); -- es = kmalloc(bufsize, GFP_KERNEL); -- if (!es) -- goto err_out; -- -- es->num_entries = num_entries; -- es->sector = sec; -- es->offset = off; -- es->alloc_flag = p_dir->flags; -- -- pos = (struct dentry_t *)&es->__buf; -- -- while (num_entries) { -- /* -- * instead of copying whole sector, we will check every entry. -- * this will provide minimum stablity and consistency. -- */ -- entry_type = exfat_get_entry_type(ep); -- -- if ((entry_type == TYPE_UNUSED) || (entry_type == TYPE_DELETED)) -- goto err_out; -- -- switch (mode) { -- case ES_MODE_STARTED: -- if ((entry_type == TYPE_FILE) || (entry_type == TYPE_DIR)) -- mode = ES_MODE_GET_FILE_ENTRY; -- else -- goto err_out; -- break; -- case ES_MODE_GET_FILE_ENTRY: -- if (entry_type == TYPE_STREAM) -- mode = ES_MODE_GET_STRM_ENTRY; -- else -- goto err_out; -- break; -- case ES_MODE_GET_STRM_ENTRY: -- if (entry_type == TYPE_EXTEND) -- mode = ES_MODE_GET_NAME_ENTRY; -- else -- goto err_out; -- break; -- case ES_MODE_GET_NAME_ENTRY: -- if (entry_type == TYPE_EXTEND) -- break; -- else if (entry_type == TYPE_STREAM) -- goto err_out; -- else if (entry_type & TYPE_CRITICAL_SEC) -- mode = ES_MODE_GET_CRITICAL_SEC_ENTRY; -- else -- goto err_out; -- break; -- case ES_MODE_GET_CRITICAL_SEC_ENTRY: -- if ((entry_type == TYPE_EXTEND) || -- (entry_type == TYPE_STREAM)) -- goto err_out; -- else if ((entry_type & TYPE_CRITICAL_SEC) != -- TYPE_CRITICAL_SEC) -- goto err_out; -- break; -- } -- -- memcpy(pos, ep, sizeof(struct dentry_t)); -- -- if (--num_entries == 0) -- break; -- -- if (((off + DENTRY_SIZE) & p_bd->sector_size_mask) < -- (off & p_bd->sector_size_mask)) { -- /* get the next sector */ -- if (IS_LAST_SECTOR_IN_CLUSTER(sec)) { -- if (es->alloc_flag == 0x03) { -- clu++; -- } else { -- if (exfat_fat_read(sb, clu, &clu) == -1) -- goto err_out; -- } -- sec = START_SECTOR(clu); -- } else { -- sec++; -- } -- buf = exfat_buf_getblk(sb, sec); -- if (!buf) -- goto err_out; -- off = 0; -- ep = (struct dentry_t *)(buf); -- } else { -- ep++; -- off += DENTRY_SIZE; -- } -- pos++; -- } -- -- if (file_ep) -- *file_ep = (struct dentry_t *)&es->__buf; -- -- pr_debug("%s exiting es %p sec %llu offset %d flags %d, num_entries %u buf ptr %p\n", -- __func__, es, (unsigned long long)es->sector, es->offset, -- es->alloc_flag, es->num_entries, &es->__buf); -- return es; --err_out: -- pr_debug("%s exited NULL (es %p)\n", __func__, es); -- kfree(es); -- return NULL; --} -- --void release_entry_set(struct entry_set_cache_t *es) --{ -- pr_debug("%s es=%p\n", __func__, es); -- kfree(es); --} -- --/* search EMPTY CONTINUOUS "num_entries" entries */ --static s32 search_deleted_or_unused_entry(struct super_block *sb, -- struct chain_t *p_dir, -- s32 num_entries) --{ -- int i, dentry, num_empty = 0; -- s32 dentries_per_clu; -- u32 type; -- struct chain_t clu; -- struct dentry_t *ep; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- if (p_dir->dir == CLUSTER_32(0)) /* FAT16 root_dir */ -- dentries_per_clu = p_fs->dentries_in_root; -- else -- dentries_per_clu = p_fs->dentries_per_clu; -- -- if (p_fs->hint_uentry.dir == p_dir->dir) { -- if (p_fs->hint_uentry.entry == -1) -- return -1; -- -- clu.dir = p_fs->hint_uentry.clu.dir; -- clu.size = p_fs->hint_uentry.clu.size; -- clu.flags = p_fs->hint_uentry.clu.flags; -- -- dentry = p_fs->hint_uentry.entry; -- } else { -- p_fs->hint_uentry.entry = -1; -- -- clu.dir = p_dir->dir; -- clu.size = p_dir->size; -- clu.flags = p_dir->flags; -- -- dentry = 0; -- } -- -- while (clu.dir != CLUSTER_32(~0)) { -- if (p_fs->dev_ejected) -- break; -- -- if (p_dir->dir == CLUSTER_32(0)) /* FAT16 root_dir */ -- i = dentry % dentries_per_clu; -- else -- i = dentry & (dentries_per_clu - 1); -- -- for (; i < dentries_per_clu; i++, dentry++) { -- ep = get_entry_in_dir(sb, &clu, i, NULL); -- if (!ep) -- return -1; -- -- type = exfat_get_entry_type(ep); -- -- if (type == TYPE_UNUSED) { -- num_empty++; -- if (p_fs->hint_uentry.entry == -1) { -- p_fs->hint_uentry.dir = p_dir->dir; -- p_fs->hint_uentry.entry = dentry; -- -- p_fs->hint_uentry.clu.dir = clu.dir; -- p_fs->hint_uentry.clu.size = clu.size; -- p_fs->hint_uentry.clu.flags = clu.flags; -- } -- } else if (type == TYPE_DELETED) { -- num_empty++; -- } else { -- num_empty = 0; -- } -- -- if (num_empty >= num_entries) { -- p_fs->hint_uentry.dir = CLUSTER_32(~0); -- p_fs->hint_uentry.entry = -1; -- -- if (p_fs->vol_type == EXFAT) -- return dentry - (num_entries - 1); -- else -- return dentry; -- } -- } -- -- if (p_dir->dir == CLUSTER_32(0)) -- break; /* FAT16 root_dir */ -- -- if (clu.flags == 0x03) { -- if ((--clu.size) > 0) -- clu.dir++; -- else -- clu.dir = CLUSTER_32(~0); -- } else { -- if (exfat_fat_read(sb, clu.dir, &clu.dir) != 0) -- return -1; -- } -- } -- -- return -1; --} -- --static s32 find_empty_entry(struct inode *inode, struct chain_t *p_dir, s32 num_entries) --{ -- s32 ret, dentry; -- u32 last_clu; -- sector_t sector; -- u64 size = 0; -- struct chain_t clu; -- struct dentry_t *ep = NULL; -- struct super_block *sb = inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct file_id_t *fid = &(EXFAT_I(inode)->fid); -- -- if (p_dir->dir == CLUSTER_32(0)) /* FAT16 root_dir */ -- return search_deleted_or_unused_entry(sb, p_dir, num_entries); -- -- while ((dentry = search_deleted_or_unused_entry(sb, p_dir, num_entries)) < 0) { -- if (p_fs->dev_ejected) -- break; -- -- if (p_dir->dir != p_fs->root_dir) -- size = i_size_read(inode); -- -- last_clu = find_last_cluster(sb, p_dir); -- clu.dir = last_clu + 1; -- clu.size = 0; -- clu.flags = p_dir->flags; -- -- /* (1) allocate a cluster */ -- ret = exfat_alloc_cluster(sb, 1, &clu); -- if (ret < 1) -- return -EIO; -- -- if (clear_cluster(sb, clu.dir) != 0) -- return -EIO; -- -- /* (2) append to the FAT chain */ -- if (clu.flags != p_dir->flags) { -- exfat_chain_cont_cluster(sb, p_dir->dir, p_dir->size); -- p_dir->flags = 0x01; -- p_fs->hint_uentry.clu.flags = 0x01; -- } -- if (clu.flags == 0x01) -- if (exfat_fat_write(sb, last_clu, clu.dir) < 0) -- return -EIO; -- -- if (p_fs->hint_uentry.entry == -1) { -- p_fs->hint_uentry.dir = p_dir->dir; -- p_fs->hint_uentry.entry = p_dir->size << (p_fs->cluster_size_bits - DENTRY_SIZE_BITS); -- -- p_fs->hint_uentry.clu.dir = clu.dir; -- p_fs->hint_uentry.clu.size = 0; -- p_fs->hint_uentry.clu.flags = clu.flags; -- } -- p_fs->hint_uentry.clu.size++; -- p_dir->size++; -- -- /* (3) update the directory entry */ -- if (p_dir->dir != p_fs->root_dir) { -- size += p_fs->cluster_size; -- -- ep = get_entry_in_dir(sb, &fid->dir, -- fid->entry + 1, §or); -- if (!ep) -- return -ENOENT; -- exfat_set_entry_size(ep, size); -- exfat_set_entry_flag(ep, p_dir->flags); -- exfat_buf_modify(sb, sector); -- -- update_dir_checksum(sb, &fid->dir, -- fid->entry); -- } -- -- i_size_write(inode, i_size_read(inode) + p_fs->cluster_size); -- EXFAT_I(inode)->mmu_private += p_fs->cluster_size; -- EXFAT_I(inode)->fid.size += p_fs->cluster_size; -- EXFAT_I(inode)->fid.flags = p_dir->flags; -- inode->i_blocks += 1 << (p_fs->cluster_size_bits - 9); -- } -- -- return dentry; --} -- --static s32 extract_uni_name_from_name_entry(struct name_dentry_t *ep, u16 *uniname, -- s32 order) --{ -- int i, len = 0; -- -- for (i = 0; i < 30; i += 2) { -- *uniname = GET16_A(ep->unicode_0_14 + i); -- if (*uniname == 0x0) -- return len; -- uniname++; -- len++; -- } -- -- *uniname = 0x0; -- return len; --} -- --/* return values of exfat_find_dir_entry() -- * >= 0 : return dir entiry position with the name in dir -- * -1 : (root dir, ".") it is the root dir itself -- * -2 : entry with the name does not exist -- */ --s32 exfat_find_dir_entry(struct super_block *sb, struct chain_t *p_dir, -- struct uni_name_t *p_uniname, s32 num_entries, -- struct dos_name_t *p_dosname, u32 type) --{ -- int i = 0, dentry = 0, num_ext_entries = 0, len, step; -- s32 order = 0; -- bool is_feasible_entry = false; -- s32 dentries_per_clu, num_empty = 0; -- u32 entry_type; -- u16 entry_uniname[16], *uniname = NULL, unichar; -- struct chain_t clu; -- struct dentry_t *ep; -- struct file_dentry_t *file_ep; -- struct strm_dentry_t *strm_ep; -- struct name_dentry_t *name_ep; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- if (p_dir->dir == p_fs->root_dir) { -- if ((!nls_uniname_cmp(sb, p_uniname->name, -- (u16 *)UNI_CUR_DIR_NAME)) || -- (!nls_uniname_cmp(sb, p_uniname->name, -- (u16 *)UNI_PAR_DIR_NAME))) -- return -1; // special case, root directory itself -- } -- -- if (p_dir->dir == CLUSTER_32(0)) /* FAT16 root_dir */ -- dentries_per_clu = p_fs->dentries_in_root; -- else -- dentries_per_clu = p_fs->dentries_per_clu; -- -- clu.dir = p_dir->dir; -- clu.size = p_dir->size; -- clu.flags = p_dir->flags; -- -- p_fs->hint_uentry.dir = p_dir->dir; -- p_fs->hint_uentry.entry = -1; -- -- while (clu.dir != CLUSTER_32(~0)) { -- if (p_fs->dev_ejected) -- break; -- -- while (i < dentries_per_clu) { -- ep = get_entry_in_dir(sb, &clu, i, NULL); -- if (!ep) -- return -2; -- -- entry_type = exfat_get_entry_type(ep); -- step = 1; -- -- if ((entry_type == TYPE_UNUSED) || (entry_type == TYPE_DELETED)) { -- is_feasible_entry = false; -- -- if (p_fs->hint_uentry.entry == -1) { -- num_empty++; -- -- if (num_empty == 1) { -- p_fs->hint_uentry.clu.dir = clu.dir; -- p_fs->hint_uentry.clu.size = clu.size; -- p_fs->hint_uentry.clu.flags = clu.flags; -- } -- if ((num_empty >= num_entries) || (entry_type == TYPE_UNUSED)) -- p_fs->hint_uentry.entry = dentry - (num_empty - 1); -- } -- -- if (entry_type == TYPE_UNUSED) -- return -2; -- } else { -- num_empty = 0; -- -- if ((entry_type == TYPE_FILE) || (entry_type == TYPE_DIR)) { -- file_ep = (struct file_dentry_t *)ep; -- if ((type == TYPE_ALL) || (type == entry_type)) { -- num_ext_entries = file_ep->num_ext; -- is_feasible_entry = true; -- } else { -- is_feasible_entry = false; -- step = file_ep->num_ext + 1; -- } -- } else if (entry_type == TYPE_STREAM) { -- if (is_feasible_entry) { -- strm_ep = (struct strm_dentry_t *)ep; -- if (p_uniname->name_hash == GET16_A(strm_ep->name_hash) && -- p_uniname->name_len == strm_ep->name_len) { -- order = 1; -- } else { -- is_feasible_entry = false; -- step = num_ext_entries; -- } -- } -- } else if (entry_type == TYPE_EXTEND) { -- if (is_feasible_entry) { -- name_ep = (struct name_dentry_t *)ep; -- -- if ((++order) == 2) -- uniname = p_uniname->name; -- else -- uniname += 15; -- -- len = extract_uni_name_from_name_entry(name_ep, -- entry_uniname, order); -- -- unichar = *(uniname + len); -- *(uniname + len) = 0x0; -- -- if (nls_uniname_cmp(sb, uniname, entry_uniname)) { -- is_feasible_entry = false; -- step = num_ext_entries - order + 1; -- } else if (order == num_ext_entries) { -- p_fs->hint_uentry.dir = CLUSTER_32(~0); -- p_fs->hint_uentry.entry = -1; -- return dentry - (num_ext_entries); -- } -- -- *(uniname + len) = unichar; -- } -- } else { -- is_feasible_entry = false; -- } -- } -- -- i += step; -- dentry += step; -- } -- -- i -= dentries_per_clu; -- -- if (p_dir->dir == CLUSTER_32(0)) -- break; /* FAT16 root_dir */ -- -- if (clu.flags == 0x03) { -- if ((--clu.size) > 0) -- clu.dir++; -- else -- clu.dir = CLUSTER_32(~0); -- } else { -- if (exfat_fat_read(sb, clu.dir, &clu.dir) != 0) -- return -2; -- } -- } -- -- return -2; --} -- --s32 exfat_count_ext_entries(struct super_block *sb, struct chain_t *p_dir, -- s32 entry, struct dentry_t *p_entry) --{ -- int i, count = 0; -- u32 type; -- struct file_dentry_t *file_ep = (struct file_dentry_t *)p_entry; -- struct dentry_t *ext_ep; -- -- for (i = 0, entry++; i < file_ep->num_ext; i++, entry++) { -- ext_ep = get_entry_in_dir(sb, p_dir, entry, NULL); -- if (!ext_ep) -- return -1; -- -- type = exfat_get_entry_type(ext_ep); -- if ((type == TYPE_EXTEND) || (type == TYPE_STREAM)) -- count++; -- else -- return count; -- } -- -- return count; --} -- --s32 count_dos_name_entries(struct super_block *sb, struct chain_t *p_dir, -- u32 type) --{ -- int i, count = 0; -- s32 dentries_per_clu; -- u32 entry_type; -- struct chain_t clu; -- struct dentry_t *ep; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- if (p_dir->dir == CLUSTER_32(0)) /* FAT16 root_dir */ -- dentries_per_clu = p_fs->dentries_in_root; -- else -- dentries_per_clu = p_fs->dentries_per_clu; -- -- clu.dir = p_dir->dir; -- clu.size = p_dir->size; -- clu.flags = p_dir->flags; -- -- while (clu.dir != CLUSTER_32(~0)) { -- if (p_fs->dev_ejected) -- break; -- -- for (i = 0; i < dentries_per_clu; i++) { -- ep = get_entry_in_dir(sb, &clu, i, NULL); -- if (!ep) -- return -ENOENT; -- -- entry_type = exfat_get_entry_type(ep); -- -- if (entry_type == TYPE_UNUSED) -- return count; -- if (!(type & TYPE_CRITICAL_PRI) && -- !(type & TYPE_BENIGN_PRI)) -- continue; -- -- if ((type == TYPE_ALL) || (type == entry_type)) -- count++; -- } -- -- if (p_dir->dir == CLUSTER_32(0)) -- break; /* FAT16 root_dir */ -- -- if (clu.flags == 0x03) { -- if ((--clu.size) > 0) -- clu.dir++; -- else -- clu.dir = CLUSTER_32(~0); -- } else { -- if (exfat_fat_read(sb, clu.dir, &clu.dir) != 0) -- return -EIO; -- } -- } -- -- return count; --} -- --bool is_dir_empty(struct super_block *sb, struct chain_t *p_dir) --{ -- int i, count = 0; -- s32 dentries_per_clu; -- u32 type; -- struct chain_t clu; -- struct dentry_t *ep; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- if (p_dir->dir == CLUSTER_32(0)) /* FAT16 root_dir */ -- dentries_per_clu = p_fs->dentries_in_root; -- else -- dentries_per_clu = p_fs->dentries_per_clu; -- -- clu.dir = p_dir->dir; -- clu.size = p_dir->size; -- clu.flags = p_dir->flags; -- -- while (clu.dir != CLUSTER_32(~0)) { -- if (p_fs->dev_ejected) -- break; -- -- for (i = 0; i < dentries_per_clu; i++) { -- ep = get_entry_in_dir(sb, &clu, i, NULL); -- if (!ep) -- break; -- -- type = exfat_get_entry_type(ep); -- -- if (type == TYPE_UNUSED) -- return true; -- if ((type != TYPE_FILE) && (type != TYPE_DIR)) -- continue; -- -- if (p_dir->dir == CLUSTER_32(0)) /* FAT16 root_dir */ -- return false; -- -- if (p_fs->vol_type == EXFAT) -- return false; -- if ((p_dir->dir == p_fs->root_dir) || ((++count) > 2)) -- return false; -- } -- -- if (p_dir->dir == CLUSTER_32(0)) -- break; /* FAT16 root_dir */ -- -- if (clu.flags == 0x03) { -- if ((--clu.size) > 0) -- clu.dir++; -- else -- clu.dir = CLUSTER_32(~0); -- } -- if (exfat_fat_read(sb, clu.dir, &clu.dir) != 0) -- break; -- } -- -- return true; --} -- --/* -- * Name Conversion Functions -- */ -- --/* input : dir, uni_name -- * output : num_of_entry, dos_name(format : aaaaaa~1.bbb) -- */ --s32 get_num_entries_and_dos_name(struct super_block *sb, struct chain_t *p_dir, -- struct uni_name_t *p_uniname, s32 *entries, -- struct dos_name_t *p_dosname) --{ -- s32 num_entries; -- -- num_entries = exfat_calc_num_entries(p_uniname); -- if (num_entries == 0) -- return -EINVAL; -- -- *entries = num_entries; -- -- return 0; --} -- --void exfat_get_uni_name_from_ext_entry(struct super_block *sb, -- struct chain_t *p_dir, s32 entry, -- u16 *uniname) --{ -- int i; -- struct dentry_t *ep; -- struct entry_set_cache_t *es; -- -- es = get_entry_set_in_dir(sb, p_dir, entry, ES_ALL_ENTRIES, &ep); -- if (!es || es->num_entries < 3) { -- if (es) -- release_entry_set(es); -- return; -- } -- -- ep += 2; -- -- /* -- * First entry : file entry -- * Second entry : stream-extension entry -- * Third entry : first file-name entry -- * So, the index of first file-name dentry should start from 2. -- */ -- for (i = 2; i < es->num_entries; i++, ep++) { -- if (exfat_get_entry_type(ep) == TYPE_EXTEND) -- extract_uni_name_from_name_entry((struct name_dentry_t *) -- ep, uniname, i); -- else -- goto out; -- uniname += 15; -- } -- --out: -- release_entry_set(es); --} -- --s32 exfat_calc_num_entries(struct uni_name_t *p_uniname) --{ -- s32 len; -- -- len = p_uniname->name_len; -- if (len == 0) -- return 0; -- -- /* 1 file entry + 1 stream entry + name entries */ -- return (len - 1) / 15 + 3; --} -- --u16 calc_checksum_2byte(void *data, s32 len, u16 chksum, s32 type) --{ -- int i; -- u8 *c = (u8 *)data; -- -- switch (type) { -- case CS_DIR_ENTRY: -- for (i = 0; i < len; i++, c++) { -- if ((i == 2) || (i == 3)) -- continue; -- chksum = (((chksum & 1) << 15) | -- ((chksum & 0xFFFE) >> 1)) + (u16)*c; -- } -- break; -- default -- : -- for (i = 0; i < len; i++, c++) -- chksum = (((chksum & 1) << 15) | -- ((chksum & 0xFFFE) >> 1)) + (u16)*c; -- } -- -- return chksum; --} -- --/* -- * Name Resolution Functions -- */ -- --/* return values of resolve_path() -- * > 0 : return the length of the path -- * < 0 : return error -- */ --s32 resolve_path(struct inode *inode, char *path, struct chain_t *p_dir, -- struct uni_name_t *p_uniname) --{ -- bool lossy = false; -- struct super_block *sb = inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct file_id_t *fid = &(EXFAT_I(inode)->fid); -- -- if (strscpy(name_buf, path, sizeof(name_buf)) < 0) -- return -EINVAL; -- -- nls_cstring_to_uniname(sb, p_uniname, name_buf, &lossy); -- if (lossy) -- return -EINVAL; -- -- fid->size = i_size_read(inode); -- -- p_dir->dir = fid->start_clu; -- p_dir->size = (s32)(fid->size >> p_fs->cluster_size_bits); -- p_dir->flags = fid->flags; -- -- return 0; --} -- --s32 exfat_mount(struct super_block *sb, struct pbr_sector_t *p_pbr) --{ -- struct bpbex_t *p_bpb = (struct bpbex_t *)p_pbr->bpb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- -- if (p_bpb->num_fats == 0) -- return -EFSCORRUPTED; -- -- p_fs->sectors_per_clu = 1 << p_bpb->sectors_per_clu_bits; -- p_fs->sectors_per_clu_bits = p_bpb->sectors_per_clu_bits; -- p_fs->cluster_size_bits = p_fs->sectors_per_clu_bits + -- p_bd->sector_size_bits; -- p_fs->cluster_size = 1 << p_fs->cluster_size_bits; -- -- p_fs->num_FAT_sectors = GET32(p_bpb->fat_length); -- -- p_fs->FAT1_start_sector = p_fs->PBR_sector + GET32(p_bpb->fat_offset); -- if (p_bpb->num_fats == 1) -- p_fs->FAT2_start_sector = p_fs->FAT1_start_sector; -- else -- p_fs->FAT2_start_sector = p_fs->FAT1_start_sector + -- p_fs->num_FAT_sectors; -- -- p_fs->root_start_sector = p_fs->PBR_sector + GET32(p_bpb->clu_offset); -- p_fs->data_start_sector = p_fs->root_start_sector; -- -- p_fs->num_sectors = GET64(p_bpb->vol_length); -- p_fs->num_clusters = GET32(p_bpb->clu_count) + 2; -- /* because the cluster index starts with 2 */ -- -- p_fs->vol_type = EXFAT; -- p_fs->vol_id = GET32(p_bpb->vol_serial); -- -- p_fs->root_dir = GET32(p_bpb->root_cluster); -- p_fs->dentries_in_root = 0; -- p_fs->dentries_per_clu = 1 << (p_fs->cluster_size_bits - -- DENTRY_SIZE_BITS); -- -- p_fs->vol_flag = (u32)GET16(p_bpb->vol_flags); -- p_fs->clu_srch_ptr = 2; -- p_fs->used_clusters = UINT_MAX; -- -- return 0; --} -- --s32 create_dir(struct inode *inode, struct chain_t *p_dir, -- struct uni_name_t *p_uniname, struct file_id_t *fid) --{ -- s32 ret, dentry, num_entries; -- u64 size; -- struct chain_t clu; -- struct dos_name_t dos_name; -- struct super_block *sb = inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- ret = get_num_entries_and_dos_name(sb, p_dir, p_uniname, &num_entries, -- &dos_name); -- if (ret) -- return ret; -- -- /* find_empty_entry must be called before alloc_cluster */ -- dentry = find_empty_entry(inode, p_dir, num_entries); -- if (dentry < 0) -- return -ENOSPC; -- -- clu.dir = CLUSTER_32(~0); -- clu.size = 0; -- clu.flags = (p_fs->vol_type == EXFAT) ? 0x03 : 0x01; -- -- /* (1) allocate a cluster */ -- ret = exfat_alloc_cluster(sb, 1, &clu); -- if (ret < 0) -- return ret; -- else if (ret == 0) -- return -ENOSPC; -- -- ret = clear_cluster(sb, clu.dir); -- if (ret != 0) -- return ret; -- -- size = p_fs->cluster_size; -- -- /* (2) update the directory entry */ -- /* make sub-dir entry in parent directory */ -- ret = exfat_init_dir_entry(sb, p_dir, dentry, TYPE_DIR, clu.dir, -- size); -- if (ret != 0) -- return ret; -- -- ret = exfat_init_ext_entry(sb, p_dir, dentry, num_entries, p_uniname, -- &dos_name); -- if (ret != 0) -- return ret; -- -- fid->dir.dir = p_dir->dir; -- fid->dir.size = p_dir->size; -- fid->dir.flags = p_dir->flags; -- fid->entry = dentry; -- -- fid->attr = ATTR_SUBDIR; -- fid->flags = (p_fs->vol_type == EXFAT) ? 0x03 : 0x01; -- fid->size = size; -- fid->start_clu = clu.dir; -- -- fid->type = TYPE_DIR; -- fid->rwoffset = 0; -- fid->hint_last_off = -1; -- -- return 0; --} -- --s32 create_file(struct inode *inode, struct chain_t *p_dir, -- struct uni_name_t *p_uniname, u8 mode, struct file_id_t *fid) --{ -- s32 ret, dentry, num_entries; -- struct dos_name_t dos_name; -- struct super_block *sb = inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- ret = get_num_entries_and_dos_name(sb, p_dir, p_uniname, &num_entries, -- &dos_name); -- if (ret) -- return ret; -- -- /* find_empty_entry must be called before alloc_cluster() */ -- dentry = find_empty_entry(inode, p_dir, num_entries); -- if (dentry < 0) -- return -ENOSPC; -- -- /* (1) update the directory entry */ -- /* fill the dos name directory entry information of the created file. -- * the first cluster is not determined yet. (0) -- */ -- ret = exfat_init_dir_entry(sb, p_dir, dentry, TYPE_FILE | mode, -- CLUSTER_32(0), 0); -- if (ret != 0) -- return ret; -- -- ret = exfat_init_ext_entry(sb, p_dir, dentry, num_entries, p_uniname, -- &dos_name); -- if (ret != 0) -- return ret; -- -- fid->dir.dir = p_dir->dir; -- fid->dir.size = p_dir->size; -- fid->dir.flags = p_dir->flags; -- fid->entry = dentry; -- -- fid->attr = ATTR_ARCHIVE | mode; -- fid->flags = (p_fs->vol_type == EXFAT) ? 0x03 : 0x01; -- fid->size = 0; -- fid->start_clu = CLUSTER_32(~0); -- -- fid->type = TYPE_FILE; -- fid->rwoffset = 0; -- fid->hint_last_off = -1; -- -- return 0; --} -- --void remove_file(struct inode *inode, struct chain_t *p_dir, s32 entry) --{ -- s32 num_entries; -- sector_t sector; -- struct dentry_t *ep; -- struct super_block *sb = inode->i_sb; -- -- ep = get_entry_in_dir(sb, p_dir, entry, §or); -- if (!ep) -- return; -- -- exfat_buf_lock(sb, sector); -- -- /* exfat_buf_lock() before call count_ext_entries() */ -- num_entries = exfat_count_ext_entries(sb, p_dir, entry, ep); -- if (num_entries < 0) { -- exfat_buf_unlock(sb, sector); -- return; -- } -- num_entries++; -- -- exfat_buf_unlock(sb, sector); -- -- /* (1) update the directory entry */ -- exfat_delete_dir_entry(sb, p_dir, entry, 0, num_entries); --} -- --s32 exfat_rename_file(struct inode *inode, struct chain_t *p_dir, s32 oldentry, -- struct uni_name_t *p_uniname, struct file_id_t *fid) --{ -- s32 ret, newentry = -1, num_old_entries, num_new_entries; -- sector_t sector_old, sector_new; -- struct dos_name_t dos_name; -- struct dentry_t *epold, *epnew; -- struct super_block *sb = inode->i_sb; -- -- epold = get_entry_in_dir(sb, p_dir, oldentry, §or_old); -- if (!epold) -- return -ENOENT; -- -- exfat_buf_lock(sb, sector_old); -- -- /* exfat_buf_lock() before call count_ext_entries() */ -- num_old_entries = exfat_count_ext_entries(sb, p_dir, oldentry, -- epold); -- if (num_old_entries < 0) { -- exfat_buf_unlock(sb, sector_old); -- return -ENOENT; -- } -- num_old_entries++; -- -- ret = get_num_entries_and_dos_name(sb, p_dir, p_uniname, -- &num_new_entries, &dos_name); -- if (ret) { -- exfat_buf_unlock(sb, sector_old); -- return ret; -- } -- -- if (num_old_entries < num_new_entries) { -- newentry = find_empty_entry(inode, p_dir, num_new_entries); -- if (newentry < 0) { -- exfat_buf_unlock(sb, sector_old); -- return -ENOSPC; -- } -- -- epnew = get_entry_in_dir(sb, p_dir, newentry, §or_new); -- if (!epnew) { -- exfat_buf_unlock(sb, sector_old); -- return -ENOENT; -- } -- -- memcpy((void *)epnew, (void *)epold, DENTRY_SIZE); -- if (exfat_get_entry_type(epnew) == TYPE_FILE) { -- exfat_set_entry_attr(epnew, -- exfat_get_entry_attr(epnew) | -- ATTR_ARCHIVE); -- fid->attr |= ATTR_ARCHIVE; -- } -- exfat_buf_modify(sb, sector_new); -- exfat_buf_unlock(sb, sector_old); -- -- epold = get_entry_in_dir(sb, p_dir, oldentry + 1, -- §or_old); -- exfat_buf_lock(sb, sector_old); -- epnew = get_entry_in_dir(sb, p_dir, newentry + 1, -- §or_new); -- -- if (!epold || !epnew) { -- exfat_buf_unlock(sb, sector_old); -- return -ENOENT; -- } -- -- memcpy((void *)epnew, (void *)epold, DENTRY_SIZE); -- exfat_buf_modify(sb, sector_new); -- exfat_buf_unlock(sb, sector_old); -- -- ret = exfat_init_ext_entry(sb, p_dir, newentry, -- num_new_entries, p_uniname, -- &dos_name); -- if (ret != 0) -- return ret; -- -- exfat_delete_dir_entry(sb, p_dir, oldentry, 0, -- num_old_entries); -- fid->entry = newentry; -- } else { -- if (exfat_get_entry_type(epold) == TYPE_FILE) { -- exfat_set_entry_attr(epold, -- exfat_get_entry_attr(epold) | -- ATTR_ARCHIVE); -- fid->attr |= ATTR_ARCHIVE; -- } -- exfat_buf_modify(sb, sector_old); -- exfat_buf_unlock(sb, sector_old); -- -- ret = exfat_init_ext_entry(sb, p_dir, oldentry, -- num_new_entries, p_uniname, -- &dos_name); -- if (ret != 0) -- return ret; -- -- exfat_delete_dir_entry(sb, p_dir, oldentry, num_new_entries, -- num_old_entries); -- } -- -- return 0; --} -- --s32 move_file(struct inode *inode, struct chain_t *p_olddir, s32 oldentry, -- struct chain_t *p_newdir, struct uni_name_t *p_uniname, -- struct file_id_t *fid) --{ -- s32 ret, newentry, num_new_entries, num_old_entries; -- sector_t sector_mov, sector_new; -- struct dos_name_t dos_name; -- struct dentry_t *epmov, *epnew; -- struct super_block *sb = inode->i_sb; -- -- epmov = get_entry_in_dir(sb, p_olddir, oldentry, §or_mov); -- if (!epmov) -- return -ENOENT; -- -- /* check if the source and target directory is the same */ -- if (exfat_get_entry_type(epmov) == TYPE_DIR && -- exfat_get_entry_clu0(epmov) == p_newdir->dir) -- return -EINVAL; -- -- exfat_buf_lock(sb, sector_mov); -- -- /* exfat_buf_lock() before call count_ext_entries() */ -- num_old_entries = exfat_count_ext_entries(sb, p_olddir, oldentry, -- epmov); -- if (num_old_entries < 0) { -- exfat_buf_unlock(sb, sector_mov); -- return -ENOENT; -- } -- num_old_entries++; -- -- ret = get_num_entries_and_dos_name(sb, p_newdir, p_uniname, -- &num_new_entries, &dos_name); -- if (ret) { -- exfat_buf_unlock(sb, sector_mov); -- return ret; -- } -- -- newentry = find_empty_entry(inode, p_newdir, num_new_entries); -- if (newentry < 0) { -- exfat_buf_unlock(sb, sector_mov); -- return -ENOSPC; -- } -- -- epnew = get_entry_in_dir(sb, p_newdir, newentry, §or_new); -- if (!epnew) { -- exfat_buf_unlock(sb, sector_mov); -- return -ENOENT; -- } -- -- memcpy((void *)epnew, (void *)epmov, DENTRY_SIZE); -- if (exfat_get_entry_type(epnew) == TYPE_FILE) { -- exfat_set_entry_attr(epnew, exfat_get_entry_attr(epnew) | -- ATTR_ARCHIVE); -- fid->attr |= ATTR_ARCHIVE; -- } -- exfat_buf_modify(sb, sector_new); -- exfat_buf_unlock(sb, sector_mov); -- -- epmov = get_entry_in_dir(sb, p_olddir, oldentry + 1, -- §or_mov); -- exfat_buf_lock(sb, sector_mov); -- epnew = get_entry_in_dir(sb, p_newdir, newentry + 1, -- §or_new); -- if (!epmov || !epnew) { -- exfat_buf_unlock(sb, sector_mov); -- return -ENOENT; -- } -- -- memcpy((void *)epnew, (void *)epmov, DENTRY_SIZE); -- exfat_buf_modify(sb, sector_new); -- exfat_buf_unlock(sb, sector_mov); -- -- ret = exfat_init_ext_entry(sb, p_newdir, newentry, num_new_entries, -- p_uniname, &dos_name); -- if (ret != 0) -- return ret; -- -- exfat_delete_dir_entry(sb, p_olddir, oldentry, 0, num_old_entries); -- -- fid->dir.dir = p_newdir->dir; -- fid->dir.size = p_newdir->size; -- fid->dir.flags = p_newdir->flags; -- -- fid->entry = newentry; -- -- return 0; --} -- --/* -- * Sector Read/Write Functions -- */ -- --int sector_read(struct super_block *sb, sector_t sec, struct buffer_head **bh, -- bool read) --{ -- s32 ret = -EIO; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- if ((sec >= (p_fs->PBR_sector + p_fs->num_sectors)) && -- (p_fs->num_sectors > 0)) { -- pr_err("[EXFAT] %s: out of range error! (sec = %llu)\n", -- __func__, (unsigned long long)sec); -- fs_error(sb); -- return ret; -- } -- -- if (!p_fs->dev_ejected) { -- ret = exfat_bdev_read(sb, sec, bh, 1, read); -- if (ret != 0) -- p_fs->dev_ejected = 1; -- } -- -- return ret; --} -- --int sector_write(struct super_block *sb, sector_t sec, struct buffer_head *bh, -- bool sync) --{ -- s32 ret = -EIO; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- if (sec >= (p_fs->PBR_sector + p_fs->num_sectors) && -- (p_fs->num_sectors > 0)) { -- pr_err("[EXFAT] %s: out of range error! (sec = %llu)\n", -- __func__, (unsigned long long)sec); -- fs_error(sb); -- return ret; -- } -- -- if (!bh) { -- pr_err("[EXFAT] %s: bh is NULL!\n", __func__); -- fs_error(sb); -- return ret; -- } -- -- if (!p_fs->dev_ejected) { -- ret = exfat_bdev_write(sb, sec, bh, 1, sync); -- if (ret != 0) -- p_fs->dev_ejected = 1; -- } -- -- return ret; --} -- --int multi_sector_read(struct super_block *sb, sector_t sec, -- struct buffer_head **bh, s32 num_secs, bool read) --{ -- s32 ret = -EIO; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- if (((sec + num_secs) > (p_fs->PBR_sector + p_fs->num_sectors)) && -- (p_fs->num_sectors > 0)) { -- pr_err("[EXFAT] %s: out of range error! (sec = %llu, num_secs = %d)\n", -- __func__, (unsigned long long)sec, num_secs); -- fs_error(sb); -- return ret; -- } -- -- if (!p_fs->dev_ejected) { -- ret = exfat_bdev_read(sb, sec, bh, num_secs, read); -- if (ret != 0) -- p_fs->dev_ejected = 1; -- } -- -- return ret; --} -- --int multi_sector_write(struct super_block *sb, sector_t sec, -- struct buffer_head *bh, s32 num_secs, bool sync) --{ -- s32 ret = -EIO; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- if ((sec + num_secs) > (p_fs->PBR_sector + p_fs->num_sectors) && -- (p_fs->num_sectors > 0)) { -- pr_err("[EXFAT] %s: out of range error! (sec = %llu, num_secs = %d)\n", -- __func__, (unsigned long long)sec, num_secs); -- fs_error(sb); -- return ret; -- } -- if (!bh) { -- pr_err("[EXFAT] %s: bh is NULL!\n", __func__); -- fs_error(sb); -- return ret; -- } -- -- if (!p_fs->dev_ejected) { -- ret = exfat_bdev_write(sb, sec, bh, num_secs, sync); -- if (ret != 0) -- p_fs->dev_ejected = 1; -- } -- -- return ret; --} -diff -Nurp linux-5.6.3.orig/drivers/staging/exfat/exfat.h linux-5.6.3/drivers/staging/exfat/exfat.h ---- linux-5.6.3.orig/drivers/staging/exfat/exfat.h 2020-03-30 01:25:41.000000000 +0300 -+++ linux-5.6.3/drivers/staging/exfat/exfat.h 1970-01-01 02:00:00.000000000 +0200 -@@ -1,824 +0,0 @@ --/* SPDX-License-Identifier: GPL-2.0-or-later */ --/* -- * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -- */ -- --#ifndef _EXFAT_H --#define _EXFAT_H -- --#include --#include -- --#ifdef CONFIG_STAGING_EXFAT_KERNEL_DEBUG -- /* For Debugging Purpose */ -- /* IOCTL code 'f' used by -- * - file systems typically #0~0x1F -- * - embedded terminal devices #128~ -- * - exts for debugging purpose #99 -- * number 100 and 101 is available now but has possible conflicts -- */ --#define EXFAT_IOC_GET_DEBUGFLAGS _IOR('f', 100, long) --#define EXFAT_IOC_SET_DEBUGFLAGS _IOW('f', 101, long) -- --#define EXFAT_DEBUGFLAGS_INVALID_UMOUNT 0x01 --#define EXFAT_DEBUGFLAGS_ERROR_RW 0x02 --#endif /* CONFIG_STAGING_EXFAT_KERNEL_DEBUG */ -- --#ifdef CONFIG_STAGING_EXFAT_DEBUG_MSG --#define DEBUG 1 --#else --#undef DEBUG --#endif -- --#define EFSCORRUPTED EUCLEAN /* Filesystem is corrupted */ -- --#define DENTRY_SIZE 32 /* dir entry size */ --#define DENTRY_SIZE_BITS 5 -- --/* PBR entries */ --#define PBR_SIGNATURE 0xAA55 --#define EXT_SIGNATURE 0xAA550000 --#define VOL_LABEL "NO NAME " /* size should be 11 */ --#define OEM_NAME "MSWIN4.1" /* size should be 8 */ --#define STR_FAT12 "FAT12 " /* size should be 8 */ --#define STR_FAT16 "FAT16 " /* size should be 8 */ --#define STR_FAT32 "FAT32 " /* size should be 8 */ --#define STR_EXFAT "EXFAT " /* size should be 8 */ --#define VOL_CLEAN 0x0000 --#define VOL_DIRTY 0x0002 -- --/* max number of clusters */ --#define FAT12_THRESHOLD 4087 /* 2^12 - 1 + 2 (clu 0 & 1) */ --#define FAT16_THRESHOLD 65527 /* 2^16 - 1 + 2 */ --#define FAT32_THRESHOLD 268435457 /* 2^28 - 1 + 2 */ --#define EXFAT_THRESHOLD 268435457 /* 2^28 - 1 + 2 */ -- --/* file types */ --#define TYPE_UNUSED 0x0000 --#define TYPE_DELETED 0x0001 --#define TYPE_INVALID 0x0002 --#define TYPE_CRITICAL_PRI 0x0100 --#define TYPE_BITMAP 0x0101 --#define TYPE_UPCASE 0x0102 --#define TYPE_VOLUME 0x0103 --#define TYPE_DIR 0x0104 --#define TYPE_FILE 0x011F --#define TYPE_SYMLINK 0x015F --#define TYPE_CRITICAL_SEC 0x0200 --#define TYPE_STREAM 0x0201 --#define TYPE_EXTEND 0x0202 --#define TYPE_ACL 0x0203 --#define TYPE_BENIGN_PRI 0x0400 --#define TYPE_GUID 0x0401 --#define TYPE_PADDING 0x0402 --#define TYPE_ACLTAB 0x0403 --#define TYPE_BENIGN_SEC 0x0800 --#define TYPE_ALL 0x0FFF -- --/* time modes */ --#define TM_CREATE 0 --#define TM_MODIFY 1 --#define TM_ACCESS 2 -- --/* checksum types */ --#define CS_DIR_ENTRY 0 --#define CS_PBR_SECTOR 1 --#define CS_DEFAULT 2 -- --#define CLUSTER_16(x) ((u16)(x)) --#define CLUSTER_32(x) ((u32)(x)) -- --#define START_SECTOR(x) \ -- ((((sector_t)((x) - 2)) << p_fs->sectors_per_clu_bits) + \ -- p_fs->data_start_sector) -- --#define IS_LAST_SECTOR_IN_CLUSTER(sec) \ -- ((((sec) - p_fs->data_start_sector + 1) & \ -- ((1 << p_fs->sectors_per_clu_bits) - 1)) == 0) -- --#define GET_CLUSTER_FROM_SECTOR(sec) \ -- ((u32)((((sec) - p_fs->data_start_sector) >> \ -- p_fs->sectors_per_clu_bits) + 2)) -- --#define GET16(p_src) \ -- (((u16)(p_src)[0]) | (((u16)(p_src)[1]) << 8)) --#define GET32(p_src) \ -- (((u32)(p_src)[0]) | (((u32)(p_src)[1]) << 8) | \ -- (((u32)(p_src)[2]) << 16) | (((u32)(p_src)[3]) << 24)) --#define GET64(p_src) \ -- (((u64)(p_src)[0]) | (((u64)(p_src)[1]) << 8) | \ -- (((u64)(p_src)[2]) << 16) | (((u64)(p_src)[3]) << 24) | \ -- (((u64)(p_src)[4]) << 32) | (((u64)(p_src)[5]) << 40) | \ -- (((u64)(p_src)[6]) << 48) | (((u64)(p_src)[7]) << 56)) -- --#define SET16(p_dst, src) \ -- do { \ -- (p_dst)[0] = (u8)(src); \ -- (p_dst)[1] = (u8)(((u16)(src)) >> 8); \ -- } while (0) --#define SET32(p_dst, src) \ -- do { \ -- (p_dst)[0] = (u8)(src); \ -- (p_dst)[1] = (u8)(((u32)(src)) >> 8); \ -- (p_dst)[2] = (u8)(((u32)(src)) >> 16); \ -- (p_dst)[3] = (u8)(((u32)(src)) >> 24); \ -- } while (0) --#define SET64(p_dst, src) \ -- do { \ -- (p_dst)[0] = (u8)(src); \ -- (p_dst)[1] = (u8)(((u64)(src)) >> 8); \ -- (p_dst)[2] = (u8)(((u64)(src)) >> 16); \ -- (p_dst)[3] = (u8)(((u64)(src)) >> 24); \ -- (p_dst)[4] = (u8)(((u64)(src)) >> 32); \ -- (p_dst)[5] = (u8)(((u64)(src)) >> 40); \ -- (p_dst)[6] = (u8)(((u64)(src)) >> 48); \ -- (p_dst)[7] = (u8)(((u64)(src)) >> 56); \ -- } while (0) -- --#ifdef __LITTLE_ENDIAN --#define GET16_A(p_src) (*((u16 *)(p_src))) --#define GET32_A(p_src) (*((u32 *)(p_src))) --#define GET64_A(p_src) (*((u64 *)(p_src))) --#define SET16_A(p_dst, src) (*((u16 *)(p_dst)) = (u16)(src)) --#define SET32_A(p_dst, src) (*((u32 *)(p_dst)) = (u32)(src)) --#define SET64_A(p_dst, src) (*((u64 *)(p_dst)) = (u64)(src)) --#else /* BIG_ENDIAN */ --#define GET16_A(p_src) GET16(p_src) --#define GET32_A(p_src) GET32(p_src) --#define GET64_A(p_src) GET64(p_src) --#define SET16_A(p_dst, src) SET16(p_dst, src) --#define SET32_A(p_dst, src) SET32(p_dst, src) --#define SET64_A(p_dst, src) SET64(p_dst, src) --#endif -- --/* cache size (in number of sectors) */ --/* (should be an exponential value of 2) */ --#define FAT_CACHE_SIZE 128 --#define FAT_CACHE_HASH_SIZE 64 --#define BUF_CACHE_SIZE 256 --#define BUF_CACHE_HASH_SIZE 64 -- --/* Upcase table macro */ --#define HIGH_INDEX_BIT (8) --#define HIGH_INDEX_MASK (0xFF00) --#define LOW_INDEX_BIT (16 - HIGH_INDEX_BIT) --#define UTBL_ROW_COUNT BIT(LOW_INDEX_BIT) --#define UTBL_COL_COUNT BIT(HIGH_INDEX_BIT) -- --static inline u16 get_col_index(u16 i) --{ -- return i >> LOW_INDEX_BIT; --} -- --static inline u16 get_row_index(u16 i) --{ -- return i & ~HIGH_INDEX_MASK; --} -- --#define EXFAT_SUPER_MAGIC (0x2011BAB0L) --#define EXFAT_ROOT_INO 1 -- --/* FAT types */ --#define FAT12 0x01 /* FAT12 */ --#define FAT16 0x0E /* Win95 FAT16 (LBA) */ --#define FAT32 0x0C /* Win95 FAT32 (LBA) */ --#define EXFAT 0x07 /* exFAT */ -- --/* file name lengths */ --#define MAX_CHARSET_SIZE 3 /* max size of multi-byte character */ --#define MAX_PATH_DEPTH 15 /* max depth of path name */ --#define MAX_NAME_LENGTH 256 /* max len of filename including NULL */ --#define MAX_PATH_LENGTH 260 /* max len of pathname including NULL */ --#define DOS_NAME_LENGTH 11 /* DOS filename length excluding NULL */ --#define DOS_PATH_LENGTH 80 /* DOS pathname length excluding NULL */ -- --/* file attributes */ --#define ATTR_NORMAL 0x0000 --#define ATTR_READONLY 0x0001 --#define ATTR_HIDDEN 0x0002 --#define ATTR_SYSTEM 0x0004 --#define ATTR_VOLUME 0x0008 --#define ATTR_SUBDIR 0x0010 --#define ATTR_ARCHIVE 0x0020 --#define ATTR_SYMLINK 0x0040 --#define ATTR_EXTEND 0x000F --#define ATTR_RWMASK 0x007E -- --/* file creation modes */ --#define FM_REGULAR 0x00 --#define FM_SYMLINK 0x40 -- --#define NUM_UPCASE 2918 -- --#define DOS_CUR_DIR_NAME ". " --#define DOS_PAR_DIR_NAME ".. " -- --#ifdef __LITTLE_ENDIAN --#define UNI_CUR_DIR_NAME ".\0" --#define UNI_PAR_DIR_NAME ".\0.\0" --#else --#define UNI_CUR_DIR_NAME "\0." --#define UNI_PAR_DIR_NAME "\0.\0." --#endif -- --struct date_time_t { -- u16 Year; -- u16 Month; -- u16 Day; -- u16 Hour; -- u16 Minute; -- u16 Second; -- u16 MilliSecond; --}; -- --struct part_info_t { -- u32 Offset; /* start sector number of the partition */ -- u32 Size; /* in sectors */ --}; -- --struct dev_info_t { -- u32 SecSize; /* sector size in bytes */ -- u32 DevSize; /* block device size in sectors */ --}; -- --struct vol_info_t { -- u32 FatType; -- u32 ClusterSize; -- u32 NumClusters; -- u32 FreeClusters; -- u32 UsedClusters; --}; -- --/* directory structure */ --struct chain_t { -- u32 dir; -- s32 size; -- u8 flags; --}; -- --struct file_id_t { -- struct chain_t dir; -- s32 entry; -- u32 type; -- u32 attr; -- u32 start_clu; -- u64 size; -- u8 flags; -- s64 rwoffset; -- s32 hint_last_off; -- u32 hint_last_clu; --}; -- --struct dir_entry_t { -- char Name[MAX_NAME_LENGTH * MAX_CHARSET_SIZE]; -- -- /* used only for FAT12/16/32, not used for exFAT */ -- char ShortName[DOS_NAME_LENGTH + 2]; -- -- u32 Attr; -- u64 Size; -- u32 NumSubdirs; -- struct date_time_t CreateTimestamp; -- struct date_time_t ModifyTimestamp; -- struct date_time_t AccessTimestamp; --}; -- --struct timestamp_t { -- u16 sec; /* 0 ~ 59 */ -- u16 min; /* 0 ~ 59 */ -- u16 hour; /* 0 ~ 23 */ -- u16 day; /* 1 ~ 31 */ -- u16 mon; /* 1 ~ 12 */ -- u16 year; /* 0 ~ 127 (since 1980) */ --}; -- --/* MS_DOS FAT partition boot record (512 bytes) */ --struct pbr_sector_t { -- u8 jmp_boot[3]; -- u8 oem_name[8]; -- u8 bpb[109]; -- u8 boot_code[390]; -- u8 signature[2]; --}; -- --/* MS-DOS FAT12/16 BIOS parameter block (51 bytes) */ --struct bpb16_t { -- u8 sector_size[2]; -- u8 sectors_per_clu; -- u8 num_reserved[2]; -- u8 num_fats; -- u8 num_root_entries[2]; -- u8 num_sectors[2]; -- u8 media_type; -- u8 num_fat_sectors[2]; -- u8 sectors_in_track[2]; -- u8 num_heads[2]; -- u8 num_hid_sectors[4]; -- u8 num_huge_sectors[4]; -- -- u8 phy_drv_no; -- u8 reserved; -- u8 ext_signature; -- u8 vol_serial[4]; -- u8 vol_label[11]; -- u8 vol_type[8]; --}; -- --/* MS-DOS FAT32 BIOS parameter block (79 bytes) */ --struct bpb32_t { -- u8 sector_size[2]; -- u8 sectors_per_clu; -- u8 num_reserved[2]; -- u8 num_fats; -- u8 num_root_entries[2]; -- u8 num_sectors[2]; -- u8 media_type; -- u8 num_fat_sectors[2]; -- u8 sectors_in_track[2]; -- u8 num_heads[2]; -- u8 num_hid_sectors[4]; -- u8 num_huge_sectors[4]; -- u8 num_fat32_sectors[4]; -- u8 ext_flags[2]; -- u8 fs_version[2]; -- u8 root_cluster[4]; -- u8 fsinfo_sector[2]; -- u8 backup_sector[2]; -- u8 reserved[12]; -- -- u8 phy_drv_no; -- u8 ext_reserved; -- u8 ext_signature; -- u8 vol_serial[4]; -- u8 vol_label[11]; -- u8 vol_type[8]; --}; -- --/* MS-DOS EXFAT BIOS parameter block (109 bytes) */ --struct bpbex_t { -- u8 reserved1[53]; -- u8 vol_offset[8]; -- u8 vol_length[8]; -- u8 fat_offset[4]; -- u8 fat_length[4]; -- u8 clu_offset[4]; -- u8 clu_count[4]; -- u8 root_cluster[4]; -- u8 vol_serial[4]; -- u8 fs_version[2]; -- u8 vol_flags[2]; -- u8 sector_size_bits; -- u8 sectors_per_clu_bits; -- u8 num_fats; -- u8 phy_drv_no; -- u8 perc_in_use; -- u8 reserved2[7]; --}; -- --/* MS-DOS FAT file system information sector (512 bytes) */ --struct fsi_sector_t { -- u8 signature1[4]; -- u8 reserved1[480]; -- u8 signature2[4]; -- u8 free_cluster[4]; -- u8 next_cluster[4]; -- u8 reserved2[14]; -- u8 signature3[2]; --}; -- --/* MS-DOS FAT directory entry (32 bytes) */ --struct dentry_t { -- u8 dummy[32]; --}; -- --struct dos_dentry_t { -- u8 name[DOS_NAME_LENGTH]; -- u8 attr; -- u8 lcase; -- u8 create_time_ms; -- u8 create_time[2]; -- u8 create_date[2]; -- u8 access_date[2]; -- u8 start_clu_hi[2]; -- u8 modify_time[2]; -- u8 modify_date[2]; -- u8 start_clu_lo[2]; -- u8 size[4]; --}; -- --/* MS-DOS FAT extended directory entry (32 bytes) */ --struct ext_dentry_t { -- u8 order; -- u8 unicode_0_4[10]; -- u8 attr; -- u8 sysid; -- u8 checksum; -- u8 unicode_5_10[12]; -- u8 start_clu[2]; -- u8 unicode_11_12[4]; --}; -- --/* MS-DOS EXFAT file directory entry (32 bytes) */ --struct file_dentry_t { -- u8 type; -- u8 num_ext; -- u8 checksum[2]; -- u8 attr[2]; -- u8 reserved1[2]; -- u8 create_time[2]; -- u8 create_date[2]; -- u8 modify_time[2]; -- u8 modify_date[2]; -- u8 access_time[2]; -- u8 access_date[2]; -- u8 create_time_ms; -- u8 modify_time_ms; -- u8 access_time_ms; -- u8 reserved2[9]; --}; -- --/* MS-DOS EXFAT stream extension directory entry (32 bytes) */ --struct strm_dentry_t { -- u8 type; -- u8 flags; -- u8 reserved1; -- u8 name_len; -- u8 name_hash[2]; -- u8 reserved2[2]; -- u8 valid_size[8]; -- u8 reserved3[4]; -- u8 start_clu[4]; -- u8 size[8]; --}; -- --/* MS-DOS EXFAT file name directory entry (32 bytes) */ --struct name_dentry_t { -- u8 type; -- u8 flags; -- u8 unicode_0_14[30]; --}; -- --/* MS-DOS EXFAT allocation bitmap directory entry (32 bytes) */ --struct bmap_dentry_t { -- u8 type; -- u8 flags; -- u8 reserved[18]; -- u8 start_clu[4]; -- u8 size[8]; --}; -- --/* MS-DOS EXFAT up-case table directory entry (32 bytes) */ --struct case_dentry_t { -- u8 type; -- u8 reserved1[3]; -- u8 checksum[4]; -- u8 reserved2[12]; -- u8 start_clu[4]; -- u8 size[8]; --}; -- --/* MS-DOS EXFAT volume label directory entry (32 bytes) */ --struct volm_dentry_t { -- u8 type; -- u8 label_len; -- u8 unicode_0_10[22]; -- u8 reserved[8]; --}; -- --/* unused entry hint information */ --struct uentry_t { -- u32 dir; -- s32 entry; -- struct chain_t clu; --}; -- --/* DOS name structure */ --struct dos_name_t { -- u8 name[DOS_NAME_LENGTH]; -- u8 name_case; --}; -- --/* unicode name structure */ --struct uni_name_t { -- u16 name[MAX_NAME_LENGTH]; -- u16 name_hash; -- u8 name_len; --}; -- --struct buf_cache_t { -- struct buf_cache_t *next; -- struct buf_cache_t *prev; -- struct buf_cache_t *hash_next; -- struct buf_cache_t *hash_prev; -- s32 drv; -- sector_t sec; -- u32 flag; -- struct buffer_head *buf_bh; --}; -- --struct fs_info_t { -- u32 drv; /* drive ID */ -- u32 vol_type; /* volume FAT type */ -- u32 vol_id; /* volume serial number */ -- -- u64 num_sectors; /* num of sectors in volume */ -- u32 num_clusters; /* num of clusters in volume */ -- u32 cluster_size; /* cluster size in bytes */ -- u32 cluster_size_bits; -- u32 sectors_per_clu; /* cluster size in sectors */ -- u32 sectors_per_clu_bits; -- -- u32 PBR_sector; /* PBR sector */ -- u32 FAT1_start_sector; /* FAT1 start sector */ -- u32 FAT2_start_sector; /* FAT2 start sector */ -- u32 root_start_sector; /* root dir start sector */ -- u32 data_start_sector; /* data area start sector */ -- u32 num_FAT_sectors; /* num of FAT sectors */ -- -- u32 root_dir; /* root dir cluster */ -- u32 dentries_in_root; /* num of dentries in root dir */ -- u32 dentries_per_clu; /* num of dentries per cluster */ -- -- u32 vol_flag; /* volume dirty flag */ -- struct buffer_head *pbr_bh; /* PBR sector */ -- -- u32 map_clu; /* allocation bitmap start cluster */ -- u32 map_sectors; /* num of allocation bitmap sectors */ -- struct buffer_head **vol_amap; /* allocation bitmap */ -- -- u16 **vol_utbl; /* upcase table */ -- -- u32 clu_srch_ptr; /* cluster search pointer */ -- u32 used_clusters; /* number of used clusters */ -- struct uentry_t hint_uentry; /* unused entry hint information */ -- -- u32 dev_ejected; /* block device operation error flag */ -- -- struct mutex v_mutex; -- -- /* FAT cache */ -- struct buf_cache_t FAT_cache_array[FAT_CACHE_SIZE]; -- struct buf_cache_t FAT_cache_lru_list; -- struct buf_cache_t FAT_cache_hash_list[FAT_CACHE_HASH_SIZE]; -- -- /* buf cache */ -- struct buf_cache_t buf_cache_array[BUF_CACHE_SIZE]; -- struct buf_cache_t buf_cache_lru_list; -- struct buf_cache_t buf_cache_hash_list[BUF_CACHE_HASH_SIZE]; --}; -- --#define ES_2_ENTRIES 2 --#define ES_3_ENTRIES 3 --#define ES_ALL_ENTRIES 0 -- --struct entry_set_cache_t { -- /* sector number that contains file_entry */ -- sector_t sector; -- -- /* byte offset in the sector */ -- s32 offset; -- -- /* -- * flag in stream entry. -- * 01 for cluster chain, -- * 03 for contig. clusteres. -- */ -- s32 alloc_flag; -- -- u32 num_entries; -- -- /* __buf should be the last member */ -- void *__buf; --}; -- --#define EXFAT_ERRORS_CONT 1 /* ignore error and continue */ --#define EXFAT_ERRORS_PANIC 2 /* panic on error */ --#define EXFAT_ERRORS_RO 3 /* remount r/o on error */ -- --/* ioctl command */ --#define EXFAT_IOCTL_GET_VOLUME_ID _IOR('r', 0x12, __u32) -- --struct exfat_mount_options { -- kuid_t fs_uid; -- kgid_t fs_gid; -- unsigned short fs_fmask; -- unsigned short fs_dmask; -- -- /* permission for setting the [am]time */ -- unsigned short allow_utime; -- -- /* codepage for shortname conversions */ -- unsigned short codepage; -- -- /* charset for filename input/display */ -- char *iocharset; -- -- unsigned char casesensitive; -- -- /* on error: continue, panic, remount-ro */ -- unsigned char errors; --#ifdef CONFIG_STAGING_EXFAT_DISCARD -- /* flag on if -o dicard specified and device support discard() */ -- unsigned char discard; --#endif /* CONFIG_STAGING_EXFAT_DISCARD */ --}; -- --#define EXFAT_HASH_BITS 8 --#define EXFAT_HASH_SIZE BIT(EXFAT_HASH_BITS) -- --/* -- * EXFAT file system in-core superblock data -- */ --struct bd_info_t { -- s32 sector_size; /* in bytes */ -- s32 sector_size_bits; -- s32 sector_size_mask; -- -- /* total number of sectors in this block device */ -- s32 num_sectors; -- -- /* opened or not */ -- bool opened; --}; -- --struct exfat_sb_info { -- struct fs_info_t fs_info; -- struct bd_info_t bd_info; -- -- struct exfat_mount_options options; -- -- int s_dirt; -- struct mutex s_lock; -- struct nls_table *nls_disk; /* Codepage used on disk */ -- struct nls_table *nls_io; /* Charset used for input and display */ -- -- struct inode *fat_inode; -- -- spinlock_t inode_hash_lock; -- struct hlist_head inode_hashtable[EXFAT_HASH_SIZE]; --#ifdef CONFIG_STAGING_EXFAT_KERNEL_DEBUG -- long debug_flags; --#endif /* CONFIG_STAGING_EXFAT_KERNEL_DEBUG */ --}; -- --/* -- * EXFAT file system inode data in memory -- */ --struct exfat_inode_info { -- struct file_id_t fid; -- char *target; -- /* NOTE: mmu_private is 64bits, so must hold ->i_mutex to access */ -- loff_t mmu_private; /* physically allocated size */ -- loff_t i_pos; /* on-disk position of directory entry or 0 */ -- struct hlist_node i_hash_fat; /* hash by i_location */ -- struct rw_semaphore truncate_lock; -- struct inode vfs_inode; -- struct rw_semaphore i_alloc_sem; /* protect bmap against truncate */ --}; -- --#define EXFAT_SB(sb) ((struct exfat_sb_info *)((sb)->s_fs_info)) -- --static inline struct exfat_inode_info *EXFAT_I(struct inode *inode) --{ -- return container_of(inode, struct exfat_inode_info, vfs_inode); --} -- --/* NLS management function */ --u16 nls_upper(struct super_block *sb, u16 a); --int nls_uniname_cmp(struct super_block *sb, u16 *a, u16 *b); --void nls_uniname_to_cstring(struct super_block *sb, u8 *p_cstring, -- struct uni_name_t *p_uniname); --void nls_cstring_to_uniname(struct super_block *sb, -- struct uni_name_t *p_uniname, u8 *p_cstring, -- bool *p_lossy); -- --/* buffer cache management */ --void exfat_buf_init(struct super_block *sb); --void exfat_buf_shutdown(struct super_block *sb); --int exfat_fat_read(struct super_block *sb, u32 loc, u32 *content); --s32 exfat_fat_write(struct super_block *sb, u32 loc, u32 content); --u8 *exfat_fat_getblk(struct super_block *sb, sector_t sec); --void exfat_fat_modify(struct super_block *sb, sector_t sec); --void exfat_fat_release_all(struct super_block *sb); --void exfat_fat_sync(struct super_block *sb); --u8 *exfat_buf_getblk(struct super_block *sb, sector_t sec); --void exfat_buf_modify(struct super_block *sb, sector_t sec); --void exfat_buf_lock(struct super_block *sb, sector_t sec); --void exfat_buf_unlock(struct super_block *sb, sector_t sec); --void exfat_buf_release(struct super_block *sb, sector_t sec); --void exfat_buf_release_all(struct super_block *sb); --void exfat_buf_sync(struct super_block *sb); -- --/* fs management functions */ --void fs_set_vol_flags(struct super_block *sb, u32 new_flag); --void fs_error(struct super_block *sb); -- --/* cluster management functions */ --s32 count_num_clusters(struct super_block *sb, struct chain_t *dir); --void exfat_chain_cont_cluster(struct super_block *sb, u32 chain, s32 len); -- --/* allocation bitmap management functions */ --s32 load_alloc_bitmap(struct super_block *sb); --void free_alloc_bitmap(struct super_block *sb); --void sync_alloc_bitmap(struct super_block *sb); -- --/* upcase table management functions */ --s32 load_upcase_table(struct super_block *sb); --void free_upcase_table(struct super_block *sb); -- --/* dir entry management functions */ --struct timestamp_t *tm_current(struct timestamp_t *tm); -- --struct dentry_t *get_entry_in_dir(struct super_block *sb, struct chain_t *p_dir, -- s32 entry, sector_t *sector); --struct entry_set_cache_t *get_entry_set_in_dir(struct super_block *sb, -- struct chain_t *p_dir, s32 entry, -- u32 type, -- struct dentry_t **file_ep); --void release_entry_set(struct entry_set_cache_t *es); --s32 count_dos_name_entries(struct super_block *sb, struct chain_t *p_dir, -- u32 type); --void update_dir_checksum(struct super_block *sb, struct chain_t *p_dir, -- s32 entry); --void update_dir_checksum_with_entry_set(struct super_block *sb, -- struct entry_set_cache_t *es); --bool is_dir_empty(struct super_block *sb, struct chain_t *p_dir); -- --/* name conversion functions */ --s32 get_num_entries_and_dos_name(struct super_block *sb, struct chain_t *p_dir, -- struct uni_name_t *p_uniname, s32 *entries, -- struct dos_name_t *p_dosname); --u16 calc_checksum_2byte(void *data, s32 len, u16 chksum, s32 type); -- --/* name resolution functions */ --s32 resolve_path(struct inode *inode, char *path, struct chain_t *p_dir, -- struct uni_name_t *p_uniname); -- --/* file operation functions */ --s32 exfat_mount(struct super_block *sb, struct pbr_sector_t *p_pbr); --s32 create_dir(struct inode *inode, struct chain_t *p_dir, -- struct uni_name_t *p_uniname, struct file_id_t *fid); --s32 create_file(struct inode *inode, struct chain_t *p_dir, -- struct uni_name_t *p_uniname, u8 mode, struct file_id_t *fid); --void remove_file(struct inode *inode, struct chain_t *p_dir, s32 entry); --s32 exfat_rename_file(struct inode *inode, struct chain_t *p_dir, s32 old_entry, -- struct uni_name_t *p_uniname, struct file_id_t *fid); --s32 move_file(struct inode *inode, struct chain_t *p_olddir, s32 oldentry, -- struct chain_t *p_newdir, struct uni_name_t *p_uniname, -- struct file_id_t *fid); -- --/* sector read/write functions */ --int sector_read(struct super_block *sb, sector_t sec, -- struct buffer_head **bh, bool read); --int sector_write(struct super_block *sb, sector_t sec, -- struct buffer_head *bh, bool sync); --int multi_sector_read(struct super_block *sb, sector_t sec, -- struct buffer_head **bh, s32 num_secs, bool read); --int multi_sector_write(struct super_block *sb, sector_t sec, -- struct buffer_head *bh, s32 num_secs, bool sync); -- --void exfat_bdev_open(struct super_block *sb); --void exfat_bdev_close(struct super_block *sb); --int exfat_bdev_read(struct super_block *sb, sector_t secno, -- struct buffer_head **bh, u32 num_secs, bool read); --int exfat_bdev_write(struct super_block *sb, sector_t secno, -- struct buffer_head *bh, u32 num_secs, bool sync); --int exfat_bdev_sync(struct super_block *sb); -- --/* cluster operation functions */ --s32 exfat_alloc_cluster(struct super_block *sb, s32 num_alloc, -- struct chain_t *p_chain); --void exfat_free_cluster(struct super_block *sb, struct chain_t *p_chain, -- s32 do_relse); --s32 exfat_count_used_clusters(struct super_block *sb); -- --/* dir operation functions */ --s32 exfat_find_dir_entry(struct super_block *sb, struct chain_t *p_dir, -- struct uni_name_t *p_uniname, s32 num_entries, -- struct dos_name_t *p_dosname, u32 type); --void exfat_delete_dir_entry(struct super_block *sb, struct chain_t *p_dir, -- s32 entry, s32 order, s32 num_entries); --void exfat_get_uni_name_from_ext_entry(struct super_block *sb, -- struct chain_t *p_dir, s32 entry, -- u16 *uniname); --s32 exfat_count_ext_entries(struct super_block *sb, struct chain_t *p_dir, -- s32 entry, struct dentry_t *p_entry); --s32 exfat_calc_num_entries(struct uni_name_t *p_uniname); -- --/* dir entry getter/setter */ --u32 exfat_get_entry_type(struct dentry_t *p_entry); --u32 exfat_get_entry_attr(struct dentry_t *p_entry); --void exfat_set_entry_attr(struct dentry_t *p_entry, u32 attr); --u8 exfat_get_entry_flag(struct dentry_t *p_entry); --void exfat_set_entry_flag(struct dentry_t *p_entry, u8 flags); --u32 exfat_get_entry_clu0(struct dentry_t *p_entry); --void exfat_set_entry_clu0(struct dentry_t *p_entry, u32 start_clu); --u64 exfat_get_entry_size(struct dentry_t *p_entry); --void exfat_set_entry_size(struct dentry_t *p_entry, u64 size); --void exfat_get_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp, -- u8 mode); --void exfat_set_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp, -- u8 mode); -- --extern const u8 uni_upcase[]; --#endif /* _EXFAT_H */ -diff -Nurp linux-5.6.3.orig/drivers/staging/exfat/exfat_nls.c linux-5.6.3/drivers/staging/exfat/exfat_nls.c ---- linux-5.6.3.orig/drivers/staging/exfat/exfat_nls.c 2020-03-30 01:25:41.000000000 +0300 -+++ linux-5.6.3/drivers/staging/exfat/exfat_nls.c 1970-01-01 02:00:00.000000000 +0200 -@@ -1,212 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0-or-later --/* -- * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -- */ -- --#include --#include --#include "exfat.h" -- --static u16 bad_uni_chars[] = { -- /* " * / : < > ? \ | */ -- 0x0022, 0x002A, 0x002F, 0x003A, -- 0x003C, 0x003E, 0x003F, 0x005C, 0x007C, -- 0 --}; -- --static int convert_ch_to_uni(struct nls_table *nls, u16 *uni, u8 *ch, -- bool *lossy) --{ -- int len; -- -- *uni = 0x0; -- -- if (ch[0] < 0x80) { -- *uni = (u16)ch[0]; -- return 1; -- } -- -- len = nls->char2uni(ch, NLS_MAX_CHARSET_SIZE, uni); -- if (len < 0) { -- /* conversion failed */ -- pr_info("%s: fail to use nls\n", __func__); -- if (lossy) -- *lossy = true; -- *uni = (u16)'_'; -- if (!strcmp(nls->charset, "utf8")) -- return 1; -- else -- return 2; -- } -- -- return len; --} -- --static int convert_uni_to_ch(struct nls_table *nls, u8 *ch, u16 uni, -- bool *lossy) --{ -- int len; -- -- ch[0] = 0x0; -- -- if (uni < 0x0080) { -- ch[0] = (u8)uni; -- return 1; -- } -- -- len = nls->uni2char(uni, ch, NLS_MAX_CHARSET_SIZE); -- if (len < 0) { -- /* conversion failed */ -- pr_info("%s: fail to use nls\n", __func__); -- if (lossy) -- *lossy = true; -- ch[0] = '_'; -- return 1; -- } -- -- return len; --} -- --u16 nls_upper(struct super_block *sb, u16 a) --{ -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- if (EXFAT_SB(sb)->options.casesensitive) -- return a; -- if (p_fs->vol_utbl && p_fs->vol_utbl[get_col_index(a)]) -- return p_fs->vol_utbl[get_col_index(a)][get_row_index(a)]; -- else -- return a; --} -- --static u16 *nls_wstrchr(u16 *str, u16 wchar) --{ -- while (*str) { -- if (*(str++) == wchar) -- return str; -- } -- -- return NULL; --} -- --int nls_uniname_cmp(struct super_block *sb, u16 *a, u16 *b) --{ -- int i; -- -- for (i = 0; i < MAX_NAME_LENGTH; i++, a++, b++) { -- if (nls_upper(sb, *a) != nls_upper(sb, *b)) -- return 1; -- if (*a == 0x0) -- return 0; -- } -- return 0; --} -- --void nls_uniname_to_cstring(struct super_block *sb, u8 *p_cstring, -- struct uni_name_t *p_uniname) --{ -- int i, j, len; -- u8 buf[MAX_CHARSET_SIZE]; -- u16 *uniname = p_uniname->name; -- struct nls_table *nls = EXFAT_SB(sb)->nls_io; -- -- if (!nls) { -- len = utf16s_to_utf8s(uniname, MAX_NAME_LENGTH, -- UTF16_HOST_ENDIAN, p_cstring, -- MAX_NAME_LENGTH); -- p_cstring[len] = 0; -- return; -- } -- -- i = 0; -- while (i < (MAX_NAME_LENGTH - 1)) { -- if (*uniname == (u16)'\0') -- break; -- -- len = convert_uni_to_ch(nls, buf, *uniname, NULL); -- -- if (len > 1) { -- for (j = 0; j < len; j++) -- *p_cstring++ = (char)*(buf + j); -- } else { /* len == 1 */ -- *p_cstring++ = (char)*buf; -- } -- -- uniname++; -- i++; -- } -- -- *p_cstring = '\0'; --} -- --void nls_cstring_to_uniname(struct super_block *sb, -- struct uni_name_t *p_uniname, u8 *p_cstring, -- bool *p_lossy) --{ -- int i, j; -- bool lossy = false; -- u8 *end_of_name; -- u8 upname[MAX_NAME_LENGTH * 2]; -- u16 *uniname = p_uniname->name; -- struct nls_table *nls = EXFAT_SB(sb)->nls_io; -- -- /* strip all trailing spaces */ -- end_of_name = p_cstring + strlen(p_cstring); -- -- while (*(--end_of_name) == ' ') { -- if (end_of_name < p_cstring) -- break; -- } -- *(++end_of_name) = '\0'; -- -- if (strcmp(p_cstring, ".") && strcmp(p_cstring, "..")) { -- /* strip all trailing periods */ -- while (*(--end_of_name) == '.') { -- if (end_of_name < p_cstring) -- break; -- } -- *(++end_of_name) = '\0'; -- } -- -- if (*p_cstring == '\0') -- lossy = true; -- -- if (!nls) { -- i = utf8s_to_utf16s(p_cstring, MAX_NAME_LENGTH, -- UTF16_HOST_ENDIAN, uniname, -- MAX_NAME_LENGTH); -- for (j = 0; j < i; j++) -- SET16_A(upname + j * 2, nls_upper(sb, uniname[j])); -- uniname[i] = '\0'; -- } else { -- i = 0; -- j = 0; -- while (j < (MAX_NAME_LENGTH - 1)) { -- if (*(p_cstring + i) == '\0') -- break; -- -- i += convert_ch_to_uni(nls, uniname, -- (u8 *)(p_cstring + i), &lossy); -- -- if ((*uniname < 0x0020) || -- nls_wstrchr(bad_uni_chars, *uniname)) -- lossy = true; -- -- SET16_A(upname + j * 2, nls_upper(sb, *uniname)); -- -- uniname++; -- j++; -- } -- -- if (*(p_cstring + i) != '\0') -- lossy = true; -- *uniname = (u16)'\0'; -- } -- -- p_uniname->name_len = j; -- p_uniname->name_hash = calc_checksum_2byte(upname, j << 1, 0, -- CS_DEFAULT); -- -- if (p_lossy) -- *p_lossy = lossy; --} -diff -Nurp linux-5.6.3.orig/drivers/staging/exfat/exfat_super.c linux-5.6.3/drivers/staging/exfat/exfat_super.c ---- linux-5.6.3.orig/drivers/staging/exfat/exfat_super.c 2020-03-30 01:25:41.000000000 +0300 -+++ linux-5.6.3/drivers/staging/exfat/exfat_super.c 1970-01-01 02:00:00.000000000 +0200 -@@ -1,3883 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0-or-later --/* -- * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -- */ -- --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include -- --#define EXFAT_VERSION "1.3.0" -- --#include "exfat.h" -- --static struct kmem_cache *exfat_inode_cachep; -- --static int exfat_default_codepage = CONFIG_STAGING_EXFAT_DEFAULT_CODEPAGE; --static char exfat_default_iocharset[] = CONFIG_STAGING_EXFAT_DEFAULT_IOCHARSET; -- --#define INC_IVERSION(x) (inode_inc_iversion(x)) --#define GET_IVERSION(x) (inode_peek_iversion_raw(x)) --#define SET_IVERSION(x, y) (inode_set_iversion(x, y)) -- --static struct inode *exfat_iget(struct super_block *sb, loff_t i_pos); --static int exfat_sync_inode(struct inode *inode); --static struct inode *exfat_build_inode(struct super_block *sb, -- struct file_id_t *fid, loff_t i_pos); --static int exfat_write_inode(struct inode *inode, -- struct writeback_control *wbc); --static void exfat_write_super(struct super_block *sb); -- --#define UNIX_SECS_1980 315532800L --#define UNIX_SECS_2108 4354819200L -- --/* Convert a FAT time/date pair to a UNIX date (seconds since 1 1 70). */ --static void exfat_time_fat2unix(struct timespec64 *ts, struct date_time_t *tp) --{ -- ts->tv_sec = mktime64(tp->Year + 1980, tp->Month + 1, tp->Day, -- tp->Hour, tp->Minute, tp->Second); -- -- ts->tv_nsec = tp->MilliSecond * NSEC_PER_MSEC; --} -- --/* Convert linear UNIX date to a FAT time/date pair. */ --static void exfat_time_unix2fat(struct timespec64 *ts, struct date_time_t *tp) --{ -- time64_t second = ts->tv_sec; -- struct tm tm; -- -- time64_to_tm(second, 0, &tm); -- -- if (second < UNIX_SECS_1980) { -- tp->MilliSecond = 0; -- tp->Second = 0; -- tp->Minute = 0; -- tp->Hour = 0; -- tp->Day = 1; -- tp->Month = 1; -- tp->Year = 0; -- return; -- } -- -- if (second >= UNIX_SECS_2108) { -- tp->MilliSecond = 999; -- tp->Second = 59; -- tp->Minute = 59; -- tp->Hour = 23; -- tp->Day = 31; -- tp->Month = 12; -- tp->Year = 127; -- return; -- } -- -- tp->MilliSecond = ts->tv_nsec / NSEC_PER_MSEC; -- tp->Second = tm.tm_sec; -- tp->Minute = tm.tm_min; -- tp->Hour = tm.tm_hour; -- tp->Day = tm.tm_mday; -- tp->Month = tm.tm_mon + 1; -- tp->Year = tm.tm_year + 1900 - 1980; --} -- --struct timestamp_t *tm_current(struct timestamp_t *tp) --{ -- time64_t second = ktime_get_real_seconds(); -- struct tm tm; -- -- time64_to_tm(second, 0, &tm); -- -- if (second < UNIX_SECS_1980) { -- tp->sec = 0; -- tp->min = 0; -- tp->hour = 0; -- tp->day = 1; -- tp->mon = 1; -- tp->year = 0; -- return tp; -- } -- -- if (second >= UNIX_SECS_2108) { -- tp->sec = 59; -- tp->min = 59; -- tp->hour = 23; -- tp->day = 31; -- tp->mon = 12; -- tp->year = 127; -- return tp; -- } -- -- tp->sec = tm.tm_sec; -- tp->min = tm.tm_min; -- tp->hour = tm.tm_hour; -- tp->day = tm.tm_mday; -- tp->mon = tm.tm_mon + 1; -- tp->year = tm.tm_year + 1900 - 1980; -- -- return tp; --} -- --static void __lock_super(struct super_block *sb) --{ -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- -- mutex_lock(&sbi->s_lock); --} -- --static void __unlock_super(struct super_block *sb) --{ -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- -- mutex_unlock(&sbi->s_lock); --} -- --static int __is_sb_dirty(struct super_block *sb) --{ -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- -- return sbi->s_dirt; --} -- --static void __set_sb_clean(struct super_block *sb) --{ -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- -- sbi->s_dirt = 0; --} -- --static int __exfat_revalidate(struct dentry *dentry) --{ -- return 0; --} -- --static int exfat_revalidate(struct dentry *dentry, unsigned int flags) --{ -- if (flags & LOOKUP_RCU) -- return -ECHILD; -- -- if (dentry->d_inode) -- return 1; -- return __exfat_revalidate(dentry); --} -- --static int exfat_revalidate_ci(struct dentry *dentry, unsigned int flags) --{ -- if (flags & LOOKUP_RCU) -- return -ECHILD; -- -- if (dentry->d_inode) -- return 1; -- -- if (!flags) -- return 0; -- -- if (flags & (LOOKUP_CREATE | LOOKUP_RENAME_TARGET)) -- return 0; -- -- return __exfat_revalidate(dentry); --} -- --static unsigned int __exfat_striptail_len(unsigned int len, const char *name) --{ -- while (len && name[len - 1] == '.') -- len--; -- return len; --} -- --static unsigned int exfat_striptail_len(const struct qstr *qstr) --{ -- return __exfat_striptail_len(qstr->len, qstr->name); --} -- --static int exfat_d_hash(const struct dentry *dentry, struct qstr *qstr) --{ -- qstr->hash = full_name_hash(dentry, qstr->name, -- exfat_striptail_len(qstr)); -- return 0; --} -- --static int exfat_d_hashi(const struct dentry *dentry, struct qstr *qstr) --{ -- struct super_block *sb = dentry->d_sb; -- const unsigned char *name; -- unsigned int len; -- unsigned long hash; -- -- name = qstr->name; -- len = exfat_striptail_len(qstr); -- -- hash = init_name_hash(dentry); -- while (len--) -- hash = partial_name_hash(nls_upper(sb, *name++), hash); -- qstr->hash = end_name_hash(hash); -- -- return 0; --} -- --static int exfat_cmpi(const struct dentry *dentry, unsigned int len, -- const char *str, const struct qstr *name) --{ -- struct nls_table *t = EXFAT_SB(dentry->d_sb)->nls_io; -- unsigned int alen, blen; -- -- alen = exfat_striptail_len(name); -- blen = __exfat_striptail_len(len, str); -- if (alen == blen) { -- if (!t) { -- if (strncasecmp(name->name, str, alen) == 0) -- return 0; -- } else { -- if (nls_strnicmp(t, name->name, str, alen) == 0) -- return 0; -- } -- } -- return 1; --} -- --static int exfat_cmp(const struct dentry *dentry, unsigned int len, -- const char *str, const struct qstr *name) --{ -- unsigned int alen, blen; -- -- alen = exfat_striptail_len(name); -- blen = __exfat_striptail_len(len, str); -- if (alen == blen) { -- if (strncmp(name->name, str, alen) == 0) -- return 0; -- } -- return 1; --} -- --static const struct dentry_operations exfat_ci_dentry_ops = { -- .d_revalidate = exfat_revalidate_ci, -- .d_hash = exfat_d_hashi, -- .d_compare = exfat_cmpi, --}; -- --static const struct dentry_operations exfat_dentry_ops = { -- .d_revalidate = exfat_revalidate, -- .d_hash = exfat_d_hash, -- .d_compare = exfat_cmp, --}; -- --static DEFINE_MUTEX(z_mutex); -- --static inline void fs_sync(struct super_block *sb, bool do_sync) --{ -- if (do_sync) -- exfat_bdev_sync(sb); --} -- --/* -- * If ->i_mode can't hold S_IWUGO (i.e. ATTR_RO), we use ->i_attrs to -- * save ATTR_RO instead of ->i_mode. -- * -- * If it's directory and !sbi->options.rodir, ATTR_RO isn't read-only -- * bit, it's just used as flag for app. -- */ --static inline int exfat_mode_can_hold_ro(struct inode *inode) --{ -- struct exfat_sb_info *sbi = EXFAT_SB(inode->i_sb); -- -- if (S_ISDIR(inode->i_mode)) -- return 0; -- -- if ((~sbi->options.fs_fmask) & 0222) -- return 1; -- return 0; --} -- --/* Convert attribute bits and a mask to the UNIX mode. */ --static inline mode_t exfat_make_mode(struct exfat_sb_info *sbi, u32 attr, -- mode_t mode) --{ -- if ((attr & ATTR_READONLY) && !(attr & ATTR_SUBDIR)) -- mode &= ~0222; -- -- if (attr & ATTR_SUBDIR) -- return (mode & ~sbi->options.fs_dmask) | S_IFDIR; -- else if (attr & ATTR_SYMLINK) -- return (mode & ~sbi->options.fs_dmask) | S_IFLNK; -- else -- return (mode & ~sbi->options.fs_fmask) | S_IFREG; --} -- --/* Return the FAT attribute byte for this inode */ --static inline u32 exfat_make_attr(struct inode *inode) --{ -- if (exfat_mode_can_hold_ro(inode) && !(inode->i_mode & 0222)) -- return (EXFAT_I(inode)->fid.attr) | ATTR_READONLY; -- else -- return EXFAT_I(inode)->fid.attr; --} -- --static inline void exfat_save_attr(struct inode *inode, u32 attr) --{ -- if (exfat_mode_can_hold_ro(inode)) -- EXFAT_I(inode)->fid.attr = attr & ATTR_RWMASK; -- else -- EXFAT_I(inode)->fid.attr = attr & (ATTR_RWMASK | ATTR_READONLY); --} -- --static int ffsMountVol(struct super_block *sb) --{ -- int i, ret; -- struct pbr_sector_t *p_pbr; -- struct buffer_head *tmp_bh = NULL; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- -- pr_info("[EXFAT] trying to mount...\n"); -- -- mutex_lock(&z_mutex); -- -- exfat_buf_init(sb); -- -- mutex_init(&p_fs->v_mutex); -- p_fs->dev_ejected = 0; -- -- /* open the block device */ -- exfat_bdev_open(sb); -- -- if (p_bd->sector_size < sb->s_blocksize) { -- printk(KERN_INFO "EXFAT: mount failed - sector size %d less than blocksize %ld\n", -- p_bd->sector_size, sb->s_blocksize); -- ret = -EINVAL; -- goto out; -- } -- if (p_bd->sector_size > sb->s_blocksize) -- sb_set_blocksize(sb, p_bd->sector_size); -- -- /* read Sector 0 */ -- if (sector_read(sb, 0, &tmp_bh, 1) != 0) { -- ret = -EIO; -- goto out; -- } -- -- p_fs->PBR_sector = 0; -- -- p_pbr = (struct pbr_sector_t *)tmp_bh->b_data; -- -- /* check the validity of PBR */ -- if (GET16_A(p_pbr->signature) != PBR_SIGNATURE) { -- brelse(tmp_bh); -- exfat_bdev_close(sb); -- ret = -EFSCORRUPTED; -- goto out; -- } -- -- /* fill fs_struct */ -- for (i = 0; i < 53; i++) -- if (p_pbr->bpb[i]) -- break; -- -- if (i < 53) { -- /* Not sure how we'd get here, but complain if it does */ -- ret = -EINVAL; -- pr_info("EXFAT: Attempted to mount VFAT filesystem\n"); -- goto out; -- } else { -- ret = exfat_mount(sb, p_pbr); -- } -- -- brelse(tmp_bh); -- -- if (ret) { -- exfat_bdev_close(sb); -- goto out; -- } -- -- ret = load_alloc_bitmap(sb); -- if (ret) { -- exfat_bdev_close(sb); -- goto out; -- } -- ret = load_upcase_table(sb); -- if (ret) { -- free_alloc_bitmap(sb); -- exfat_bdev_close(sb); -- goto out; -- } -- -- if (p_fs->dev_ejected) { -- free_upcase_table(sb); -- free_alloc_bitmap(sb); -- exfat_bdev_close(sb); -- ret = -EIO; -- goto out; -- } -- -- pr_info("[EXFAT] mounted successfully\n"); -- --out: -- mutex_unlock(&z_mutex); -- -- return ret; --} -- --static int ffsUmountVol(struct super_block *sb) --{ -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- int err = 0; -- -- pr_info("[EXFAT] trying to unmount...\n"); -- -- mutex_lock(&z_mutex); -- -- /* acquire the lock for file system critical section */ -- mutex_lock(&p_fs->v_mutex); -- -- fs_sync(sb, true); -- fs_set_vol_flags(sb, VOL_CLEAN); -- -- free_upcase_table(sb); -- free_alloc_bitmap(sb); -- -- exfat_fat_release_all(sb); -- exfat_buf_release_all(sb); -- -- /* close the block device */ -- exfat_bdev_close(sb); -- -- if (p_fs->dev_ejected) { -- pr_info("[EXFAT] unmounted with media errors. Device is already ejected.\n"); -- err = -EIO; -- } -- -- exfat_buf_shutdown(sb); -- -- /* release the lock for file system critical section */ -- mutex_unlock(&p_fs->v_mutex); -- mutex_unlock(&z_mutex); -- -- pr_info("[EXFAT] unmounted successfully\n"); -- -- return err; --} -- --static int ffsGetVolInfo(struct super_block *sb, struct vol_info_t *info) --{ -- int err = 0; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- /* check the validity of pointer parameters */ -- if (!info) -- return -EINVAL; -- -- /* acquire the lock for file system critical section */ -- mutex_lock(&p_fs->v_mutex); -- -- if (p_fs->used_clusters == UINT_MAX) -- p_fs->used_clusters = exfat_count_used_clusters(sb); -- -- info->FatType = p_fs->vol_type; -- info->ClusterSize = p_fs->cluster_size; -- info->NumClusters = p_fs->num_clusters - 2; /* clu 0 & 1 */ -- info->UsedClusters = p_fs->used_clusters; -- info->FreeClusters = info->NumClusters - info->UsedClusters; -- -- if (p_fs->dev_ejected) -- err = -EIO; -- -- /* release the lock for file system critical section */ -- mutex_unlock(&p_fs->v_mutex); -- -- return err; --} -- --static int ffsSyncVol(struct super_block *sb, bool do_sync) --{ -- int err = 0; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- /* acquire the lock for file system critical section */ -- mutex_lock(&p_fs->v_mutex); -- -- /* synchronize the file system */ -- fs_sync(sb, do_sync); -- fs_set_vol_flags(sb, VOL_CLEAN); -- -- if (p_fs->dev_ejected) -- err = -EIO; -- -- /* release the lock for file system critical section */ -- mutex_unlock(&p_fs->v_mutex); -- -- return err; --} -- --/*----------------------------------------------------------------------*/ --/* File Operation Functions */ --/*----------------------------------------------------------------------*/ -- --static int ffsLookupFile(struct inode *inode, char *path, struct file_id_t *fid) --{ -- int ret, dentry, num_entries; -- struct chain_t dir; -- struct uni_name_t uni_name; -- struct dos_name_t dos_name; -- struct dentry_t *ep, *ep2; -- struct entry_set_cache_t *es = NULL; -- struct super_block *sb = inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- pr_debug("%s entered\n", __func__); -- -- /* check the validity of pointer parameters */ -- if (!fid || !path || (*path == '\0')) -- return -EINVAL; -- -- /* acquire the lock for file system critical section */ -- mutex_lock(&p_fs->v_mutex); -- -- /* check the validity of directory name in the given pathname */ -- ret = resolve_path(inode, path, &dir, &uni_name); -- if (ret) -- goto out; -- -- ret = get_num_entries_and_dos_name(sb, &dir, &uni_name, &num_entries, -- &dos_name); -- if (ret) -- goto out; -- -- /* search the file name for directories */ -- dentry = exfat_find_dir_entry(sb, &dir, &uni_name, num_entries, -- &dos_name, TYPE_ALL); -- if (dentry < -1) { -- ret = -ENOENT; -- goto out; -- } -- -- fid->dir.dir = dir.dir; -- fid->dir.size = dir.size; -- fid->dir.flags = dir.flags; -- fid->entry = dentry; -- -- if (dentry == -1) { -- fid->type = TYPE_DIR; -- fid->rwoffset = 0; -- fid->hint_last_off = -1; -- -- fid->attr = ATTR_SUBDIR; -- fid->flags = 0x01; -- fid->size = 0; -- fid->start_clu = p_fs->root_dir; -- } else { -- es = get_entry_set_in_dir(sb, &dir, dentry, -- ES_2_ENTRIES, &ep); -- if (!es) { -- ret = -ENOENT; -- goto out; -- } -- ep2 = ep + 1; -- -- fid->type = exfat_get_entry_type(ep); -- fid->rwoffset = 0; -- fid->hint_last_off = -1; -- fid->attr = exfat_get_entry_attr(ep); -- -- fid->size = exfat_get_entry_size(ep2); -- if ((fid->type == TYPE_FILE) && (fid->size == 0)) { -- fid->flags = (p_fs->vol_type == EXFAT) ? 0x03 : 0x01; -- fid->start_clu = CLUSTER_32(~0); -- } else { -- fid->flags = exfat_get_entry_flag(ep2); -- fid->start_clu = exfat_get_entry_clu0(ep2); -- } -- -- release_entry_set(es); -- } -- -- if (p_fs->dev_ejected) -- ret = -EIO; --out: -- /* release the lock for file system critical section */ -- mutex_unlock(&p_fs->v_mutex); -- -- return ret; --} -- --static int ffsCreateFile(struct inode *inode, char *path, u8 mode, -- struct file_id_t *fid) --{ -- struct chain_t dir; -- struct uni_name_t uni_name; -- struct super_block *sb = inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- int ret = 0; -- -- /* check the validity of pointer parameters */ -- if (!fid || !path || (*path == '\0')) -- return -EINVAL; -- -- /* acquire the lock for file system critical section */ -- mutex_lock(&p_fs->v_mutex); -- -- /* check the validity of directory name in the given pathname */ -- ret = resolve_path(inode, path, &dir, &uni_name); -- if (ret) -- goto out; -- -- fs_set_vol_flags(sb, VOL_DIRTY); -- -- /* create a new file */ -- ret = create_file(inode, &dir, &uni_name, mode, fid); -- --#ifndef CONFIG_STAGING_EXFAT_DELAYED_SYNC -- fs_sync(sb, true); -- fs_set_vol_flags(sb, VOL_CLEAN); --#endif -- -- if (p_fs->dev_ejected) -- ret = -EIO; -- --out: -- /* release the lock for file system critical section */ -- mutex_unlock(&p_fs->v_mutex); -- -- return ret; --} -- --static int ffsReadFile(struct inode *inode, struct file_id_t *fid, void *buffer, -- u64 count, u64 *rcount) --{ -- s32 offset, sec_offset, clu_offset; -- u32 clu; -- int ret = 0; -- sector_t LogSector; -- u64 oneblkread, read_bytes; -- struct buffer_head *tmp_bh = NULL; -- struct super_block *sb = inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- -- /* check the validity of the given file id */ -- if (!fid) -- return -EINVAL; -- -- /* check the validity of pointer parameters */ -- if (!buffer) -- return -EINVAL; -- -- /* acquire the lock for file system critical section */ -- mutex_lock(&p_fs->v_mutex); -- -- /* check if the given file ID is opened */ -- if (fid->type != TYPE_FILE) { -- ret = -EPERM; -- goto out; -- } -- -- if (fid->rwoffset > fid->size) -- fid->rwoffset = fid->size; -- -- if (count > (fid->size - fid->rwoffset)) -- count = fid->size - fid->rwoffset; -- -- if (count == 0) { -- if (rcount) -- *rcount = 0; -- ret = 0; -- goto out; -- } -- -- read_bytes = 0; -- -- while (count > 0) { -- clu_offset = (s32)(fid->rwoffset >> p_fs->cluster_size_bits); -- clu = fid->start_clu; -- -- if (fid->flags == 0x03) { -- clu += clu_offset; -- } else { -- /* hint information */ -- if ((clu_offset > 0) && (fid->hint_last_off > 0) && -- (clu_offset >= fid->hint_last_off)) { -- clu_offset -= fid->hint_last_off; -- clu = fid->hint_last_clu; -- } -- -- while (clu_offset > 0) { -- /* clu = exfat_fat_read(sb, clu); */ -- if (exfat_fat_read(sb, clu, &clu) == -1) { -- ret = -EIO; -- goto out; -- } -- -- clu_offset--; -- } -- } -- -- /* hint information */ -- fid->hint_last_off = (s32)(fid->rwoffset >> -- p_fs->cluster_size_bits); -- fid->hint_last_clu = clu; -- -- /* byte offset in cluster */ -- offset = (s32)(fid->rwoffset & (p_fs->cluster_size - 1)); -- -- /* sector offset in cluster */ -- sec_offset = offset >> p_bd->sector_size_bits; -- -- /* byte offset in sector */ -- offset &= p_bd->sector_size_mask; -- -- LogSector = START_SECTOR(clu) + sec_offset; -- -- oneblkread = (u64)(p_bd->sector_size - offset); -- if (oneblkread > count) -- oneblkread = count; -- -- if ((offset == 0) && (oneblkread == p_bd->sector_size)) { -- if (sector_read(sb, LogSector, &tmp_bh, 1) != -- 0) -- goto err_out; -- memcpy((char *)buffer + read_bytes, -- (char *)tmp_bh->b_data, (s32)oneblkread); -- } else { -- if (sector_read(sb, LogSector, &tmp_bh, 1) != -- 0) -- goto err_out; -- memcpy((char *)buffer + read_bytes, -- (char *)tmp_bh->b_data + offset, -- (s32)oneblkread); -- } -- count -= oneblkread; -- read_bytes += oneblkread; -- fid->rwoffset += oneblkread; -- } -- brelse(tmp_bh); -- --/* How did this ever work and not leak a brlse()?? */ --err_out: -- /* set the size of read bytes */ -- if (rcount) -- *rcount = read_bytes; -- -- if (p_fs->dev_ejected) -- ret = -EIO; -- --out: -- /* release the lock for file system critical section */ -- mutex_unlock(&p_fs->v_mutex); -- -- return ret; --} -- --static int ffsWriteFile(struct inode *inode, struct file_id_t *fid, -- void *buffer, u64 count, u64 *wcount) --{ -- bool modified = false; -- s32 offset, sec_offset, clu_offset; -- s32 num_clusters, num_alloc, num_alloced = (s32)~0; -- int ret = 0; -- u32 clu, last_clu; -- sector_t LogSector; -- u64 oneblkwrite, write_bytes; -- struct chain_t new_clu; -- struct timestamp_t tm; -- struct dentry_t *ep, *ep2; -- struct entry_set_cache_t *es = NULL; -- struct buffer_head *tmp_bh = NULL; -- struct super_block *sb = inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- -- /* check the validity of the given file id */ -- if (!fid) -- return -EINVAL; -- -- /* check the validity of pointer parameters */ -- if (!buffer) -- return -EINVAL; -- -- /* acquire the lock for file system critical section */ -- mutex_lock(&p_fs->v_mutex); -- -- /* check if the given file ID is opened */ -- if (fid->type != TYPE_FILE) { -- ret = -EPERM; -- goto out; -- } -- -- if (fid->rwoffset > fid->size) -- fid->rwoffset = fid->size; -- -- if (count == 0) { -- if (wcount) -- *wcount = 0; -- ret = 0; -- goto out; -- } -- -- fs_set_vol_flags(sb, VOL_DIRTY); -- -- if (fid->size == 0) -- num_clusters = 0; -- else -- num_clusters = (s32)((fid->size - 1) >> -- p_fs->cluster_size_bits) + 1; -- -- write_bytes = 0; -- -- while (count > 0) { -- clu_offset = (s32)(fid->rwoffset >> p_fs->cluster_size_bits); -- clu = fid->start_clu; -- last_clu = fid->start_clu; -- -- if (fid->flags == 0x03) { -- if ((clu_offset > 0) && (clu != CLUSTER_32(~0))) { -- last_clu += clu_offset - 1; -- -- if (clu_offset == num_clusters) -- clu = CLUSTER_32(~0); -- else -- clu += clu_offset; -- } -- } else { -- /* hint information */ -- if ((clu_offset > 0) && (fid->hint_last_off > 0) && -- (clu_offset >= fid->hint_last_off)) { -- clu_offset -= fid->hint_last_off; -- clu = fid->hint_last_clu; -- } -- -- while ((clu_offset > 0) && (clu != CLUSTER_32(~0))) { -- last_clu = clu; -- /* clu = exfat_fat_read(sb, clu); */ -- if (exfat_fat_read(sb, clu, &clu) == -1) { -- ret = -EIO; -- goto out; -- } -- clu_offset--; -- } -- } -- -- if (clu == CLUSTER_32(~0)) { -- num_alloc = (s32)((count - 1) >> -- p_fs->cluster_size_bits) + 1; -- new_clu.dir = (last_clu == CLUSTER_32(~0)) ? -- CLUSTER_32(~0) : last_clu + 1; -- new_clu.size = 0; -- new_clu.flags = fid->flags; -- -- /* (1) allocate a chain of clusters */ -- num_alloced = exfat_alloc_cluster(sb, -- num_alloc, -- &new_clu); -- if (num_alloced == 0) -- break; -- if (num_alloced < 0) { -- ret = num_alloced; -- goto out; -- } -- -- /* (2) append to the FAT chain */ -- if (last_clu == CLUSTER_32(~0)) { -- if (new_clu.flags == 0x01) -- fid->flags = 0x01; -- fid->start_clu = new_clu.dir; -- modified = true; -- } else { -- if (new_clu.flags != fid->flags) { -- exfat_chain_cont_cluster(sb, -- fid->start_clu, -- num_clusters); -- fid->flags = 0x01; -- modified = true; -- } -- if (new_clu.flags == 0x01) -- exfat_fat_write(sb, last_clu, new_clu.dir); -- } -- -- num_clusters += num_alloced; -- clu = new_clu.dir; -- } -- -- /* hint information */ -- fid->hint_last_off = (s32)(fid->rwoffset >> -- p_fs->cluster_size_bits); -- fid->hint_last_clu = clu; -- -- /* byte offset in cluster */ -- offset = (s32)(fid->rwoffset & (p_fs->cluster_size - 1)); -- -- /* sector offset in cluster */ -- sec_offset = offset >> p_bd->sector_size_bits; -- -- /* byte offset in sector */ -- offset &= p_bd->sector_size_mask; -- -- LogSector = START_SECTOR(clu) + sec_offset; -- -- oneblkwrite = (u64)(p_bd->sector_size - offset); -- if (oneblkwrite > count) -- oneblkwrite = count; -- -- if ((offset == 0) && (oneblkwrite == p_bd->sector_size)) { -- if (sector_read(sb, LogSector, &tmp_bh, 0) != -- 0) -- goto err_out; -- memcpy((char *)tmp_bh->b_data, -- (char *)buffer + write_bytes, (s32)oneblkwrite); -- if (sector_write(sb, LogSector, tmp_bh, 0) != -- 0) { -- brelse(tmp_bh); -- goto err_out; -- } -- } else { -- if ((offset > 0) || -- ((fid->rwoffset + oneblkwrite) < fid->size)) { -- if (sector_read(sb, LogSector, &tmp_bh, 1) != -- 0) -- goto err_out; -- } else { -- if (sector_read(sb, LogSector, &tmp_bh, 0) != -- 0) -- goto err_out; -- } -- -- memcpy((char *)tmp_bh->b_data + offset, -- (char *)buffer + write_bytes, (s32)oneblkwrite); -- if (sector_write(sb, LogSector, tmp_bh, 0) != -- 0) { -- brelse(tmp_bh); -- goto err_out; -- } -- } -- -- count -= oneblkwrite; -- write_bytes += oneblkwrite; -- fid->rwoffset += oneblkwrite; -- -- fid->attr |= ATTR_ARCHIVE; -- -- if (fid->size < fid->rwoffset) { -- fid->size = fid->rwoffset; -- modified = true; -- } -- } -- -- brelse(tmp_bh); -- -- /* (3) update the direcoty entry */ -- es = get_entry_set_in_dir(sb, &fid->dir, fid->entry, -- ES_ALL_ENTRIES, &ep); -- if (!es) -- goto err_out; -- ep2 = ep + 1; -- -- exfat_set_entry_time(ep, tm_current(&tm), TM_MODIFY); -- exfat_set_entry_attr(ep, fid->attr); -- -- if (modified) { -- if (exfat_get_entry_flag(ep2) != fid->flags) -- exfat_set_entry_flag(ep2, fid->flags); -- -- if (exfat_get_entry_size(ep2) != fid->size) -- exfat_set_entry_size(ep2, fid->size); -- -- if (exfat_get_entry_clu0(ep2) != fid->start_clu) -- exfat_set_entry_clu0(ep2, fid->start_clu); -- } -- -- update_dir_checksum_with_entry_set(sb, es); -- release_entry_set(es); -- --#ifndef CONFIG_STAGING_EXFAT_DELAYED_SYNC -- fs_sync(sb, true); -- fs_set_vol_flags(sb, VOL_CLEAN); --#endif -- --err_out: -- /* set the size of written bytes */ -- if (wcount) -- *wcount = write_bytes; -- -- if (num_alloced == 0) -- ret = -ENOSPC; -- -- else if (p_fs->dev_ejected) -- ret = -EIO; -- --out: -- /* release the lock for file system critical section */ -- mutex_unlock(&p_fs->v_mutex); -- -- return ret; --} -- --static int ffsTruncateFile(struct inode *inode, u64 old_size, u64 new_size) --{ -- s32 num_clusters; -- u32 last_clu = CLUSTER_32(0); -- int ret = 0; -- struct chain_t clu; -- struct timestamp_t tm; -- struct dentry_t *ep, *ep2; -- struct super_block *sb = inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct file_id_t *fid = &(EXFAT_I(inode)->fid); -- struct entry_set_cache_t *es = NULL; -- -- pr_debug("%s entered (inode %p size %llu)\n", __func__, inode, -- new_size); -- -- /* acquire the lock for file system critical section */ -- mutex_lock(&p_fs->v_mutex); -- -- /* check if the given file ID is opened */ -- if (fid->type != TYPE_FILE) { -- ret = -EPERM; -- goto out; -- } -- -- if (fid->size != old_size) { -- pr_err("[EXFAT] truncate : can't skip it because of size-mismatch(old:%lld->fid:%lld).\n", -- old_size, fid->size); -- } -- -- if (old_size <= new_size) { -- ret = 0; -- goto out; -- } -- -- fs_set_vol_flags(sb, VOL_DIRTY); -- -- clu.dir = fid->start_clu; -- clu.size = (s32)((old_size - 1) >> p_fs->cluster_size_bits) + 1; -- clu.flags = fid->flags; -- -- if (new_size > 0) { -- num_clusters = (s32)((new_size - 1) >> -- p_fs->cluster_size_bits) + 1; -- -- if (clu.flags == 0x03) { -- clu.dir += num_clusters; -- } else { -- while (num_clusters > 0) { -- last_clu = clu.dir; -- if (exfat_fat_read(sb, clu.dir, &clu.dir) == -1) { -- ret = -EIO; -- goto out; -- } -- num_clusters--; -- } -- } -- -- clu.size -= num_clusters; -- } -- -- fid->size = new_size; -- fid->attr |= ATTR_ARCHIVE; -- if (new_size == 0) { -- fid->flags = (p_fs->vol_type == EXFAT) ? 0x03 : 0x01; -- fid->start_clu = CLUSTER_32(~0); -- } -- -- /* (1) update the directory entry */ -- es = get_entry_set_in_dir(sb, &fid->dir, fid->entry, -- ES_ALL_ENTRIES, &ep); -- if (!es) { -- ret = -ENOENT; -- goto out; -- } -- ep2 = ep + 1; -- -- exfat_set_entry_time(ep, tm_current(&tm), TM_MODIFY); -- exfat_set_entry_attr(ep, fid->attr); -- -- exfat_set_entry_size(ep2, new_size); -- if (new_size == 0) { -- exfat_set_entry_flag(ep2, 0x01); -- exfat_set_entry_clu0(ep2, CLUSTER_32(0)); -- } -- -- update_dir_checksum_with_entry_set(sb, es); -- release_entry_set(es); -- -- /* (2) cut off from the FAT chain */ -- if (last_clu != CLUSTER_32(0)) { -- if (fid->flags == 0x01) -- exfat_fat_write(sb, last_clu, CLUSTER_32(~0)); -- } -- -- /* (3) free the clusters */ -- exfat_free_cluster(sb, &clu, 0); -- -- /* hint information */ -- fid->hint_last_off = -1; -- if (fid->rwoffset > fid->size) -- fid->rwoffset = fid->size; -- --#ifndef CONFIG_STAGING_EXFAT_DELAYED_SYNC -- fs_sync(sb, true); -- fs_set_vol_flags(sb, VOL_CLEAN); --#endif -- -- if (p_fs->dev_ejected) -- ret = -EIO; -- --out: -- pr_debug("%s exited (%d)\n", __func__, ret); -- /* release the lock for file system critical section */ -- mutex_unlock(&p_fs->v_mutex); -- -- return ret; --} -- --static void update_parent_info(struct file_id_t *fid, -- struct inode *parent_inode) --{ -- struct fs_info_t *p_fs = &(EXFAT_SB(parent_inode->i_sb)->fs_info); -- struct file_id_t *parent_fid = &(EXFAT_I(parent_inode)->fid); -- -- if (unlikely((parent_fid->flags != fid->dir.flags) || -- (parent_fid->size != -- (fid->dir.size << p_fs->cluster_size_bits)) || -- (parent_fid->start_clu != fid->dir.dir))) { -- fid->dir.dir = parent_fid->start_clu; -- fid->dir.flags = parent_fid->flags; -- fid->dir.size = ((parent_fid->size + (p_fs->cluster_size - 1)) -- >> p_fs->cluster_size_bits); -- } --} -- --static int ffsMoveFile(struct inode *old_parent_inode, struct file_id_t *fid, -- struct inode *new_parent_inode, struct dentry *new_dentry) --{ -- s32 ret; -- s32 dentry; -- struct chain_t olddir, newdir; -- struct chain_t *p_dir = NULL; -- struct uni_name_t uni_name; -- struct dentry_t *ep; -- struct super_block *sb = old_parent_inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- u8 *new_path = (u8 *)new_dentry->d_name.name; -- struct inode *new_inode = new_dentry->d_inode; -- int num_entries; -- struct file_id_t *new_fid = NULL; -- s32 new_entry = 0; -- -- /* check the validity of the given file id */ -- if (!fid) -- return -EINVAL; -- -- /* check the validity of pointer parameters */ -- if (!new_path || (*new_path == '\0')) -- return -EINVAL; -- -- /* acquire the lock for file system critical section */ -- mutex_lock(&p_fs->v_mutex); -- -- update_parent_info(fid, old_parent_inode); -- -- olddir.dir = fid->dir.dir; -- olddir.size = fid->dir.size; -- olddir.flags = fid->dir.flags; -- -- dentry = fid->entry; -- -- /* check if the old file is "." or ".." */ -- if (p_fs->vol_type != EXFAT) { -- if ((olddir.dir != p_fs->root_dir) && (dentry < 2)) { -- ret = -EPERM; -- goto out2; -- } -- } -- -- ep = get_entry_in_dir(sb, &olddir, dentry, NULL); -- if (!ep) { -- ret = -ENOENT; -- goto out2; -- } -- -- if (exfat_get_entry_attr(ep) & ATTR_READONLY) { -- ret = -EPERM; -- goto out2; -- } -- -- /* check whether new dir is existing directory and empty */ -- if (new_inode) { -- u32 entry_type; -- -- ret = -ENOENT; -- new_fid = &EXFAT_I(new_inode)->fid; -- -- update_parent_info(new_fid, new_parent_inode); -- -- p_dir = &new_fid->dir; -- new_entry = new_fid->entry; -- ep = get_entry_in_dir(sb, p_dir, new_entry, NULL); -- if (!ep) -- goto out; -- -- entry_type = exfat_get_entry_type(ep); -- -- if (entry_type == TYPE_DIR) { -- struct chain_t new_clu; -- -- new_clu.dir = new_fid->start_clu; -- new_clu.size = (s32)((new_fid->size - 1) >> -- p_fs->cluster_size_bits) + 1; -- new_clu.flags = new_fid->flags; -- -- if (!is_dir_empty(sb, &new_clu)) { -- ret = -EEXIST; -- goto out; -- } -- } -- } -- -- /* check the validity of directory name in the given new pathname */ -- ret = resolve_path(new_parent_inode, new_path, &newdir, &uni_name); -- if (ret) -- goto out2; -- -- fs_set_vol_flags(sb, VOL_DIRTY); -- -- if (olddir.dir == newdir.dir) -- ret = exfat_rename_file(new_parent_inode, &olddir, dentry, -- &uni_name, fid); -- else -- ret = move_file(new_parent_inode, &olddir, dentry, &newdir, -- &uni_name, fid); -- -- if ((ret == 0) && new_inode) { -- /* delete entries of new_dir */ -- ep = get_entry_in_dir(sb, p_dir, new_entry, NULL); -- if (!ep) -- goto out; -- -- num_entries = exfat_count_ext_entries(sb, p_dir, -- new_entry, ep); -- if (num_entries < 0) -- goto out; -- exfat_delete_dir_entry(sb, p_dir, new_entry, 0, -- num_entries + 1); -- } --out: --#ifndef CONFIG_STAGING_EXFAT_DELAYED_SYNC -- fs_sync(sb, true); -- fs_set_vol_flags(sb, VOL_CLEAN); --#endif -- -- if (p_fs->dev_ejected) -- ret = -EIO; --out2: -- /* release the lock for file system critical section */ -- mutex_unlock(&p_fs->v_mutex); -- -- return ret; --} -- --static int ffsRemoveFile(struct inode *inode, struct file_id_t *fid) --{ -- s32 dentry; -- int ret = 0; -- struct chain_t dir, clu_to_free; -- struct dentry_t *ep; -- struct super_block *sb = inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- /* check the validity of the given file id */ -- if (!fid) -- return -EINVAL; -- -- /* acquire the lock for file system critical section */ -- mutex_lock(&p_fs->v_mutex); -- -- dir.dir = fid->dir.dir; -- dir.size = fid->dir.size; -- dir.flags = fid->dir.flags; -- -- dentry = fid->entry; -- -- ep = get_entry_in_dir(sb, &dir, dentry, NULL); -- if (!ep) { -- ret = -ENOENT; -- goto out; -- } -- -- if (exfat_get_entry_attr(ep) & ATTR_READONLY) { -- ret = -EPERM; -- goto out; -- } -- fs_set_vol_flags(sb, VOL_DIRTY); -- -- /* (1) update the directory entry */ -- remove_file(inode, &dir, dentry); -- -- clu_to_free.dir = fid->start_clu; -- clu_to_free.size = (s32)((fid->size - 1) >> p_fs->cluster_size_bits) + 1; -- clu_to_free.flags = fid->flags; -- -- /* (2) free the clusters */ -- exfat_free_cluster(sb, &clu_to_free, 0); -- -- fid->size = 0; -- fid->start_clu = CLUSTER_32(~0); -- fid->flags = (p_fs->vol_type == EXFAT) ? 0x03 : 0x01; -- --#ifndef CONFIG_STAGING_EXFAT_DELAYED_SYNC -- fs_sync(sb, true); -- fs_set_vol_flags(sb, VOL_CLEAN); --#endif -- -- if (p_fs->dev_ejected) -- ret = -EIO; --out: -- /* release the lock for file system critical section */ -- mutex_unlock(&p_fs->v_mutex); -- -- return ret; --} -- --#if 0 --/* Not currently wired up */ --static int ffsSetAttr(struct inode *inode, u32 attr) --{ -- u32 type; -- int ret = 0; -- sector_t sector = 0; -- struct dentry_t *ep; -- struct super_block *sb = inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct file_id_t *fid = &(EXFAT_I(inode)->fid); -- u8 is_dir = (fid->type == TYPE_DIR) ? 1 : 0; -- struct entry_set_cache_t *es = NULL; -- -- if (fid->attr == attr) { -- if (p_fs->dev_ejected) -- return -EIO; -- return 0; -- } -- -- if (is_dir) { -- if ((fid->dir.dir == p_fs->root_dir) && -- (fid->entry == -1)) { -- if (p_fs->dev_ejected) -- return -EIO; -- return 0; -- } -- } -- -- /* acquire the lock for file system critical section */ -- mutex_lock(&p_fs->v_mutex); -- -- /* get the directory entry of given file */ -- es = get_entry_set_in_dir(sb, &fid->dir, fid->entry, -- ES_ALL_ENTRIES, &ep); -- if (!es) { -- ret = -ENOENT; -- goto out; -- } -- -- type = exfat_get_entry_type(ep); -- -- if (((type == TYPE_FILE) && (attr & ATTR_SUBDIR)) || -- ((type == TYPE_DIR) && (!(attr & ATTR_SUBDIR)))) { -- if (p_fs->dev_ejected) -- ret = -EIO; -- else -- ret = -EINVAL; -- -- release_entry_set(es); -- goto out; -- } -- -- fs_set_vol_flags(sb, VOL_DIRTY); -- -- /* set the file attribute */ -- fid->attr = attr; -- exfat_set_entry_attr(ep, attr); -- -- update_dir_checksum_with_entry_set(sb, es); -- release_entry_set(es); -- --#ifndef CONFIG_STAGING_EXFAT_DELAYED_SYNC -- fs_sync(sb, true); -- fs_set_vol_flags(sb, VOL_CLEAN); --#endif -- -- if (p_fs->dev_ejected) -- ret = -EIO; --out: -- /* release the lock for file system critical section */ -- mutex_unlock(&p_fs->v_mutex); -- -- return ret; --} --#endif -- --static int ffsReadStat(struct inode *inode, struct dir_entry_t *info) --{ -- s32 count; -- int ret = 0; -- struct chain_t dir; -- struct uni_name_t uni_name; -- struct timestamp_t tm; -- struct dentry_t *ep, *ep2; -- struct super_block *sb = inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct file_id_t *fid = &(EXFAT_I(inode)->fid); -- struct entry_set_cache_t *es = NULL; -- u8 is_dir = (fid->type == TYPE_DIR) ? 1 : 0; -- -- pr_debug("%s entered\n", __func__); -- -- /* acquire the lock for file system critical section */ -- mutex_lock(&p_fs->v_mutex); -- -- if (is_dir) { -- if ((fid->dir.dir == p_fs->root_dir) && -- (fid->entry == -1)) { -- info->Attr = ATTR_SUBDIR; -- memset((char *)&info->CreateTimestamp, 0, -- sizeof(struct date_time_t)); -- memset((char *)&info->ModifyTimestamp, 0, -- sizeof(struct date_time_t)); -- memset((char *)&info->AccessTimestamp, 0, -- sizeof(struct date_time_t)); -- strcpy(info->ShortName, "."); -- strcpy(info->Name, "."); -- -- dir.dir = p_fs->root_dir; -- dir.flags = 0x01; -- -- if (p_fs->root_dir == CLUSTER_32(0)) { -- /* FAT16 root_dir */ -- info->Size = p_fs->dentries_in_root << -- DENTRY_SIZE_BITS; -- } else { -- info->Size = count_num_clusters(sb, &dir) << -- p_fs->cluster_size_bits; -- } -- -- count = count_dos_name_entries(sb, &dir, TYPE_DIR); -- if (count < 0) { -- ret = count; /* propagate error upward */ -- goto out; -- } -- info->NumSubdirs = count; -- -- if (p_fs->dev_ejected) -- ret = -EIO; -- goto out; -- } -- } -- -- /* get the directory entry of given file or directory */ -- es = get_entry_set_in_dir(sb, &fid->dir, fid->entry, -- ES_2_ENTRIES, &ep); -- if (!es) { -- ret = -ENOENT; -- goto out; -- } -- ep2 = ep + 1; -- -- /* set FILE_INFO structure using the acquired struct dentry_t */ -- info->Attr = exfat_get_entry_attr(ep); -- -- exfat_get_entry_time(ep, &tm, TM_CREATE); -- info->CreateTimestamp.Year = tm.year; -- info->CreateTimestamp.Month = tm.mon; -- info->CreateTimestamp.Day = tm.day; -- info->CreateTimestamp.Hour = tm.hour; -- info->CreateTimestamp.Minute = tm.min; -- info->CreateTimestamp.Second = tm.sec; -- info->CreateTimestamp.MilliSecond = 0; -- -- exfat_get_entry_time(ep, &tm, TM_MODIFY); -- info->ModifyTimestamp.Year = tm.year; -- info->ModifyTimestamp.Month = tm.mon; -- info->ModifyTimestamp.Day = tm.day; -- info->ModifyTimestamp.Hour = tm.hour; -- info->ModifyTimestamp.Minute = tm.min; -- info->ModifyTimestamp.Second = tm.sec; -- info->ModifyTimestamp.MilliSecond = 0; -- -- memset((char *)&info->AccessTimestamp, 0, sizeof(struct date_time_t)); -- -- *uni_name.name = 0x0; -- /* XXX this is very bad for exfat cuz name is already included in es. -- * API should be revised -- */ -- exfat_get_uni_name_from_ext_entry(sb, &fid->dir, fid->entry, -- uni_name.name); -- nls_uniname_to_cstring(sb, info->Name, &uni_name); -- -- info->NumSubdirs = 2; -- -- info->Size = exfat_get_entry_size(ep2); -- -- release_entry_set(es); -- -- if (is_dir) { -- dir.dir = fid->start_clu; -- dir.flags = 0x01; -- -- if (info->Size == 0) -- info->Size = (u64)count_num_clusters(sb, &dir) << -- p_fs->cluster_size_bits; -- -- count = count_dos_name_entries(sb, &dir, TYPE_DIR); -- if (count < 0) { -- ret = count; /* propagate error upward */ -- goto out; -- } -- info->NumSubdirs += count; -- } -- -- if (p_fs->dev_ejected) -- ret = -EIO; -- --out: -- /* release the lock for file system critical section */ -- mutex_unlock(&p_fs->v_mutex); -- -- pr_debug("%s exited successfully\n", __func__); -- return ret; --} -- --static int ffsWriteStat(struct inode *inode, struct dir_entry_t *info) --{ -- int ret = 0; -- struct timestamp_t tm; -- struct dentry_t *ep, *ep2; -- struct entry_set_cache_t *es = NULL; -- struct super_block *sb = inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct file_id_t *fid = &(EXFAT_I(inode)->fid); -- u8 is_dir = (fid->type == TYPE_DIR) ? 1 : 0; -- -- pr_debug("%s entered (inode %p info %p\n", __func__, inode, info); -- -- /* acquire the lock for file system critical section */ -- mutex_lock(&p_fs->v_mutex); -- -- if (is_dir) { -- if ((fid->dir.dir == p_fs->root_dir) && -- (fid->entry == -1)) { -- if (p_fs->dev_ejected) -- ret = -EIO; -- ret = 0; -- goto out; -- } -- } -- -- fs_set_vol_flags(sb, VOL_DIRTY); -- -- /* get the directory entry of given file or directory */ -- es = get_entry_set_in_dir(sb, &fid->dir, fid->entry, -- ES_ALL_ENTRIES, &ep); -- if (!es) { -- ret = -ENOENT; -- goto out; -- } -- ep2 = ep + 1; -- -- exfat_set_entry_attr(ep, info->Attr); -- -- /* set FILE_INFO structure using the acquired struct dentry_t */ -- tm.sec = info->CreateTimestamp.Second; -- tm.min = info->CreateTimestamp.Minute; -- tm.hour = info->CreateTimestamp.Hour; -- tm.day = info->CreateTimestamp.Day; -- tm.mon = info->CreateTimestamp.Month; -- tm.year = info->CreateTimestamp.Year; -- exfat_set_entry_time(ep, &tm, TM_CREATE); -- -- tm.sec = info->ModifyTimestamp.Second; -- tm.min = info->ModifyTimestamp.Minute; -- tm.hour = info->ModifyTimestamp.Hour; -- tm.day = info->ModifyTimestamp.Day; -- tm.mon = info->ModifyTimestamp.Month; -- tm.year = info->ModifyTimestamp.Year; -- exfat_set_entry_time(ep, &tm, TM_MODIFY); -- -- exfat_set_entry_size(ep2, info->Size); -- -- update_dir_checksum_with_entry_set(sb, es); -- release_entry_set(es); -- -- if (p_fs->dev_ejected) -- ret = -EIO; -- --out: -- /* release the lock for file system critical section */ -- mutex_unlock(&p_fs->v_mutex); -- -- pr_debug("%s exited (%d)\n", __func__, ret); -- -- return ret; --} -- --static int ffsMapCluster(struct inode *inode, s32 clu_offset, u32 *clu) --{ -- s32 num_clusters, num_alloced; -- bool modified = false; -- u32 last_clu; -- int ret = 0; -- struct chain_t new_clu; -- struct dentry_t *ep; -- struct entry_set_cache_t *es = NULL; -- struct super_block *sb = inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct file_id_t *fid = &(EXFAT_I(inode)->fid); -- -- /* check the validity of pointer parameters */ -- if (!clu) -- return -EINVAL; -- -- /* acquire the lock for file system critical section */ -- mutex_lock(&p_fs->v_mutex); -- -- fid->rwoffset = (s64)(clu_offset) << p_fs->cluster_size_bits; -- -- if (EXFAT_I(inode)->mmu_private == 0) -- num_clusters = 0; -- else -- num_clusters = (s32)((EXFAT_I(inode)->mmu_private - 1) >> -- p_fs->cluster_size_bits) + 1; -- -- *clu = last_clu = fid->start_clu; -- -- if (fid->flags == 0x03) { -- if ((clu_offset > 0) && (*clu != CLUSTER_32(~0))) { -- last_clu += clu_offset - 1; -- -- if (clu_offset == num_clusters) -- *clu = CLUSTER_32(~0); -- else -- *clu += clu_offset; -- } -- } else { -- /* hint information */ -- if ((clu_offset > 0) && (fid->hint_last_off > 0) && -- (clu_offset >= fid->hint_last_off)) { -- clu_offset -= fid->hint_last_off; -- *clu = fid->hint_last_clu; -- } -- -- while ((clu_offset > 0) && (*clu != CLUSTER_32(~0))) { -- last_clu = *clu; -- if (exfat_fat_read(sb, *clu, clu) == -1) { -- ret = -EIO; -- goto out; -- } -- clu_offset--; -- } -- } -- -- if (*clu == CLUSTER_32(~0)) { -- fs_set_vol_flags(sb, VOL_DIRTY); -- -- new_clu.dir = (last_clu == CLUSTER_32(~0)) ? CLUSTER_32(~0) : -- last_clu + 1; -- new_clu.size = 0; -- new_clu.flags = fid->flags; -- -- /* (1) allocate a cluster */ -- num_alloced = exfat_alloc_cluster(sb, 1, &new_clu); -- if (num_alloced < 0) { -- ret = -EIO; -- goto out; -- } else if (num_alloced == 0) { -- ret = -ENOSPC; -- goto out; -- } -- -- /* (2) append to the FAT chain */ -- if (last_clu == CLUSTER_32(~0)) { -- if (new_clu.flags == 0x01) -- fid->flags = 0x01; -- fid->start_clu = new_clu.dir; -- modified = true; -- } else { -- if (new_clu.flags != fid->flags) { -- exfat_chain_cont_cluster(sb, fid->start_clu, -- num_clusters); -- fid->flags = 0x01; -- modified = true; -- } -- if (new_clu.flags == 0x01) -- exfat_fat_write(sb, last_clu, new_clu.dir); -- } -- -- num_clusters += num_alloced; -- *clu = new_clu.dir; -- -- es = get_entry_set_in_dir(sb, &fid->dir, fid->entry, -- ES_ALL_ENTRIES, &ep); -- if (!es) { -- ret = -ENOENT; -- goto out; -- } -- /* get stream entry */ -- ep++; -- -- /* (3) update directory entry */ -- if (modified) { -- if (exfat_get_entry_flag(ep) != fid->flags) -- exfat_set_entry_flag(ep, fid->flags); -- -- if (exfat_get_entry_clu0(ep) != fid->start_clu) -- exfat_set_entry_clu0(ep, fid->start_clu); -- } -- -- update_dir_checksum_with_entry_set(sb, es); -- release_entry_set(es); -- -- /* add number of new blocks to inode */ -- inode->i_blocks += num_alloced << (p_fs->cluster_size_bits - 9); -- } -- -- /* hint information */ -- fid->hint_last_off = (s32)(fid->rwoffset >> p_fs->cluster_size_bits); -- fid->hint_last_clu = *clu; -- -- if (p_fs->dev_ejected) -- ret = -EIO; -- --out: -- /* release the lock for file system critical section */ -- mutex_unlock(&p_fs->v_mutex); -- -- return ret; --} -- --/*----------------------------------------------------------------------*/ --/* Directory Operation Functions */ --/*----------------------------------------------------------------------*/ -- --static int ffsCreateDir(struct inode *inode, char *path, struct file_id_t *fid) --{ -- int ret = 0; -- struct chain_t dir; -- struct uni_name_t uni_name; -- struct super_block *sb = inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- pr_debug("%s entered\n", __func__); -- -- /* check the validity of pointer parameters */ -- if (!fid || !path || (*path == '\0')) -- return -EINVAL; -- -- /* acquire the lock for file system critical section */ -- mutex_lock(&p_fs->v_mutex); -- -- /* check the validity of directory name in the given old pathname */ -- ret = resolve_path(inode, path, &dir, &uni_name); -- if (ret) -- goto out; -- -- fs_set_vol_flags(sb, VOL_DIRTY); -- -- ret = create_dir(inode, &dir, &uni_name, fid); -- --#ifndef CONFIG_STAGING_EXFAT_DELAYED_SYNC -- fs_sync(sb, true); -- fs_set_vol_flags(sb, VOL_CLEAN); --#endif -- -- if (p_fs->dev_ejected) -- ret = -EIO; --out: -- /* release the lock for file system critical section */ -- mutex_unlock(&p_fs->v_mutex); -- -- return ret; --} -- --static int ffsReadDir(struct inode *inode, struct dir_entry_t *dir_entry) --{ -- int i, dentry, clu_offset; -- int ret = 0; -- s32 dentries_per_clu, dentries_per_clu_bits = 0; -- u32 type; -- sector_t sector; -- struct chain_t dir, clu; -- struct uni_name_t uni_name; -- struct timestamp_t tm; -- struct dentry_t *ep; -- struct super_block *sb = inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct file_id_t *fid = &(EXFAT_I(inode)->fid); -- -- /* check the validity of pointer parameters */ -- if (!dir_entry) -- return -EINVAL; -- -- /* check if the given file ID is opened */ -- if (fid->type != TYPE_DIR) -- return -ENOTDIR; -- -- /* acquire the lock for file system critical section */ -- mutex_lock(&p_fs->v_mutex); -- -- if (fid->entry == -1) { -- dir.dir = p_fs->root_dir; -- dir.flags = 0x01; -- } else { -- dir.dir = fid->start_clu; -- dir.size = (s32)(fid->size >> p_fs->cluster_size_bits); -- dir.flags = fid->flags; -- } -- -- dentry = (s32)fid->rwoffset; -- -- if (dir.dir == CLUSTER_32(0)) { -- /* FAT16 root_dir */ -- dentries_per_clu = p_fs->dentries_in_root; -- -- if (dentry == dentries_per_clu) { -- clu.dir = CLUSTER_32(~0); -- } else { -- clu.dir = dir.dir; -- clu.size = dir.size; -- clu.flags = dir.flags; -- } -- } else { -- dentries_per_clu = p_fs->dentries_per_clu; -- dentries_per_clu_bits = ilog2(dentries_per_clu); -- -- clu_offset = dentry >> dentries_per_clu_bits; -- clu.dir = dir.dir; -- clu.size = dir.size; -- clu.flags = dir.flags; -- -- if (clu.flags == 0x03) { -- clu.dir += clu_offset; -- clu.size -= clu_offset; -- } else { -- /* hint_information */ -- if ((clu_offset > 0) && (fid->hint_last_off > 0) && -- (clu_offset >= fid->hint_last_off)) { -- clu_offset -= fid->hint_last_off; -- clu.dir = fid->hint_last_clu; -- } -- -- while (clu_offset > 0) { -- /* clu.dir = exfat_fat_read(sb, clu.dir); */ -- if (exfat_fat_read(sb, clu.dir, &clu.dir) == -1) { -- ret = -EIO; -- goto out; -- } -- clu_offset--; -- } -- } -- } -- -- while (clu.dir != CLUSTER_32(~0)) { -- if (p_fs->dev_ejected) -- break; -- -- if (dir.dir == CLUSTER_32(0)) /* FAT16 root_dir */ -- i = dentry % dentries_per_clu; -- else -- i = dentry & (dentries_per_clu - 1); -- -- for ( ; i < dentries_per_clu; i++, dentry++) { -- ep = get_entry_in_dir(sb, &clu, i, §or); -- if (!ep) { -- ret = -ENOENT; -- goto out; -- } -- type = exfat_get_entry_type(ep); -- -- if (type == TYPE_UNUSED) -- break; -- -- if ((type != TYPE_FILE) && (type != TYPE_DIR)) -- continue; -- -- exfat_buf_lock(sb, sector); -- dir_entry->Attr = exfat_get_entry_attr(ep); -- -- exfat_get_entry_time(ep, &tm, TM_CREATE); -- dir_entry->CreateTimestamp.Year = tm.year; -- dir_entry->CreateTimestamp.Month = tm.mon; -- dir_entry->CreateTimestamp.Day = tm.day; -- dir_entry->CreateTimestamp.Hour = tm.hour; -- dir_entry->CreateTimestamp.Minute = tm.min; -- dir_entry->CreateTimestamp.Second = tm.sec; -- dir_entry->CreateTimestamp.MilliSecond = 0; -- -- exfat_get_entry_time(ep, &tm, TM_MODIFY); -- dir_entry->ModifyTimestamp.Year = tm.year; -- dir_entry->ModifyTimestamp.Month = tm.mon; -- dir_entry->ModifyTimestamp.Day = tm.day; -- dir_entry->ModifyTimestamp.Hour = tm.hour; -- dir_entry->ModifyTimestamp.Minute = tm.min; -- dir_entry->ModifyTimestamp.Second = tm.sec; -- dir_entry->ModifyTimestamp.MilliSecond = 0; -- -- memset((char *)&dir_entry->AccessTimestamp, 0, -- sizeof(struct date_time_t)); -- -- *uni_name.name = 0x0; -- exfat_get_uni_name_from_ext_entry(sb, &dir, dentry, -- uni_name.name); -- nls_uniname_to_cstring(sb, dir_entry->Name, &uni_name); -- exfat_buf_unlock(sb, sector); -- -- ep = get_entry_in_dir(sb, &clu, i + 1, NULL); -- if (!ep) { -- ret = -ENOENT; -- goto out; -- } -- -- dir_entry->Size = exfat_get_entry_size(ep); -- -- /* hint information */ -- if (dir.dir == CLUSTER_32(0)) { /* FAT16 root_dir */ -- } else { -- fid->hint_last_off = dentry >> -- dentries_per_clu_bits; -- fid->hint_last_clu = clu.dir; -- } -- -- fid->rwoffset = (s64)(++dentry); -- -- if (p_fs->dev_ejected) -- ret = -EIO; -- goto out; -- } -- -- if (dir.dir == CLUSTER_32(0)) -- break; /* FAT16 root_dir */ -- -- if (clu.flags == 0x03) { -- if ((--clu.size) > 0) -- clu.dir++; -- else -- clu.dir = CLUSTER_32(~0); -- } else { -- /* clu.dir = exfat_fat_read(sb, clu.dir); */ -- if (exfat_fat_read(sb, clu.dir, &clu.dir) == -1) { -- ret = -EIO; -- goto out; -- } -- } -- } -- -- *dir_entry->Name = '\0'; -- -- fid->rwoffset = (s64)(++dentry); -- -- if (p_fs->dev_ejected) -- ret = -EIO; -- --out: -- /* release the lock for file system critical section */ -- mutex_unlock(&p_fs->v_mutex); -- -- return ret; --} -- --static int ffsRemoveDir(struct inode *inode, struct file_id_t *fid) --{ -- s32 dentry; -- int ret = 0; -- struct chain_t dir, clu_to_free; -- struct super_block *sb = inode->i_sb; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- /* check the validity of the given file id */ -- if (!fid) -- return -EINVAL; -- -- dir.dir = fid->dir.dir; -- dir.size = fid->dir.size; -- dir.flags = fid->dir.flags; -- -- dentry = fid->entry; -- -- /* check if the file is "." or ".." */ -- if (p_fs->vol_type != EXFAT) { -- if ((dir.dir != p_fs->root_dir) && (dentry < 2)) -- return -EPERM; -- } -- -- /* acquire the lock for file system critical section */ -- mutex_lock(&p_fs->v_mutex); -- -- clu_to_free.dir = fid->start_clu; -- clu_to_free.size = (s32)((fid->size - 1) >> p_fs->cluster_size_bits) + 1; -- clu_to_free.flags = fid->flags; -- -- if (!is_dir_empty(sb, &clu_to_free)) { -- ret = -ENOTEMPTY; -- goto out; -- } -- -- fs_set_vol_flags(sb, VOL_DIRTY); -- -- /* (1) update the directory entry */ -- remove_file(inode, &dir, dentry); -- -- /* (2) free the clusters */ -- exfat_free_cluster(sb, &clu_to_free, 1); -- -- fid->size = 0; -- fid->start_clu = CLUSTER_32(~0); -- fid->flags = (p_fs->vol_type == EXFAT) ? 0x03 : 0x01; -- --#ifndef CONFIG_STAGING_EXFAT_DELAYED_SYNC -- fs_sync(sb, true); -- fs_set_vol_flags(sb, VOL_CLEAN); --#endif -- -- if (p_fs->dev_ejected) -- ret = -EIO; -- --out: -- /* release the lock for file system critical section */ -- mutex_unlock(&p_fs->v_mutex); -- -- return ret; --} -- --/*======================================================================*/ --/* Directory Entry Operations */ --/*======================================================================*/ -- --static int exfat_readdir(struct file *filp, struct dir_context *ctx) --{ -- struct inode *inode = file_inode(filp); -- struct super_block *sb = inode->i_sb; -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- struct fs_info_t *p_fs = &sbi->fs_info; -- struct bd_info_t *p_bd = &(EXFAT_SB(sb)->bd_info); -- struct dir_entry_t de; -- unsigned long inum; -- loff_t cpos; -- int err = 0; -- -- __lock_super(sb); -- -- cpos = ctx->pos; -- /* Fake . and .. for the root directory. */ -- if ((p_fs->vol_type == EXFAT) || (inode->i_ino == EXFAT_ROOT_INO)) { -- while (cpos < 2) { -- if (inode->i_ino == EXFAT_ROOT_INO) -- inum = EXFAT_ROOT_INO; -- else if (cpos == 0) -- inum = inode->i_ino; -- else /* (cpos == 1) */ -- inum = parent_ino(filp->f_path.dentry); -- -- if (!dir_emit_dots(filp, ctx)) -- goto out; -- cpos++; -- ctx->pos++; -- } -- if (cpos == 2) -- cpos = 0; -- } -- if (cpos & (DENTRY_SIZE - 1)) { -- err = -ENOENT; -- goto out; -- } -- --get_new: -- EXFAT_I(inode)->fid.size = i_size_read(inode); -- EXFAT_I(inode)->fid.rwoffset = cpos >> DENTRY_SIZE_BITS; -- -- err = ffsReadDir(inode, &de); -- if (err) { -- /* at least we tried to read a sector -- * move cpos to next sector position (should be aligned) -- */ -- if (err == -EIO) { -- cpos += 1 << p_bd->sector_size_bits; -- cpos &= ~((1 << p_bd->sector_size_bits) - 1); -- } -- -- goto end_of_dir; -- } -- -- cpos = EXFAT_I(inode)->fid.rwoffset << DENTRY_SIZE_BITS; -- -- if (!de.Name[0]) -- goto end_of_dir; -- -- if (!memcmp(de.ShortName, DOS_CUR_DIR_NAME, DOS_NAME_LENGTH)) { -- inum = inode->i_ino; -- } else if (!memcmp(de.ShortName, DOS_PAR_DIR_NAME, DOS_NAME_LENGTH)) { -- inum = parent_ino(filp->f_path.dentry); -- } else { -- loff_t i_pos = ((loff_t)EXFAT_I(inode)->fid.start_clu << 32) | -- ((EXFAT_I(inode)->fid.rwoffset - 1) & 0xffffffff); -- struct inode *tmp = exfat_iget(sb, i_pos); -- -- if (tmp) { -- inum = tmp->i_ino; -- iput(tmp); -- } else { -- inum = iunique(sb, EXFAT_ROOT_INO); -- } -- } -- -- if (!dir_emit(ctx, de.Name, strlen(de.Name), inum, -- (de.Attr & ATTR_SUBDIR) ? DT_DIR : DT_REG)) -- goto out; -- -- ctx->pos = cpos; -- goto get_new; -- --end_of_dir: -- ctx->pos = cpos; --out: -- __unlock_super(sb); -- return err; --} -- --static int exfat_ioctl_volume_id(struct inode *dir) --{ -- struct super_block *sb = dir->i_sb; -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- struct fs_info_t *p_fs = &sbi->fs_info; -- -- return p_fs->vol_id; --} -- --static long exfat_generic_ioctl(struct file *filp, unsigned int cmd, -- unsigned long arg) --{ -- struct inode *inode = filp->f_path.dentry->d_inode; --#ifdef CONFIG_STAGING_EXFAT_KERNEL_DEBUG -- unsigned int flags; --#endif /* CONFIG_STAGING_EXFAT_KERNEL_DEBUG */ -- -- switch (cmd) { -- case EXFAT_IOCTL_GET_VOLUME_ID: -- return exfat_ioctl_volume_id(inode); --#ifdef CONFIG_STAGING_EXFAT_KERNEL_DEBUG -- case EXFAT_IOC_GET_DEBUGFLAGS: { -- struct super_block *sb = inode->i_sb; -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- -- flags = sbi->debug_flags; -- return put_user(flags, (int __user *)arg); -- } -- case EXFAT_IOC_SET_DEBUGFLAGS: { -- struct super_block *sb = inode->i_sb; -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- -- if (!capable(CAP_SYS_ADMIN)) -- return -EPERM; -- -- if (get_user(flags, (int __user *)arg)) -- return -EFAULT; -- -- __lock_super(sb); -- sbi->debug_flags = flags; -- __unlock_super(sb); -- -- return 0; -- } --#endif /* CONFIG_STAGING_EXFAT_KERNEL_DEBUG */ -- default: -- return -ENOTTY; /* Inappropriate ioctl for device */ -- } --} -- --static const struct file_operations exfat_dir_operations = { -- .llseek = generic_file_llseek, -- .read = generic_read_dir, -- .iterate = exfat_readdir, -- .unlocked_ioctl = exfat_generic_ioctl, -- .fsync = generic_file_fsync, --}; -- --static int exfat_create(struct inode *dir, struct dentry *dentry, umode_t mode, -- bool excl) --{ -- struct super_block *sb = dir->i_sb; -- struct timespec64 curtime; -- struct inode *inode; -- struct file_id_t fid; -- loff_t i_pos; -- int err; -- -- __lock_super(sb); -- -- pr_debug("%s entered\n", __func__); -- -- err = ffsCreateFile(dir, (u8 *)dentry->d_name.name, FM_REGULAR, &fid); -- if (err) -- goto out; -- -- INC_IVERSION(dir); -- curtime = current_time(dir); -- dir->i_ctime = curtime; -- dir->i_mtime = curtime; -- dir->i_atime = curtime; -- if (IS_DIRSYNC(dir)) -- (void)exfat_sync_inode(dir); -- else -- mark_inode_dirty(dir); -- -- i_pos = ((loff_t)fid.dir.dir << 32) | (fid.entry & 0xffffffff); -- -- inode = exfat_build_inode(sb, &fid, i_pos); -- if (IS_ERR(inode)) { -- err = PTR_ERR(inode); -- goto out; -- } -- INC_IVERSION(inode); -- curtime = current_time(inode); -- inode->i_mtime = curtime; -- inode->i_atime = curtime; -- inode->i_ctime = curtime; -- /* -- * timestamp is already written, so mark_inode_dirty() is unnecessary. -- */ -- -- dentry->d_time = GET_IVERSION(dentry->d_parent->d_inode); -- d_instantiate(dentry, inode); -- --out: -- __unlock_super(sb); -- pr_debug("%s exited\n", __func__); -- return err; --} -- --static int exfat_find(struct inode *dir, struct qstr *qname, -- struct file_id_t *fid) --{ -- int err; -- -- if (qname->len == 0) -- return -ENOENT; -- -- err = ffsLookupFile(dir, (u8 *)qname->name, fid); -- if (err) -- return -ENOENT; -- -- return 0; --} -- --static int exfat_d_anon_disconn(struct dentry *dentry) --{ -- return IS_ROOT(dentry) && (dentry->d_flags & DCACHE_DISCONNECTED); --} -- --static struct dentry *exfat_lookup(struct inode *dir, struct dentry *dentry, -- unsigned int flags) --{ -- struct super_block *sb = dir->i_sb; -- struct inode *inode; -- struct dentry *alias; -- int err; -- struct file_id_t fid; -- loff_t i_pos; -- u64 ret; -- mode_t i_mode; -- -- __lock_super(sb); -- pr_debug("%s entered\n", __func__); -- err = exfat_find(dir, &dentry->d_name, &fid); -- if (err) { -- if (err == -ENOENT) { -- inode = NULL; -- goto out; -- } -- goto error; -- } -- -- i_pos = ((loff_t)fid.dir.dir << 32) | (fid.entry & 0xffffffff); -- inode = exfat_build_inode(sb, &fid, i_pos); -- if (IS_ERR(inode)) { -- err = PTR_ERR(inode); -- goto error; -- } -- -- i_mode = inode->i_mode; -- if (S_ISLNK(i_mode) && !EXFAT_I(inode)->target) { -- EXFAT_I(inode)->target = kmalloc(i_size_read(inode) + 1, -- GFP_KERNEL); -- if (!EXFAT_I(inode)->target) { -- err = -ENOMEM; -- goto error; -- } -- ffsReadFile(dir, &fid, EXFAT_I(inode)->target, -- i_size_read(inode), &ret); -- *(EXFAT_I(inode)->target + i_size_read(inode)) = '\0'; -- } -- -- alias = d_find_alias(inode); -- if (alias && !exfat_d_anon_disconn(alias)) { -- BUG_ON(d_unhashed(alias)); -- if (!S_ISDIR(i_mode)) -- d_move(alias, dentry); -- iput(inode); -- __unlock_super(sb); -- pr_debug("%s exited 1\n", __func__); -- return alias; -- } -- dput(alias); --out: -- __unlock_super(sb); -- dentry->d_time = GET_IVERSION(dentry->d_parent->d_inode); -- dentry = d_splice_alias(inode, dentry); -- if (dentry) -- dentry->d_time = GET_IVERSION(dentry->d_parent->d_inode); -- pr_debug("%s exited 2\n", __func__); -- return dentry; -- --error: -- __unlock_super(sb); -- pr_debug("%s exited 3\n", __func__); -- return ERR_PTR(err); --} -- --static inline unsigned long exfat_hash(loff_t i_pos) --{ -- return hash_32(i_pos, EXFAT_HASH_BITS); --} -- --static void exfat_attach(struct inode *inode, loff_t i_pos) --{ -- struct exfat_sb_info *sbi = EXFAT_SB(inode->i_sb); -- struct hlist_head *head = sbi->inode_hashtable + exfat_hash(i_pos); -- -- spin_lock(&sbi->inode_hash_lock); -- EXFAT_I(inode)->i_pos = i_pos; -- hlist_add_head(&EXFAT_I(inode)->i_hash_fat, head); -- spin_unlock(&sbi->inode_hash_lock); --} -- --static void exfat_detach(struct inode *inode) --{ -- struct exfat_sb_info *sbi = EXFAT_SB(inode->i_sb); -- -- spin_lock(&sbi->inode_hash_lock); -- hlist_del_init(&EXFAT_I(inode)->i_hash_fat); -- EXFAT_I(inode)->i_pos = 0; -- spin_unlock(&sbi->inode_hash_lock); --} -- --static int exfat_unlink(struct inode *dir, struct dentry *dentry) --{ -- struct inode *inode = dentry->d_inode; -- struct super_block *sb = dir->i_sb; -- struct timespec64 curtime; -- int err; -- -- __lock_super(sb); -- -- pr_debug("%s entered\n", __func__); -- -- EXFAT_I(inode)->fid.size = i_size_read(inode); -- -- err = ffsRemoveFile(dir, &(EXFAT_I(inode)->fid)); -- if (err) -- goto out; -- -- INC_IVERSION(dir); -- curtime = current_time(dir); -- dir->i_mtime = curtime; -- dir->i_atime = curtime; -- if (IS_DIRSYNC(dir)) -- (void)exfat_sync_inode(dir); -- else -- mark_inode_dirty(dir); -- -- clear_nlink(inode); -- curtime = current_time(inode); -- inode->i_mtime = curtime; -- inode->i_atime = curtime; -- exfat_detach(inode); -- remove_inode_hash(inode); -- --out: -- __unlock_super(sb); -- pr_debug("%s exited\n", __func__); -- return err; --} -- --static int exfat_symlink(struct inode *dir, struct dentry *dentry, -- const char *target) --{ -- struct super_block *sb = dir->i_sb; -- struct timespec64 curtime; -- struct inode *inode; -- struct file_id_t fid; -- loff_t i_pos; -- int err; -- u64 len = (u64)strlen(target); -- u64 ret; -- -- __lock_super(sb); -- -- pr_debug("%s entered\n", __func__); -- -- err = ffsCreateFile(dir, (u8 *)dentry->d_name.name, FM_SYMLINK, &fid); -- if (err) -- goto out; -- -- -- err = ffsWriteFile(dir, &fid, (char *)target, len, &ret); -- -- if (err) { -- ffsRemoveFile(dir, &fid); -- goto out; -- } -- -- INC_IVERSION(dir); -- curtime = current_time(dir); -- dir->i_ctime = curtime; -- dir->i_mtime = curtime; -- dir->i_atime = curtime; -- if (IS_DIRSYNC(dir)) -- (void)exfat_sync_inode(dir); -- else -- mark_inode_dirty(dir); -- -- i_pos = ((loff_t)fid.dir.dir << 32) | (fid.entry & 0xffffffff); -- -- inode = exfat_build_inode(sb, &fid, i_pos); -- if (IS_ERR(inode)) { -- err = PTR_ERR(inode); -- goto out; -- } -- INC_IVERSION(inode); -- curtime = current_time(inode); -- inode->i_mtime = curtime; -- inode->i_atime = curtime; -- inode->i_ctime = curtime; -- /* timestamp is already written, so mark_inode_dirty() is unneeded. */ -- -- EXFAT_I(inode)->target = kmemdup(target, len + 1, GFP_KERNEL); -- if (!EXFAT_I(inode)->target) { -- err = -ENOMEM; -- goto out; -- } -- -- dentry->d_time = GET_IVERSION(dentry->d_parent->d_inode); -- d_instantiate(dentry, inode); -- --out: -- __unlock_super(sb); -- pr_debug("%s exited\n", __func__); -- return err; --} -- --static int exfat_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) --{ -- struct super_block *sb = dir->i_sb; -- struct timespec64 curtime; -- struct inode *inode; -- struct file_id_t fid; -- loff_t i_pos; -- int err; -- -- __lock_super(sb); -- -- pr_debug("%s entered\n", __func__); -- -- err = ffsCreateDir(dir, (u8 *)dentry->d_name.name, &fid); -- if (err) -- goto out; -- -- INC_IVERSION(dir); -- curtime = current_time(dir); -- dir->i_ctime = curtime; -- dir->i_mtime = curtime; -- dir->i_atime = curtime; -- if (IS_DIRSYNC(dir)) -- (void)exfat_sync_inode(dir); -- else -- mark_inode_dirty(dir); -- inc_nlink(dir); -- -- i_pos = ((loff_t)fid.dir.dir << 32) | (fid.entry & 0xffffffff); -- -- inode = exfat_build_inode(sb, &fid, i_pos); -- if (IS_ERR(inode)) { -- err = PTR_ERR(inode); -- goto out; -- } -- INC_IVERSION(inode); -- curtime = current_time(inode); -- inode->i_mtime = curtime; -- inode->i_atime = curtime; -- inode->i_ctime = curtime; -- /* timestamp is already written, so mark_inode_dirty() is unneeded. */ -- -- dentry->d_time = GET_IVERSION(dentry->d_parent->d_inode); -- d_instantiate(dentry, inode); -- --out: -- __unlock_super(sb); -- pr_debug("%s exited\n", __func__); -- return err; --} -- --static int exfat_rmdir(struct inode *dir, struct dentry *dentry) --{ -- struct inode *inode = dentry->d_inode; -- struct super_block *sb = dir->i_sb; -- struct timespec64 curtime; -- int err; -- -- __lock_super(sb); -- -- pr_debug("%s entered\n", __func__); -- -- EXFAT_I(inode)->fid.size = i_size_read(inode); -- -- err = ffsRemoveDir(dir, &(EXFAT_I(inode)->fid)); -- if (err) -- goto out; -- -- INC_IVERSION(dir); -- curtime = current_time(dir); -- dir->i_mtime = curtime; -- dir->i_atime = curtime; -- if (IS_DIRSYNC(dir)) -- (void)exfat_sync_inode(dir); -- else -- mark_inode_dirty(dir); -- drop_nlink(dir); -- -- clear_nlink(inode); -- curtime = current_time(inode); -- inode->i_mtime = curtime; -- inode->i_atime = curtime; -- exfat_detach(inode); -- remove_inode_hash(inode); -- --out: -- __unlock_super(sb); -- pr_debug("%s exited\n", __func__); -- return err; --} -- --static int exfat_rename(struct inode *old_dir, struct dentry *old_dentry, -- struct inode *new_dir, struct dentry *new_dentry, -- unsigned int flags) --{ -- struct inode *old_inode, *new_inode; -- struct super_block *sb = old_dir->i_sb; -- struct timespec64 curtime; -- loff_t i_pos; -- int err; -- -- if (flags) -- return -EINVAL; -- -- __lock_super(sb); -- -- pr_debug("%s entered\n", __func__); -- -- old_inode = old_dentry->d_inode; -- new_inode = new_dentry->d_inode; -- -- EXFAT_I(old_inode)->fid.size = i_size_read(old_inode); -- -- err = ffsMoveFile(old_dir, &(EXFAT_I(old_inode)->fid), new_dir, -- new_dentry); -- if (err) -- goto out; -- -- INC_IVERSION(new_dir); -- curtime = current_time(new_dir); -- new_dir->i_ctime = curtime; -- new_dir->i_mtime = curtime; -- new_dir->i_atime = curtime; -- -- if (IS_DIRSYNC(new_dir)) -- (void)exfat_sync_inode(new_dir); -- else -- mark_inode_dirty(new_dir); -- -- i_pos = ((loff_t)EXFAT_I(old_inode)->fid.dir.dir << 32) | -- (EXFAT_I(old_inode)->fid.entry & 0xffffffff); -- -- exfat_detach(old_inode); -- exfat_attach(old_inode, i_pos); -- if (IS_DIRSYNC(new_dir)) -- (void)exfat_sync_inode(old_inode); -- else -- mark_inode_dirty(old_inode); -- -- if ((S_ISDIR(old_inode->i_mode)) && (old_dir != new_dir)) { -- drop_nlink(old_dir); -- if (!new_inode) -- inc_nlink(new_dir); -- } -- INC_IVERSION(old_dir); -- curtime = current_time(old_dir); -- old_dir->i_ctime = curtime; -- old_dir->i_mtime = curtime; -- if (IS_DIRSYNC(old_dir)) -- (void)exfat_sync_inode(old_dir); -- else -- mark_inode_dirty(old_dir); -- -- if (new_inode) { -- exfat_detach(new_inode); -- drop_nlink(new_inode); -- if (S_ISDIR(new_inode->i_mode)) -- drop_nlink(new_inode); -- new_inode->i_ctime = current_time(new_inode); -- } -- --out: -- __unlock_super(sb); -- pr_debug("%s exited\n", __func__); -- return err; --} -- --static int exfat_cont_expand(struct inode *inode, loff_t size) --{ -- struct address_space *mapping = inode->i_mapping; -- loff_t start = i_size_read(inode), count = size - i_size_read(inode); -- struct timespec64 curtime; -- int err, err2; -- -- err = generic_cont_expand_simple(inode, size); -- if (err != 0) -- return err; -- -- curtime = current_time(inode); -- inode->i_ctime = curtime; -- inode->i_mtime = curtime; -- mark_inode_dirty(inode); -- -- if (IS_SYNC(inode)) { -- err = filemap_fdatawrite_range(mapping, start, -- start + count - 1); -- err2 = sync_mapping_buffers(mapping); -- err = (err) ? (err) : (err2); -- err2 = write_inode_now(inode, 1); -- err = (err) ? (err) : (err2); -- if (!err) -- err = filemap_fdatawait_range(mapping, start, -- start + count - 1); -- } -- return err; --} -- --static int exfat_allow_set_time(struct exfat_sb_info *sbi, struct inode *inode) --{ -- mode_t allow_utime = sbi->options.allow_utime; -- -- if (!uid_eq(current_fsuid(), inode->i_uid)) { -- if (in_group_p(inode->i_gid)) -- allow_utime >>= 3; -- if (allow_utime & MAY_WRITE) -- return 1; -- } -- -- /* use a default check */ -- return 0; --} -- --static int exfat_sanitize_mode(const struct exfat_sb_info *sbi, -- struct inode *inode, umode_t *mode_ptr) --{ -- mode_t i_mode, mask, perm; -- -- i_mode = inode->i_mode; -- -- if (S_ISREG(i_mode) || S_ISLNK(i_mode)) -- mask = sbi->options.fs_fmask; -- else -- mask = sbi->options.fs_dmask; -- -- perm = *mode_ptr & ~(S_IFMT | mask); -- -- /* Of the r and x bits, all (subject to umask) must be present.*/ -- if ((perm & 0555) != (i_mode & 0555)) -- return -EPERM; -- -- if (exfat_mode_can_hold_ro(inode)) { -- /* -- * Of the w bits, either all (subject to umask) or none must be -- * present. -- */ -- if ((perm & 0222) && ((perm & 0222) != (0222 & ~mask))) -- return -EPERM; -- } else { -- /* -- * If exfat_mode_can_hold_ro(inode) is false, can't change w -- * bits. -- */ -- if ((perm & 0222) != (0222 & ~mask)) -- return -EPERM; -- } -- -- *mode_ptr &= S_IFMT | perm; -- -- return 0; --} -- --static void exfat_truncate(struct inode *inode, loff_t old_size) --{ -- struct super_block *sb = inode->i_sb; -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- struct fs_info_t *p_fs = &sbi->fs_info; -- struct timespec64 curtime; -- int err; -- -- __lock_super(sb); -- -- /* -- * This protects against truncating a file bigger than it was then -- * trying to write into the hole. -- */ -- if (EXFAT_I(inode)->mmu_private > i_size_read(inode)) -- EXFAT_I(inode)->mmu_private = i_size_read(inode); -- -- if (EXFAT_I(inode)->fid.start_clu == 0) -- goto out; -- -- err = ffsTruncateFile(inode, old_size, i_size_read(inode)); -- if (err) -- goto out; -- -- curtime = current_time(inode); -- inode->i_ctime = curtime; -- inode->i_mtime = curtime; -- if (IS_DIRSYNC(inode)) -- (void)exfat_sync_inode(inode); -- else -- mark_inode_dirty(inode); -- -- inode->i_blocks = ((i_size_read(inode) + (p_fs->cluster_size - 1)) & -- ~((loff_t)p_fs->cluster_size - 1)) >> 9; --out: -- __unlock_super(sb); --} -- --static int exfat_setattr(struct dentry *dentry, struct iattr *attr) --{ -- struct exfat_sb_info *sbi = EXFAT_SB(dentry->d_sb); -- struct inode *inode = dentry->d_inode; -- unsigned int ia_valid; -- int error; -- loff_t old_size; -- -- pr_debug("%s entered\n", __func__); -- -- if ((attr->ia_valid & ATTR_SIZE) && -- attr->ia_size > i_size_read(inode)) { -- error = exfat_cont_expand(inode, attr->ia_size); -- if (error || attr->ia_valid == ATTR_SIZE) -- return error; -- attr->ia_valid &= ~ATTR_SIZE; -- } -- -- ia_valid = attr->ia_valid; -- -- if ((ia_valid & (ATTR_MTIME_SET | ATTR_ATIME_SET | ATTR_TIMES_SET)) && -- exfat_allow_set_time(sbi, inode)) { -- attr->ia_valid &= ~(ATTR_MTIME_SET | -- ATTR_ATIME_SET | -- ATTR_TIMES_SET); -- } -- -- error = setattr_prepare(dentry, attr); -- attr->ia_valid = ia_valid; -- if (error) -- return error; -- -- if (((attr->ia_valid & ATTR_UID) && -- (!uid_eq(attr->ia_uid, sbi->options.fs_uid))) || -- ((attr->ia_valid & ATTR_GID) && -- (!gid_eq(attr->ia_gid, sbi->options.fs_gid))) || -- ((attr->ia_valid & ATTR_MODE) && -- (attr->ia_mode & ~(S_IFREG | S_IFLNK | S_IFDIR | 0777)))) { -- return -EPERM; -- } -- -- /* -- * We don't return -EPERM here. Yes, strange, but this is too -- * old behavior. -- */ -- if (attr->ia_valid & ATTR_MODE) { -- if (exfat_sanitize_mode(sbi, inode, &attr->ia_mode) < 0) -- attr->ia_valid &= ~ATTR_MODE; -- } -- -- EXFAT_I(inode)->fid.size = i_size_read(inode); -- -- if (attr->ia_valid & ATTR_SIZE) { -- old_size = i_size_read(inode); -- down_write(&EXFAT_I(inode)->truncate_lock); -- truncate_setsize(inode, attr->ia_size); -- exfat_truncate(inode, old_size); -- up_write(&EXFAT_I(inode)->truncate_lock); -- } -- setattr_copy(inode, attr); -- mark_inode_dirty(inode); -- -- pr_debug("%s exited\n", __func__); -- return error; --} -- --static int exfat_getattr(const struct path *path, struct kstat *stat, -- u32 request_mask, unsigned int flags) --{ -- struct inode *inode = path->dentry->d_inode; -- -- pr_debug("%s entered\n", __func__); -- -- generic_fillattr(inode, stat); -- stat->blksize = EXFAT_SB(inode->i_sb)->fs_info.cluster_size; -- -- pr_debug("%s exited\n", __func__); -- return 0; --} -- --static const struct inode_operations exfat_dir_inode_operations = { -- .create = exfat_create, -- .lookup = exfat_lookup, -- .unlink = exfat_unlink, -- .symlink = exfat_symlink, -- .mkdir = exfat_mkdir, -- .rmdir = exfat_rmdir, -- .rename = exfat_rename, -- .setattr = exfat_setattr, -- .getattr = exfat_getattr, --}; -- --/*======================================================================*/ --/* File Operations */ --/*======================================================================*/ --static const char *exfat_get_link(struct dentry *dentry, struct inode *inode, -- struct delayed_call *done) --{ -- struct exfat_inode_info *ei = EXFAT_I(inode); -- -- if (ei->target) { -- char *cookie = ei->target; -- -- if (cookie) -- return (char *)(ei->target); -- } -- return NULL; --} -- --static const struct inode_operations exfat_symlink_inode_operations = { -- .get_link = exfat_get_link, --}; -- --static int exfat_file_release(struct inode *inode, struct file *filp) --{ -- struct super_block *sb = inode->i_sb; -- -- EXFAT_I(inode)->fid.size = i_size_read(inode); -- ffsSyncVol(sb, false); -- return 0; --} -- --static const struct file_operations exfat_file_operations = { -- .llseek = generic_file_llseek, -- .read_iter = generic_file_read_iter, -- .write_iter = generic_file_write_iter, -- .mmap = generic_file_mmap, -- .release = exfat_file_release, -- .unlocked_ioctl = exfat_generic_ioctl, -- .fsync = generic_file_fsync, -- .splice_read = generic_file_splice_read, --}; -- --static const struct inode_operations exfat_file_inode_operations = { -- .setattr = exfat_setattr, -- .getattr = exfat_getattr, --}; -- --/*======================================================================*/ --/* Address Space Operations */ --/*======================================================================*/ -- --static int exfat_bmap(struct inode *inode, sector_t sector, sector_t *phys, -- unsigned long *mapped_blocks, int *create) --{ -- struct super_block *sb = inode->i_sb; -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- struct fs_info_t *p_fs = &sbi->fs_info; -- const unsigned long blocksize = sb->s_blocksize; -- const unsigned char blocksize_bits = sb->s_blocksize_bits; -- sector_t last_block; -- int err, clu_offset, sec_offset; -- unsigned int cluster; -- -- *phys = 0; -- *mapped_blocks = 0; -- -- last_block = (i_size_read(inode) + (blocksize - 1)) >> blocksize_bits; -- if (sector >= last_block) { -- if (*create == 0) -- return 0; -- } else { -- *create = 0; -- } -- -- /* cluster offset */ -- clu_offset = sector >> p_fs->sectors_per_clu_bits; -- -- /* sector offset in cluster */ -- sec_offset = sector & (p_fs->sectors_per_clu - 1); -- -- EXFAT_I(inode)->fid.size = i_size_read(inode); -- -- err = ffsMapCluster(inode, clu_offset, &cluster); -- -- if (!err && (cluster != CLUSTER_32(~0))) { -- *phys = START_SECTOR(cluster) + sec_offset; -- *mapped_blocks = p_fs->sectors_per_clu - sec_offset; -- } -- -- return 0; --} -- --static int exfat_get_block(struct inode *inode, sector_t iblock, -- struct buffer_head *bh_result, int create) --{ -- struct super_block *sb = inode->i_sb; -- unsigned long max_blocks = bh_result->b_size >> inode->i_blkbits; -- int err; -- unsigned long mapped_blocks; -- sector_t phys; -- -- __lock_super(sb); -- -- err = exfat_bmap(inode, iblock, &phys, &mapped_blocks, &create); -- if (err) { -- __unlock_super(sb); -- return err; -- } -- -- if (phys) { -- max_blocks = min(mapped_blocks, max_blocks); -- if (create) { -- EXFAT_I(inode)->mmu_private += max_blocks << -- sb->s_blocksize_bits; -- set_buffer_new(bh_result); -- } -- map_bh(bh_result, sb, phys); -- } -- -- bh_result->b_size = max_blocks << sb->s_blocksize_bits; -- __unlock_super(sb); -- -- return 0; --} -- --static int exfat_readpage(struct file *file, struct page *page) --{ -- return mpage_readpage(page, exfat_get_block); --} -- --static int exfat_readpages(struct file *file, struct address_space *mapping, -- struct list_head *pages, unsigned int nr_pages) --{ -- return mpage_readpages(mapping, pages, nr_pages, exfat_get_block); --} -- --static int exfat_writepage(struct page *page, struct writeback_control *wbc) --{ -- return block_write_full_page(page, exfat_get_block, wbc); --} -- --static int exfat_writepages(struct address_space *mapping, -- struct writeback_control *wbc) --{ -- return mpage_writepages(mapping, wbc, exfat_get_block); --} -- --static void exfat_write_failed(struct address_space *mapping, loff_t to) --{ -- struct inode *inode = mapping->host; -- -- if (to > i_size_read(inode)) { -- truncate_pagecache(inode, i_size_read(inode)); -- EXFAT_I(inode)->fid.size = i_size_read(inode); -- exfat_truncate(inode, i_size_read(inode)); -- } --} -- --static int exfat_write_begin(struct file *file, struct address_space *mapping, -- loff_t pos, unsigned int len, unsigned int flags, -- struct page **pagep, void **fsdata) --{ -- int ret; -- -- *pagep = NULL; -- ret = cont_write_begin(file, mapping, pos, len, flags, pagep, fsdata, -- exfat_get_block, -- &EXFAT_I(mapping->host)->mmu_private); -- -- if (ret < 0) -- exfat_write_failed(mapping, pos + len); -- return ret; --} -- --static int exfat_write_end(struct file *file, struct address_space *mapping, -- loff_t pos, unsigned int len, unsigned int copied, -- struct page *pagep, void *fsdata) --{ -- struct inode *inode = mapping->host; -- struct file_id_t *fid = &(EXFAT_I(inode)->fid); -- struct timespec64 curtime; -- int err; -- -- err = generic_write_end(file, mapping, pos, len, copied, pagep, fsdata); -- -- if (err < len) -- exfat_write_failed(mapping, pos + len); -- -- if (!(err < 0) && !(fid->attr & ATTR_ARCHIVE)) { -- curtime = current_time(inode); -- inode->i_mtime = curtime; -- inode->i_ctime = curtime; -- fid->attr |= ATTR_ARCHIVE; -- mark_inode_dirty(inode); -- } -- return err; --} -- --static ssize_t exfat_direct_IO(struct kiocb *iocb, struct iov_iter *iter) --{ -- struct inode *inode = iocb->ki_filp->f_mapping->host; -- struct address_space *mapping = iocb->ki_filp->f_mapping; -- ssize_t ret; -- int rw; -- -- rw = iov_iter_rw(iter); -- -- if (rw == WRITE) { -- if (EXFAT_I(inode)->mmu_private < iov_iter_count(iter)) -- return 0; -- } -- ret = blockdev_direct_IO(iocb, inode, iter, exfat_get_block); -- -- if ((ret < 0) && (rw & WRITE)) -- exfat_write_failed(mapping, iov_iter_count(iter)); -- return ret; --} -- --static sector_t _exfat_bmap(struct address_space *mapping, sector_t block) --{ -- sector_t blocknr; -- -- /* exfat_get_cluster() assumes the requested blocknr isn't truncated. */ -- down_read(&EXFAT_I(mapping->host)->truncate_lock); -- blocknr = generic_block_bmap(mapping, block, exfat_get_block); -- up_read(&EXFAT_I(mapping->host)->truncate_lock); -- -- return blocknr; --} -- --static const struct address_space_operations exfat_aops = { -- .readpage = exfat_readpage, -- .readpages = exfat_readpages, -- .writepage = exfat_writepage, -- .writepages = exfat_writepages, -- .write_begin = exfat_write_begin, -- .write_end = exfat_write_end, -- .direct_IO = exfat_direct_IO, -- .bmap = _exfat_bmap --}; -- --/*======================================================================*/ --/* Super Operations */ --/*======================================================================*/ -- --static struct inode *exfat_iget(struct super_block *sb, loff_t i_pos) --{ -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- struct exfat_inode_info *info; -- struct hlist_head *head = sbi->inode_hashtable + exfat_hash(i_pos); -- struct inode *inode = NULL; -- -- spin_lock(&sbi->inode_hash_lock); -- hlist_for_each_entry(info, head, i_hash_fat) { -- BUG_ON(info->vfs_inode.i_sb != sb); -- -- if (i_pos != info->i_pos) -- continue; -- inode = igrab(&info->vfs_inode); -- if (inode) -- break; -- } -- spin_unlock(&sbi->inode_hash_lock); -- return inode; --} -- --/* doesn't deal with root inode */ --static int exfat_fill_inode(struct inode *inode, struct file_id_t *fid) --{ -- struct exfat_sb_info *sbi = EXFAT_SB(inode->i_sb); -- struct fs_info_t *p_fs = &sbi->fs_info; -- struct dir_entry_t info; -- -- memcpy(&(EXFAT_I(inode)->fid), fid, sizeof(struct file_id_t)); -- -- ffsReadStat(inode, &info); -- -- EXFAT_I(inode)->i_pos = 0; -- EXFAT_I(inode)->target = NULL; -- inode->i_uid = sbi->options.fs_uid; -- inode->i_gid = sbi->options.fs_gid; -- INC_IVERSION(inode); -- inode->i_generation = prandom_u32(); -- -- if (info.Attr & ATTR_SUBDIR) { /* directory */ -- inode->i_generation &= ~1; -- inode->i_mode = exfat_make_mode(sbi, info.Attr, 0777); -- inode->i_op = &exfat_dir_inode_operations; -- inode->i_fop = &exfat_dir_operations; -- -- i_size_write(inode, info.Size); -- EXFAT_I(inode)->mmu_private = i_size_read(inode); -- set_nlink(inode, info.NumSubdirs); -- } else if (info.Attr & ATTR_SYMLINK) { /* symbolic link */ -- inode->i_generation |= 1; -- inode->i_mode = exfat_make_mode(sbi, info.Attr, 0777); -- inode->i_op = &exfat_symlink_inode_operations; -- -- i_size_write(inode, info.Size); -- EXFAT_I(inode)->mmu_private = i_size_read(inode); -- } else { /* regular file */ -- inode->i_generation |= 1; -- inode->i_mode = exfat_make_mode(sbi, info.Attr, 0777); -- inode->i_op = &exfat_file_inode_operations; -- inode->i_fop = &exfat_file_operations; -- inode->i_mapping->a_ops = &exfat_aops; -- inode->i_mapping->nrpages = 0; -- -- i_size_write(inode, info.Size); -- EXFAT_I(inode)->mmu_private = i_size_read(inode); -- } -- exfat_save_attr(inode, info.Attr); -- -- inode->i_blocks = ((i_size_read(inode) + (p_fs->cluster_size - 1)) -- & ~((loff_t)p_fs->cluster_size - 1)) >> 9; -- -- exfat_time_fat2unix(&inode->i_mtime, &info.ModifyTimestamp); -- exfat_time_fat2unix(&inode->i_ctime, &info.CreateTimestamp); -- exfat_time_fat2unix(&inode->i_atime, &info.AccessTimestamp); -- -- return 0; --} -- --static struct inode *exfat_build_inode(struct super_block *sb, -- struct file_id_t *fid, loff_t i_pos) --{ -- struct inode *inode; -- int err; -- -- inode = exfat_iget(sb, i_pos); -- if (inode) -- goto out; -- inode = new_inode(sb); -- if (!inode) { -- inode = ERR_PTR(-ENOMEM); -- goto out; -- } -- inode->i_ino = iunique(sb, EXFAT_ROOT_INO); -- SET_IVERSION(inode, 1); -- err = exfat_fill_inode(inode, fid); -- if (err) { -- iput(inode); -- inode = ERR_PTR(err); -- goto out; -- } -- exfat_attach(inode, i_pos); -- insert_inode_hash(inode); --out: -- return inode; --} -- --static int exfat_sync_inode(struct inode *inode) --{ -- return exfat_write_inode(inode, NULL); --} -- --static struct inode *exfat_alloc_inode(struct super_block *sb) --{ -- struct exfat_inode_info *ei; -- -- ei = kmem_cache_alloc(exfat_inode_cachep, GFP_NOFS); -- if (!ei) -- return NULL; -- -- init_rwsem(&ei->truncate_lock); -- -- return &ei->vfs_inode; --} -- --static void exfat_destroy_inode(struct inode *inode) --{ -- kfree(EXFAT_I(inode)->target); -- EXFAT_I(inode)->target = NULL; -- -- kmem_cache_free(exfat_inode_cachep, EXFAT_I(inode)); --} -- --static int exfat_write_inode(struct inode *inode, struct writeback_control *wbc) --{ -- struct dir_entry_t info; -- -- if (inode->i_ino == EXFAT_ROOT_INO) -- return 0; -- -- info.Attr = exfat_make_attr(inode); -- info.Size = i_size_read(inode); -- -- exfat_time_unix2fat(&inode->i_mtime, &info.ModifyTimestamp); -- exfat_time_unix2fat(&inode->i_ctime, &info.CreateTimestamp); -- exfat_time_unix2fat(&inode->i_atime, &info.AccessTimestamp); -- -- ffsWriteStat(inode, &info); -- -- return 0; --} -- --static void exfat_evict_inode(struct inode *inode) --{ -- truncate_inode_pages(&inode->i_data, 0); -- -- if (!inode->i_nlink) -- i_size_write(inode, 0); -- invalidate_inode_buffers(inode); -- clear_inode(inode); -- exfat_detach(inode); -- -- remove_inode_hash(inode); --} -- --static void exfat_free_super(struct exfat_sb_info *sbi) --{ -- if (sbi->nls_disk) -- unload_nls(sbi->nls_disk); -- if (sbi->nls_io) -- unload_nls(sbi->nls_io); -- if (sbi->options.iocharset != exfat_default_iocharset) -- kfree(sbi->options.iocharset); -- /* mutex_init is in exfat_fill_super function. only for 3.7+ */ -- mutex_destroy(&sbi->s_lock); -- kvfree(sbi); --} -- --static void exfat_put_super(struct super_block *sb) --{ -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- -- if (__is_sb_dirty(sb)) -- exfat_write_super(sb); -- -- ffsUmountVol(sb); -- -- sb->s_fs_info = NULL; -- exfat_free_super(sbi); --} -- --static void exfat_write_super(struct super_block *sb) --{ -- __lock_super(sb); -- -- __set_sb_clean(sb); -- -- if (!sb_rdonly(sb)) -- ffsSyncVol(sb, true); -- -- __unlock_super(sb); --} -- --static int exfat_sync_fs(struct super_block *sb, int wait) --{ -- int err = 0; -- -- if (__is_sb_dirty(sb)) { -- __lock_super(sb); -- __set_sb_clean(sb); -- err = ffsSyncVol(sb, true); -- __unlock_super(sb); -- } -- -- return err; --} -- --static int exfat_statfs(struct dentry *dentry, struct kstatfs *buf) --{ -- struct super_block *sb = dentry->d_sb; -- u64 id = huge_encode_dev(sb->s_bdev->bd_dev); -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- struct vol_info_t info; -- -- if (p_fs->used_clusters == UINT_MAX) { -- if (ffsGetVolInfo(sb, &info) == -EIO) -- return -EIO; -- -- } else { -- info.FatType = p_fs->vol_type; -- info.ClusterSize = p_fs->cluster_size; -- info.NumClusters = p_fs->num_clusters - 2; -- info.UsedClusters = p_fs->used_clusters; -- info.FreeClusters = info.NumClusters - info.UsedClusters; -- -- if (p_fs->dev_ejected) -- pr_info("[EXFAT] statfs on device that is ejected\n"); -- } -- -- buf->f_type = sb->s_magic; -- buf->f_bsize = info.ClusterSize; -- buf->f_blocks = info.NumClusters; -- buf->f_bfree = info.FreeClusters; -- buf->f_bavail = info.FreeClusters; -- buf->f_fsid.val[0] = (u32)id; -- buf->f_fsid.val[1] = (u32)(id >> 32); -- buf->f_namelen = 260; -- -- return 0; --} -- --static int exfat_remount(struct super_block *sb, int *flags, char *data) --{ -- *flags |= SB_NODIRATIME; -- return 0; --} -- --static int exfat_show_options(struct seq_file *m, struct dentry *root) --{ -- struct exfat_sb_info *sbi = EXFAT_SB(root->d_sb); -- struct exfat_mount_options *opts = &sbi->options; -- -- if (__kuid_val(opts->fs_uid)) -- seq_printf(m, ",uid=%u", __kuid_val(opts->fs_uid)); -- if (__kgid_val(opts->fs_gid)) -- seq_printf(m, ",gid=%u", __kgid_val(opts->fs_gid)); -- seq_printf(m, ",fmask=%04o", opts->fs_fmask); -- seq_printf(m, ",dmask=%04o", opts->fs_dmask); -- if (opts->allow_utime) -- seq_printf(m, ",allow_utime=%04o", opts->allow_utime); -- if (sbi->nls_disk) -- seq_printf(m, ",codepage=%s", sbi->nls_disk->charset); -- if (sbi->nls_io) -- seq_printf(m, ",iocharset=%s", sbi->nls_io->charset); -- seq_printf(m, ",namecase=%u", opts->casesensitive); -- if (opts->errors == EXFAT_ERRORS_CONT) -- seq_puts(m, ",errors=continue"); -- else if (opts->errors == EXFAT_ERRORS_PANIC) -- seq_puts(m, ",errors=panic"); -- else -- seq_puts(m, ",errors=remount-ro"); --#ifdef CONFIG_STAGING_EXFAT_DISCARD -- if (opts->discard) -- seq_puts(m, ",discard"); --#endif -- return 0; --} -- --static const struct super_operations exfat_sops = { -- .alloc_inode = exfat_alloc_inode, -- .destroy_inode = exfat_destroy_inode, -- .write_inode = exfat_write_inode, -- .evict_inode = exfat_evict_inode, -- .put_super = exfat_put_super, -- .sync_fs = exfat_sync_fs, -- .statfs = exfat_statfs, -- .remount_fs = exfat_remount, -- .show_options = exfat_show_options, --}; -- --/*======================================================================*/ --/* Export Operations */ --/*======================================================================*/ -- --static struct inode *exfat_nfs_get_inode(struct super_block *sb, u64 ino, -- u32 generation) --{ -- struct inode *inode = NULL; -- -- if (ino < EXFAT_ROOT_INO) -- return inode; -- inode = ilookup(sb, ino); -- -- if (inode && generation && (inode->i_generation != generation)) { -- iput(inode); -- inode = NULL; -- } -- -- return inode; --} -- --static struct dentry *exfat_fh_to_dentry(struct super_block *sb, -- struct fid *fid, int fh_len, -- int fh_type) --{ -- return generic_fh_to_dentry(sb, fid, fh_len, fh_type, -- exfat_nfs_get_inode); --} -- --static struct dentry *exfat_fh_to_parent(struct super_block *sb, -- struct fid *fid, int fh_len, -- int fh_type) --{ -- return generic_fh_to_parent(sb, fid, fh_len, fh_type, -- exfat_nfs_get_inode); --} -- --static const struct export_operations exfat_export_ops = { -- .fh_to_dentry = exfat_fh_to_dentry, -- .fh_to_parent = exfat_fh_to_parent, --}; -- --/*======================================================================*/ --/* Super Block Read Operations */ --/*======================================================================*/ -- --enum { -- Opt_uid, -- Opt_gid, -- Opt_umask, -- Opt_dmask, -- Opt_fmask, -- Opt_allow_utime, -- Opt_codepage, -- Opt_charset, -- Opt_namecase, -- Opt_debug, -- Opt_err_cont, -- Opt_err_panic, -- Opt_err_ro, -- Opt_utf8_hack, -- Opt_err, --#ifdef CONFIG_STAGING_EXFAT_DISCARD -- Opt_discard, --#endif /* EXFAT_CONFIG_DISCARD */ --}; -- --static const match_table_t exfat_tokens = { -- {Opt_uid, "uid=%u"}, -- {Opt_gid, "gid=%u"}, -- {Opt_umask, "umask=%o"}, -- {Opt_dmask, "dmask=%o"}, -- {Opt_fmask, "fmask=%o"}, -- {Opt_allow_utime, "allow_utime=%o"}, -- {Opt_codepage, "codepage=%u"}, -- {Opt_charset, "iocharset=%s"}, -- {Opt_namecase, "namecase=%u"}, -- {Opt_debug, "debug"}, -- {Opt_err_cont, "errors=continue"}, -- {Opt_err_panic, "errors=panic"}, -- {Opt_err_ro, "errors=remount-ro"}, -- {Opt_utf8_hack, "utf8"}, --#ifdef CONFIG_STAGING_EXFAT_DISCARD -- {Opt_discard, "discard"}, --#endif /* CONFIG_STAGING_EXFAT_DISCARD */ -- {Opt_err, NULL} --}; -- --static int parse_options(char *options, int silent, int *debug, -- struct exfat_mount_options *opts) --{ -- char *p; -- substring_t args[MAX_OPT_ARGS]; -- int option; -- char *iocharset; -- -- opts->fs_uid = current_uid(); -- opts->fs_gid = current_gid(); -- opts->fs_fmask = current->fs->umask; -- opts->fs_dmask = current->fs->umask; -- opts->allow_utime = U16_MAX; -- opts->codepage = exfat_default_codepage; -- opts->iocharset = exfat_default_iocharset; -- opts->casesensitive = 0; -- opts->errors = EXFAT_ERRORS_RO; --#ifdef CONFIG_STAGING_EXFAT_DISCARD -- opts->discard = 0; --#endif -- *debug = 0; -- -- if (!options) -- goto out; -- -- while ((p = strsep(&options, ","))) { -- int token; -- -- if (!*p) -- continue; -- -- token = match_token(p, exfat_tokens, args); -- switch (token) { -- case Opt_uid: -- if (match_int(&args[0], &option)) -- return 0; -- opts->fs_uid = KUIDT_INIT(option); -- break; -- case Opt_gid: -- if (match_int(&args[0], &option)) -- return 0; -- opts->fs_gid = KGIDT_INIT(option); -- break; -- case Opt_umask: -- case Opt_dmask: -- case Opt_fmask: -- if (match_octal(&args[0], &option)) -- return 0; -- if (token != Opt_dmask) -- opts->fs_fmask = option; -- if (token != Opt_fmask) -- opts->fs_dmask = option; -- break; -- case Opt_allow_utime: -- if (match_octal(&args[0], &option)) -- return 0; -- opts->allow_utime = option & 0022; -- break; -- case Opt_codepage: -- if (match_int(&args[0], &option)) -- return 0; -- opts->codepage = option; -- break; -- case Opt_charset: -- if (opts->iocharset != exfat_default_iocharset) -- kfree(opts->iocharset); -- iocharset = match_strdup(&args[0]); -- if (!iocharset) -- return -ENOMEM; -- opts->iocharset = iocharset; -- break; -- case Opt_namecase: -- if (match_int(&args[0], &option)) -- return 0; -- opts->casesensitive = option; -- break; -- case Opt_err_cont: -- opts->errors = EXFAT_ERRORS_CONT; -- break; -- case Opt_err_panic: -- opts->errors = EXFAT_ERRORS_PANIC; -- break; -- case Opt_err_ro: -- opts->errors = EXFAT_ERRORS_RO; -- break; -- case Opt_debug: -- *debug = 1; -- break; --#ifdef CONFIG_STAGING_EXFAT_DISCARD -- case Opt_discard: -- opts->discard = 1; -- break; --#endif /* CONFIG_STAGING_EXFAT_DISCARD */ -- case Opt_utf8_hack: -- break; -- default: -- if (!silent) -- pr_err("[EXFAT] Unrecognized mount option %s or missing value\n", -- p); -- return -EINVAL; -- } -- } -- --out: -- if (opts->allow_utime == U16_MAX) -- opts->allow_utime = ~opts->fs_dmask & 0022; -- -- return 0; --} -- --static void exfat_hash_init(struct super_block *sb) --{ -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- int i; -- -- spin_lock_init(&sbi->inode_hash_lock); -- for (i = 0; i < EXFAT_HASH_SIZE; i++) -- INIT_HLIST_HEAD(&sbi->inode_hashtable[i]); --} -- --static int exfat_read_root(struct inode *inode) --{ -- struct super_block *sb = inode->i_sb; -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- struct fs_info_t *p_fs = &sbi->fs_info; -- struct timespec64 curtime; -- struct dir_entry_t info; -- -- EXFAT_I(inode)->fid.dir.dir = p_fs->root_dir; -- EXFAT_I(inode)->fid.dir.flags = 0x01; -- EXFAT_I(inode)->fid.entry = -1; -- EXFAT_I(inode)->fid.start_clu = p_fs->root_dir; -- EXFAT_I(inode)->fid.flags = 0x01; -- EXFAT_I(inode)->fid.type = TYPE_DIR; -- EXFAT_I(inode)->fid.rwoffset = 0; -- EXFAT_I(inode)->fid.hint_last_off = -1; -- -- EXFAT_I(inode)->target = NULL; -- -- ffsReadStat(inode, &info); -- -- inode->i_uid = sbi->options.fs_uid; -- inode->i_gid = sbi->options.fs_gid; -- INC_IVERSION(inode); -- inode->i_generation = 0; -- inode->i_mode = exfat_make_mode(sbi, ATTR_SUBDIR, 0777); -- inode->i_op = &exfat_dir_inode_operations; -- inode->i_fop = &exfat_dir_operations; -- -- i_size_write(inode, info.Size); -- inode->i_blocks = ((i_size_read(inode) + (p_fs->cluster_size - 1)) -- & ~((loff_t)p_fs->cluster_size - 1)) >> 9; -- EXFAT_I(inode)->i_pos = ((loff_t)p_fs->root_dir << 32) | 0xffffffff; -- EXFAT_I(inode)->mmu_private = i_size_read(inode); -- -- exfat_save_attr(inode, ATTR_SUBDIR); -- curtime = current_time(inode); -- inode->i_mtime = curtime; -- inode->i_atime = curtime; -- inode->i_ctime = curtime; -- set_nlink(inode, info.NumSubdirs + 2); -- -- return 0; --} -- --static void setup_dops(struct super_block *sb) --{ -- if (EXFAT_SB(sb)->options.casesensitive == 0) -- sb->s_d_op = &exfat_ci_dentry_ops; -- else -- sb->s_d_op = &exfat_dentry_ops; --} -- --static int exfat_fill_super(struct super_block *sb, void *data, int silent) --{ -- struct inode *root_inode = NULL; -- struct exfat_sb_info *sbi; -- int debug, ret; -- long error; -- -- /* -- * GFP_KERNEL is ok here, because while we do hold the -- * supeblock lock, memory pressure can't call back into -- * the filesystem, since we're only just about to mount -- * it and have no inodes etc active! -- */ -- sbi = kvzalloc(sizeof(*sbi), GFP_KERNEL); -- if (!sbi) -- return -ENOMEM; -- mutex_init(&sbi->s_lock); -- sb->s_fs_info = sbi; -- sb->s_flags |= SB_NODIRATIME; -- sb->s_magic = EXFAT_SUPER_MAGIC; -- sb->s_op = &exfat_sops; -- sb->s_export_op = &exfat_export_ops; -- -- error = parse_options(data, silent, &debug, &sbi->options); -- if (error) -- goto out_fail; -- -- setup_dops(sb); -- -- error = -EIO; -- sb_min_blocksize(sb, 512); -- sb->s_maxbytes = 0x7fffffffffffffffLL; /* maximum file size */ -- -- ret = ffsMountVol(sb); -- if (ret) { -- if (!silent) -- pr_err("[EXFAT] ffsMountVol failed\n"); -- -- goto out_fail; -- } -- -- /* set up enough so that it can read an inode */ -- exfat_hash_init(sb); -- -- /* -- * The low byte of FAT's first entry must have same value with -- * media-field. But in real world, too many devices is -- * writing wrong value. So, removed that validity check. -- * -- * if (FAT_FIRST_ENT(sb, media) != first) -- */ -- -- sbi->nls_io = load_nls(sbi->options.iocharset); -- -- error = -ENOMEM; -- root_inode = new_inode(sb); -- if (!root_inode) -- goto out_fail2; -- root_inode->i_ino = EXFAT_ROOT_INO; -- SET_IVERSION(root_inode, 1); -- -- error = exfat_read_root(root_inode); -- if (error < 0) -- goto out_fail2; -- error = -ENOMEM; -- exfat_attach(root_inode, EXFAT_I(root_inode)->i_pos); -- insert_inode_hash(root_inode); -- sb->s_root = d_make_root(root_inode); -- if (!sb->s_root) { -- pr_err("[EXFAT] Getting the root inode failed\n"); -- goto out_fail2; -- } -- -- return 0; -- --out_fail2: -- ffsUmountVol(sb); --out_fail: -- if (root_inode) -- iput(root_inode); -- sb->s_fs_info = NULL; -- exfat_free_super(sbi); -- return error; --} -- --static struct dentry *exfat_fs_mount(struct file_system_type *fs_type, -- int flags, const char *dev_name, -- void *data) --{ -- return mount_bdev(fs_type, flags, dev_name, data, exfat_fill_super); --} -- --static void init_once(void *foo) --{ -- struct exfat_inode_info *ei = (struct exfat_inode_info *)foo; -- -- INIT_HLIST_NODE(&ei->i_hash_fat); -- inode_init_once(&ei->vfs_inode); --} -- --static int __init exfat_init_inodecache(void) --{ -- exfat_inode_cachep = kmem_cache_create("exfat_inode_cache", -- sizeof(struct exfat_inode_info), -- 0, -- (SLAB_RECLAIM_ACCOUNT | -- SLAB_MEM_SPREAD), -- init_once); -- if (!exfat_inode_cachep) -- return -ENOMEM; -- return 0; --} -- --static void __exit exfat_destroy_inodecache(void) --{ -- /* -- * Make sure all delayed rcu free inodes are flushed before we -- * destroy cache. -- */ -- rcu_barrier(); -- kmem_cache_destroy(exfat_inode_cachep); --} -- --#ifdef CONFIG_STAGING_EXFAT_KERNEL_DEBUG --static void exfat_debug_kill_sb(struct super_block *sb) --{ -- struct exfat_sb_info *sbi = EXFAT_SB(sb); -- struct block_device *bdev = sb->s_bdev; -- struct fs_info_t *p_fs = &(EXFAT_SB(sb)->fs_info); -- -- long flags; -- -- if (sbi) { -- flags = sbi->debug_flags; -- -- if (flags & EXFAT_DEBUGFLAGS_INVALID_UMOUNT) { -- /* -- * invalidate_bdev drops all device cache include -- * dirty. We use this to simulate device removal. -- */ -- mutex_lock(&p_fs->v_mutex); -- exfat_fat_release_all(sb); -- exfat_buf_release_all(sb); -- mutex_unlock(&p_fs->v_mutex); -- -- invalidate_bdev(bdev); -- } -- } -- -- kill_block_super(sb); --} --#endif /* CONFIG_STAGING_EXFAT_KERNEL_DEBUG */ -- --static struct file_system_type exfat_fs_type = { -- .owner = THIS_MODULE, -- .name = "exfat", -- .mount = exfat_fs_mount, --#ifdef CONFIG_STAGING_EXFAT_KERNEL_DEBUG -- .kill_sb = exfat_debug_kill_sb, --#else -- .kill_sb = kill_block_super, --#endif /* CONFIG_STAGING_EXFAT_KERNEL_DEBUG */ -- .fs_flags = FS_REQUIRES_DEV, --}; -- --static int __init init_exfat(void) --{ -- int err; -- -- BUILD_BUG_ON(sizeof(struct dentry_t) != DENTRY_SIZE); -- BUILD_BUG_ON(sizeof(struct dos_dentry_t) != DENTRY_SIZE); -- BUILD_BUG_ON(sizeof(struct ext_dentry_t) != DENTRY_SIZE); -- BUILD_BUG_ON(sizeof(struct file_dentry_t) != DENTRY_SIZE); -- BUILD_BUG_ON(sizeof(struct strm_dentry_t) != DENTRY_SIZE); -- BUILD_BUG_ON(sizeof(struct name_dentry_t) != DENTRY_SIZE); -- BUILD_BUG_ON(sizeof(struct bmap_dentry_t) != DENTRY_SIZE); -- BUILD_BUG_ON(sizeof(struct case_dentry_t) != DENTRY_SIZE); -- BUILD_BUG_ON(sizeof(struct volm_dentry_t) != DENTRY_SIZE); -- -- pr_info("exFAT: Version %s\n", EXFAT_VERSION); -- -- err = exfat_init_inodecache(); -- if (err) -- return err; -- -- err = register_filesystem(&exfat_fs_type); -- if (err) -- return err; -- -- return 0; --} -- --static void __exit exit_exfat(void) --{ -- exfat_destroy_inodecache(); -- unregister_filesystem(&exfat_fs_type); --} -- --module_init(init_exfat); --module_exit(exit_exfat); -- --MODULE_LICENSE("GPL"); --MODULE_DESCRIPTION("exFAT Filesystem Driver"); --MODULE_ALIAS_FS("exfat"); -diff -Nurp linux-5.6.3.orig/drivers/staging/exfat/exfat_upcase.c linux-5.6.3/drivers/staging/exfat/exfat_upcase.c ---- linux-5.6.3.orig/drivers/staging/exfat/exfat_upcase.c 2020-03-30 01:25:41.000000000 +0300 -+++ linux-5.6.3/drivers/staging/exfat/exfat_upcase.c 1970-01-01 02:00:00.000000000 +0200 -@@ -1,740 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0-or-later --/* -- * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. -- */ -- --#include --#include "exfat.h" -- --const u8 uni_upcase[NUM_UPCASE << 1] = { -- 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, -- 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, -- 0x08, 0x00, 0x09, 0x00, 0x0A, 0x00, 0x0B, 0x00, -- 0x0C, 0x00, 0x0D, 0x00, 0x0E, 0x00, 0x0F, 0x00, -- 0x10, 0x00, 0x11, 0x00, 0x12, 0x00, 0x13, 0x00, -- 0x14, 0x00, 0x15, 0x00, 0x16, 0x00, 0x17, 0x00, -- 0x18, 0x00, 0x19, 0x00, 0x1A, 0x00, 0x1B, 0x00, -- 0x1C, 0x00, 0x1D, 0x00, 0x1E, 0x00, 0x1F, 0x00, -- 0x20, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, 0x00, -- 0x24, 0x00, 0x25, 0x00, 0x26, 0x00, 0x27, 0x00, -- 0x28, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x2B, 0x00, -- 0x2C, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x2F, 0x00, -- 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, -- 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, -- 0x38, 0x00, 0x39, 0x00, 0x3A, 0x00, 0x3B, 0x00, -- 0x3C, 0x00, 0x3D, 0x00, 0x3E, 0x00, 0x3F, 0x00, -- 0x40, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, -- 0x44, 0x00, 0x45, 0x00, 0x46, 0x00, 0x47, 0x00, -- 0x48, 0x00, 0x49, 0x00, 0x4A, 0x00, 0x4B, 0x00, -- 0x4C, 0x00, 0x4D, 0x00, 0x4E, 0x00, 0x4F, 0x00, -- 0x50, 0x00, 0x51, 0x00, 0x52, 0x00, 0x53, 0x00, -- 0x54, 0x00, 0x55, 0x00, 0x56, 0x00, 0x57, 0x00, -- 0x58, 0x00, 0x59, 0x00, 0x5A, 0x00, 0x5B, 0x00, -- 0x5C, 0x00, 0x5D, 0x00, 0x5E, 0x00, 0x5F, 0x00, -- 0x60, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, -- 0x44, 0x00, 0x45, 0x00, 0x46, 0x00, 0x47, 0x00, -- 0x48, 0x00, 0x49, 0x00, 0x4A, 0x00, 0x4B, 0x00, -- 0x4C, 0x00, 0x4D, 0x00, 0x4E, 0x00, 0x4F, 0x00, -- 0x50, 0x00, 0x51, 0x00, 0x52, 0x00, 0x53, 0x00, -- 0x54, 0x00, 0x55, 0x00, 0x56, 0x00, 0x57, 0x00, -- 0x58, 0x00, 0x59, 0x00, 0x5A, 0x00, 0x7B, 0x00, -- 0x7C, 0x00, 0x7D, 0x00, 0x7E, 0x00, 0x7F, 0x00, -- 0x80, 0x00, 0x81, 0x00, 0x82, 0x00, 0x83, 0x00, -- 0x84, 0x00, 0x85, 0x00, 0x86, 0x00, 0x87, 0x00, -- 0x88, 0x00, 0x89, 0x00, 0x8A, 0x00, 0x8B, 0x00, -- 0x8C, 0x00, 0x8D, 0x00, 0x8E, 0x00, 0x8F, 0x00, -- 0x90, 0x00, 0x91, 0x00, 0x92, 0x00, 0x93, 0x00, -- 0x94, 0x00, 0x95, 0x00, 0x96, 0x00, 0x97, 0x00, -- 0x98, 0x00, 0x99, 0x00, 0x9A, 0x00, 0x9B, 0x00, -- 0x9C, 0x00, 0x9D, 0x00, 0x9E, 0x00, 0x9F, 0x00, -- 0xA0, 0x00, 0xA1, 0x00, 0xA2, 0x00, 0xA3, 0x00, -- 0xA4, 0x00, 0xA5, 0x00, 0xA6, 0x00, 0xA7, 0x00, -- 0xA8, 0x00, 0xA9, 0x00, 0xAA, 0x00, 0xAB, 0x00, -- 0xAC, 0x00, 0xAD, 0x00, 0xAE, 0x00, 0xAF, 0x00, -- 0xB0, 0x00, 0xB1, 0x00, 0xB2, 0x00, 0xB3, 0x00, -- 0xB4, 0x00, 0xB5, 0x00, 0xB6, 0x00, 0xB7, 0x00, -- 0xB8, 0x00, 0xB9, 0x00, 0xBA, 0x00, 0xBB, 0x00, -- 0xBC, 0x00, 0xBD, 0x00, 0xBE, 0x00, 0xBF, 0x00, -- 0xC0, 0x00, 0xC1, 0x00, 0xC2, 0x00, 0xC3, 0x00, -- 0xC4, 0x00, 0xC5, 0x00, 0xC6, 0x00, 0xC7, 0x00, -- 0xC8, 0x00, 0xC9, 0x00, 0xCA, 0x00, 0xCB, 0x00, -- 0xCC, 0x00, 0xCD, 0x00, 0xCE, 0x00, 0xCF, 0x00, -- 0xD0, 0x00, 0xD1, 0x00, 0xD2, 0x00, 0xD3, 0x00, -- 0xD4, 0x00, 0xD5, 0x00, 0xD6, 0x00, 0xD7, 0x00, -- 0xD8, 0x00, 0xD9, 0x00, 0xDA, 0x00, 0xDB, 0x00, -- 0xDC, 0x00, 0xDD, 0x00, 0xDE, 0x00, 0xDF, 0x00, -- 0xC0, 0x00, 0xC1, 0x00, 0xC2, 0x00, 0xC3, 0x00, -- 0xC4, 0x00, 0xC5, 0x00, 0xC6, 0x00, 0xC7, 0x00, -- 0xC8, 0x00, 0xC9, 0x00, 0xCA, 0x00, 0xCB, 0x00, -- 0xCC, 0x00, 0xCD, 0x00, 0xCE, 0x00, 0xCF, 0x00, -- 0xD0, 0x00, 0xD1, 0x00, 0xD2, 0x00, 0xD3, 0x00, -- 0xD4, 0x00, 0xD5, 0x00, 0xD6, 0x00, 0xF7, 0x00, -- 0xD8, 0x00, 0xD9, 0x00, 0xDA, 0x00, 0xDB, 0x00, -- 0xDC, 0x00, 0xDD, 0x00, 0xDE, 0x00, 0x78, 0x01, -- 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, -- 0x04, 0x01, 0x04, 0x01, 0x06, 0x01, 0x06, 0x01, -- 0x08, 0x01, 0x08, 0x01, 0x0A, 0x01, 0x0A, 0x01, -- 0x0C, 0x01, 0x0C, 0x01, 0x0E, 0x01, 0x0E, 0x01, -- 0x10, 0x01, 0x10, 0x01, 0x12, 0x01, 0x12, 0x01, -- 0x14, 0x01, 0x14, 0x01, 0x16, 0x01, 0x16, 0x01, -- 0x18, 0x01, 0x18, 0x01, 0x1A, 0x01, 0x1A, 0x01, -- 0x1C, 0x01, 0x1C, 0x01, 0x1E, 0x01, 0x1E, 0x01, -- 0x20, 0x01, 0x20, 0x01, 0x22, 0x01, 0x22, 0x01, -- 0x24, 0x01, 0x24, 0x01, 0x26, 0x01, 0x26, 0x01, -- 0x28, 0x01, 0x28, 0x01, 0x2A, 0x01, 0x2A, 0x01, -- 0x2C, 0x01, 0x2C, 0x01, 0x2E, 0x01, 0x2E, 0x01, -- 0x30, 0x01, 0x31, 0x01, 0x32, 0x01, 0x32, 0x01, -- 0x34, 0x01, 0x34, 0x01, 0x36, 0x01, 0x36, 0x01, -- 0x38, 0x01, 0x39, 0x01, 0x39, 0x01, 0x3B, 0x01, -- 0x3B, 0x01, 0x3D, 0x01, 0x3D, 0x01, 0x3F, 0x01, -- 0x3F, 0x01, 0x41, 0x01, 0x41, 0x01, 0x43, 0x01, -- 0x43, 0x01, 0x45, 0x01, 0x45, 0x01, 0x47, 0x01, -- 0x47, 0x01, 0x49, 0x01, 0x4A, 0x01, 0x4A, 0x01, -- 0x4C, 0x01, 0x4C, 0x01, 0x4E, 0x01, 0x4E, 0x01, -- 0x50, 0x01, 0x50, 0x01, 0x52, 0x01, 0x52, 0x01, -- 0x54, 0x01, 0x54, 0x01, 0x56, 0x01, 0x56, 0x01, -- 0x58, 0x01, 0x58, 0x01, 0x5A, 0x01, 0x5A, 0x01, -- 0x5C, 0x01, 0x5C, 0x01, 0x5E, 0x01, 0x5E, 0x01, -- 0x60, 0x01, 0x60, 0x01, 0x62, 0x01, 0x62, 0x01, -- 0x64, 0x01, 0x64, 0x01, 0x66, 0x01, 0x66, 0x01, -- 0x68, 0x01, 0x68, 0x01, 0x6A, 0x01, 0x6A, 0x01, -- 0x6C, 0x01, 0x6C, 0x01, 0x6E, 0x01, 0x6E, 0x01, -- 0x70, 0x01, 0x70, 0x01, 0x72, 0x01, 0x72, 0x01, -- 0x74, 0x01, 0x74, 0x01, 0x76, 0x01, 0x76, 0x01, -- 0x78, 0x01, 0x79, 0x01, 0x79, 0x01, 0x7B, 0x01, -- 0x7B, 0x01, 0x7D, 0x01, 0x7D, 0x01, 0x7F, 0x01, -- 0x43, 0x02, 0x81, 0x01, 0x82, 0x01, 0x82, 0x01, -- 0x84, 0x01, 0x84, 0x01, 0x86, 0x01, 0x87, 0x01, -- 0x87, 0x01, 0x89, 0x01, 0x8A, 0x01, 0x8B, 0x01, -- 0x8B, 0x01, 0x8D, 0x01, 0x8E, 0x01, 0x8F, 0x01, -- 0x90, 0x01, 0x91, 0x01, 0x91, 0x01, 0x93, 0x01, -- 0x94, 0x01, 0xF6, 0x01, 0x96, 0x01, 0x97, 0x01, -- 0x98, 0x01, 0x98, 0x01, 0x3D, 0x02, 0x9B, 0x01, -- 0x9C, 0x01, 0x9D, 0x01, 0x20, 0x02, 0x9F, 0x01, -- 0xA0, 0x01, 0xA0, 0x01, 0xA2, 0x01, 0xA2, 0x01, -- 0xA4, 0x01, 0xA4, 0x01, 0xA6, 0x01, 0xA7, 0x01, -- 0xA7, 0x01, 0xA9, 0x01, 0xAA, 0x01, 0xAB, 0x01, -- 0xAC, 0x01, 0xAC, 0x01, 0xAE, 0x01, 0xAF, 0x01, -- 0xAF, 0x01, 0xB1, 0x01, 0xB2, 0x01, 0xB3, 0x01, -- 0xB3, 0x01, 0xB5, 0x01, 0xB5, 0x01, 0xB7, 0x01, -- 0xB8, 0x01, 0xB8, 0x01, 0xBA, 0x01, 0xBB, 0x01, -- 0xBC, 0x01, 0xBC, 0x01, 0xBE, 0x01, 0xF7, 0x01, -- 0xC0, 0x01, 0xC1, 0x01, 0xC2, 0x01, 0xC3, 0x01, -- 0xC4, 0x01, 0xC5, 0x01, 0xC4, 0x01, 0xC7, 0x01, -- 0xC8, 0x01, 0xC7, 0x01, 0xCA, 0x01, 0xCB, 0x01, -- 0xCA, 0x01, 0xCD, 0x01, 0xCD, 0x01, 0xCF, 0x01, -- 0xCF, 0x01, 0xD1, 0x01, 0xD1, 0x01, 0xD3, 0x01, -- 0xD3, 0x01, 0xD5, 0x01, 0xD5, 0x01, 0xD7, 0x01, -- 0xD7, 0x01, 0xD9, 0x01, 0xD9, 0x01, 0xDB, 0x01, -- 0xDB, 0x01, 0x8E, 0x01, 0xDE, 0x01, 0xDE, 0x01, -- 0xE0, 0x01, 0xE0, 0x01, 0xE2, 0x01, 0xE2, 0x01, -- 0xE4, 0x01, 0xE4, 0x01, 0xE6, 0x01, 0xE6, 0x01, -- 0xE8, 0x01, 0xE8, 0x01, 0xEA, 0x01, 0xEA, 0x01, -- 0xEC, 0x01, 0xEC, 0x01, 0xEE, 0x01, 0xEE, 0x01, -- 0xF0, 0x01, 0xF1, 0x01, 0xF2, 0x01, 0xF1, 0x01, -- 0xF4, 0x01, 0xF4, 0x01, 0xF6, 0x01, 0xF7, 0x01, -- 0xF8, 0x01, 0xF8, 0x01, 0xFA, 0x01, 0xFA, 0x01, -- 0xFC, 0x01, 0xFC, 0x01, 0xFE, 0x01, 0xFE, 0x01, -- 0x00, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, -- 0x04, 0x02, 0x04, 0x02, 0x06, 0x02, 0x06, 0x02, -- 0x08, 0x02, 0x08, 0x02, 0x0A, 0x02, 0x0A, 0x02, -- 0x0C, 0x02, 0x0C, 0x02, 0x0E, 0x02, 0x0E, 0x02, -- 0x10, 0x02, 0x10, 0x02, 0x12, 0x02, 0x12, 0x02, -- 0x14, 0x02, 0x14, 0x02, 0x16, 0x02, 0x16, 0x02, -- 0x18, 0x02, 0x18, 0x02, 0x1A, 0x02, 0x1A, 0x02, -- 0x1C, 0x02, 0x1C, 0x02, 0x1E, 0x02, 0x1E, 0x02, -- 0x20, 0x02, 0x21, 0x02, 0x22, 0x02, 0x22, 0x02, -- 0x24, 0x02, 0x24, 0x02, 0x26, 0x02, 0x26, 0x02, -- 0x28, 0x02, 0x28, 0x02, 0x2A, 0x02, 0x2A, 0x02, -- 0x2C, 0x02, 0x2C, 0x02, 0x2E, 0x02, 0x2E, 0x02, -- 0x30, 0x02, 0x30, 0x02, 0x32, 0x02, 0x32, 0x02, -- 0x34, 0x02, 0x35, 0x02, 0x36, 0x02, 0x37, 0x02, -- 0x38, 0x02, 0x39, 0x02, 0x65, 0x2C, 0x3B, 0x02, -- 0x3B, 0x02, 0x3D, 0x02, 0x66, 0x2C, 0x3F, 0x02, -- 0x40, 0x02, 0x41, 0x02, 0x41, 0x02, 0x43, 0x02, -- 0x44, 0x02, 0x45, 0x02, 0x46, 0x02, 0x46, 0x02, -- 0x48, 0x02, 0x48, 0x02, 0x4A, 0x02, 0x4A, 0x02, -- 0x4C, 0x02, 0x4C, 0x02, 0x4E, 0x02, 0x4E, 0x02, -- 0x50, 0x02, 0x51, 0x02, 0x52, 0x02, 0x81, 0x01, -- 0x86, 0x01, 0x55, 0x02, 0x89, 0x01, 0x8A, 0x01, -- 0x58, 0x02, 0x8F, 0x01, 0x5A, 0x02, 0x90, 0x01, -- 0x5C, 0x02, 0x5D, 0x02, 0x5E, 0x02, 0x5F, 0x02, -- 0x93, 0x01, 0x61, 0x02, 0x62, 0x02, 0x94, 0x01, -- 0x64, 0x02, 0x65, 0x02, 0x66, 0x02, 0x67, 0x02, -- 0x97, 0x01, 0x96, 0x01, 0x6A, 0x02, 0x62, 0x2C, -- 0x6C, 0x02, 0x6D, 0x02, 0x6E, 0x02, 0x9C, 0x01, -- 0x70, 0x02, 0x71, 0x02, 0x9D, 0x01, 0x73, 0x02, -- 0x74, 0x02, 0x9F, 0x01, 0x76, 0x02, 0x77, 0x02, -- 0x78, 0x02, 0x79, 0x02, 0x7A, 0x02, 0x7B, 0x02, -- 0x7C, 0x02, 0x64, 0x2C, 0x7E, 0x02, 0x7F, 0x02, -- 0xA6, 0x01, 0x81, 0x02, 0x82, 0x02, 0xA9, 0x01, -- 0x84, 0x02, 0x85, 0x02, 0x86, 0x02, 0x87, 0x02, -- 0xAE, 0x01, 0x44, 0x02, 0xB1, 0x01, 0xB2, 0x01, -- 0x45, 0x02, 0x8D, 0x02, 0x8E, 0x02, 0x8F, 0x02, -- 0x90, 0x02, 0x91, 0x02, 0xB7, 0x01, 0x93, 0x02, -- 0x94, 0x02, 0x95, 0x02, 0x96, 0x02, 0x97, 0x02, -- 0x98, 0x02, 0x99, 0x02, 0x9A, 0x02, 0x9B, 0x02, -- 0x9C, 0x02, 0x9D, 0x02, 0x9E, 0x02, 0x9F, 0x02, -- 0xA0, 0x02, 0xA1, 0x02, 0xA2, 0x02, 0xA3, 0x02, -- 0xA4, 0x02, 0xA5, 0x02, 0xA6, 0x02, 0xA7, 0x02, -- 0xA8, 0x02, 0xA9, 0x02, 0xAA, 0x02, 0xAB, 0x02, -- 0xAC, 0x02, 0xAD, 0x02, 0xAE, 0x02, 0xAF, 0x02, -- 0xB0, 0x02, 0xB1, 0x02, 0xB2, 0x02, 0xB3, 0x02, -- 0xB4, 0x02, 0xB5, 0x02, 0xB6, 0x02, 0xB7, 0x02, -- 0xB8, 0x02, 0xB9, 0x02, 0xBA, 0x02, 0xBB, 0x02, -- 0xBC, 0x02, 0xBD, 0x02, 0xBE, 0x02, 0xBF, 0x02, -- 0xC0, 0x02, 0xC1, 0x02, 0xC2, 0x02, 0xC3, 0x02, -- 0xC4, 0x02, 0xC5, 0x02, 0xC6, 0x02, 0xC7, 0x02, -- 0xC8, 0x02, 0xC9, 0x02, 0xCA, 0x02, 0xCB, 0x02, -- 0xCC, 0x02, 0xCD, 0x02, 0xCE, 0x02, 0xCF, 0x02, -- 0xD0, 0x02, 0xD1, 0x02, 0xD2, 0x02, 0xD3, 0x02, -- 0xD4, 0x02, 0xD5, 0x02, 0xD6, 0x02, 0xD7, 0x02, -- 0xD8, 0x02, 0xD9, 0x02, 0xDA, 0x02, 0xDB, 0x02, -- 0xDC, 0x02, 0xDD, 0x02, 0xDE, 0x02, 0xDF, 0x02, -- 0xE0, 0x02, 0xE1, 0x02, 0xE2, 0x02, 0xE3, 0x02, -- 0xE4, 0x02, 0xE5, 0x02, 0xE6, 0x02, 0xE7, 0x02, -- 0xE8, 0x02, 0xE9, 0x02, 0xEA, 0x02, 0xEB, 0x02, -- 0xEC, 0x02, 0xED, 0x02, 0xEE, 0x02, 0xEF, 0x02, -- 0xF0, 0x02, 0xF1, 0x02, 0xF2, 0x02, 0xF3, 0x02, -- 0xF4, 0x02, 0xF5, 0x02, 0xF6, 0x02, 0xF7, 0x02, -- 0xF8, 0x02, 0xF9, 0x02, 0xFA, 0x02, 0xFB, 0x02, -- 0xFC, 0x02, 0xFD, 0x02, 0xFE, 0x02, 0xFF, 0x02, -- 0x00, 0x03, 0x01, 0x03, 0x02, 0x03, 0x03, 0x03, -- 0x04, 0x03, 0x05, 0x03, 0x06, 0x03, 0x07, 0x03, -- 0x08, 0x03, 0x09, 0x03, 0x0A, 0x03, 0x0B, 0x03, -- 0x0C, 0x03, 0x0D, 0x03, 0x0E, 0x03, 0x0F, 0x03, -- 0x10, 0x03, 0x11, 0x03, 0x12, 0x03, 0x13, 0x03, -- 0x14, 0x03, 0x15, 0x03, 0x16, 0x03, 0x17, 0x03, -- 0x18, 0x03, 0x19, 0x03, 0x1A, 0x03, 0x1B, 0x03, -- 0x1C, 0x03, 0x1D, 0x03, 0x1E, 0x03, 0x1F, 0x03, -- 0x20, 0x03, 0x21, 0x03, 0x22, 0x03, 0x23, 0x03, -- 0x24, 0x03, 0x25, 0x03, 0x26, 0x03, 0x27, 0x03, -- 0x28, 0x03, 0x29, 0x03, 0x2A, 0x03, 0x2B, 0x03, -- 0x2C, 0x03, 0x2D, 0x03, 0x2E, 0x03, 0x2F, 0x03, -- 0x30, 0x03, 0x31, 0x03, 0x32, 0x03, 0x33, 0x03, -- 0x34, 0x03, 0x35, 0x03, 0x36, 0x03, 0x37, 0x03, -- 0x38, 0x03, 0x39, 0x03, 0x3A, 0x03, 0x3B, 0x03, -- 0x3C, 0x03, 0x3D, 0x03, 0x3E, 0x03, 0x3F, 0x03, -- 0x40, 0x03, 0x41, 0x03, 0x42, 0x03, 0x43, 0x03, -- 0x44, 0x03, 0x45, 0x03, 0x46, 0x03, 0x47, 0x03, -- 0x48, 0x03, 0x49, 0x03, 0x4A, 0x03, 0x4B, 0x03, -- 0x4C, 0x03, 0x4D, 0x03, 0x4E, 0x03, 0x4F, 0x03, -- 0x50, 0x03, 0x51, 0x03, 0x52, 0x03, 0x53, 0x03, -- 0x54, 0x03, 0x55, 0x03, 0x56, 0x03, 0x57, 0x03, -- 0x58, 0x03, 0x59, 0x03, 0x5A, 0x03, 0x5B, 0x03, -- 0x5C, 0x03, 0x5D, 0x03, 0x5E, 0x03, 0x5F, 0x03, -- 0x60, 0x03, 0x61, 0x03, 0x62, 0x03, 0x63, 0x03, -- 0x64, 0x03, 0x65, 0x03, 0x66, 0x03, 0x67, 0x03, -- 0x68, 0x03, 0x69, 0x03, 0x6A, 0x03, 0x6B, 0x03, -- 0x6C, 0x03, 0x6D, 0x03, 0x6E, 0x03, 0x6F, 0x03, -- 0x70, 0x03, 0x71, 0x03, 0x72, 0x03, 0x73, 0x03, -- 0x74, 0x03, 0x75, 0x03, 0x76, 0x03, 0x77, 0x03, -- 0x78, 0x03, 0x79, 0x03, 0x7A, 0x03, 0xFD, 0x03, -- 0xFE, 0x03, 0xFF, 0x03, 0x7E, 0x03, 0x7F, 0x03, -- 0x80, 0x03, 0x81, 0x03, 0x82, 0x03, 0x83, 0x03, -- 0x84, 0x03, 0x85, 0x03, 0x86, 0x03, 0x87, 0x03, -- 0x88, 0x03, 0x89, 0x03, 0x8A, 0x03, 0x8B, 0x03, -- 0x8C, 0x03, 0x8D, 0x03, 0x8E, 0x03, 0x8F, 0x03, -- 0x90, 0x03, 0x91, 0x03, 0x92, 0x03, 0x93, 0x03, -- 0x94, 0x03, 0x95, 0x03, 0x96, 0x03, 0x97, 0x03, -- 0x98, 0x03, 0x99, 0x03, 0x9A, 0x03, 0x9B, 0x03, -- 0x9C, 0x03, 0x9D, 0x03, 0x9E, 0x03, 0x9F, 0x03, -- 0xA0, 0x03, 0xA1, 0x03, 0xA2, 0x03, 0xA3, 0x03, -- 0xA4, 0x03, 0xA5, 0x03, 0xA6, 0x03, 0xA7, 0x03, -- 0xA8, 0x03, 0xA9, 0x03, 0xAA, 0x03, 0xAB, 0x03, -- 0x86, 0x03, 0x88, 0x03, 0x89, 0x03, 0x8A, 0x03, -- 0xB0, 0x03, 0x91, 0x03, 0x92, 0x03, 0x93, 0x03, -- 0x94, 0x03, 0x95, 0x03, 0x96, 0x03, 0x97, 0x03, -- 0x98, 0x03, 0x99, 0x03, 0x9A, 0x03, 0x9B, 0x03, -- 0x9C, 0x03, 0x9D, 0x03, 0x9E, 0x03, 0x9F, 0x03, -- 0xA0, 0x03, 0xA1, 0x03, 0xA3, 0x03, 0xA3, 0x03, -- 0xA4, 0x03, 0xA5, 0x03, 0xA6, 0x03, 0xA7, 0x03, -- 0xA8, 0x03, 0xA9, 0x03, 0xAA, 0x03, 0xAB, 0x03, -- 0x8C, 0x03, 0x8E, 0x03, 0x8F, 0x03, 0xCF, 0x03, -- 0xD0, 0x03, 0xD1, 0x03, 0xD2, 0x03, 0xD3, 0x03, -- 0xD4, 0x03, 0xD5, 0x03, 0xD6, 0x03, 0xD7, 0x03, -- 0xD8, 0x03, 0xD8, 0x03, 0xDA, 0x03, 0xDA, 0x03, -- 0xDC, 0x03, 0xDC, 0x03, 0xDE, 0x03, 0xDE, 0x03, -- 0xE0, 0x03, 0xE0, 0x03, 0xE2, 0x03, 0xE2, 0x03, -- 0xE4, 0x03, 0xE4, 0x03, 0xE6, 0x03, 0xE6, 0x03, -- 0xE8, 0x03, 0xE8, 0x03, 0xEA, 0x03, 0xEA, 0x03, -- 0xEC, 0x03, 0xEC, 0x03, 0xEE, 0x03, 0xEE, 0x03, -- 0xF0, 0x03, 0xF1, 0x03, 0xF9, 0x03, 0xF3, 0x03, -- 0xF4, 0x03, 0xF5, 0x03, 0xF6, 0x03, 0xF7, 0x03, -- 0xF7, 0x03, 0xF9, 0x03, 0xFA, 0x03, 0xFA, 0x03, -- 0xFC, 0x03, 0xFD, 0x03, 0xFE, 0x03, 0xFF, 0x03, -- 0x00, 0x04, 0x01, 0x04, 0x02, 0x04, 0x03, 0x04, -- 0x04, 0x04, 0x05, 0x04, 0x06, 0x04, 0x07, 0x04, -- 0x08, 0x04, 0x09, 0x04, 0x0A, 0x04, 0x0B, 0x04, -- 0x0C, 0x04, 0x0D, 0x04, 0x0E, 0x04, 0x0F, 0x04, -- 0x10, 0x04, 0x11, 0x04, 0x12, 0x04, 0x13, 0x04, -- 0x14, 0x04, 0x15, 0x04, 0x16, 0x04, 0x17, 0x04, -- 0x18, 0x04, 0x19, 0x04, 0x1A, 0x04, 0x1B, 0x04, -- 0x1C, 0x04, 0x1D, 0x04, 0x1E, 0x04, 0x1F, 0x04, -- 0x20, 0x04, 0x21, 0x04, 0x22, 0x04, 0x23, 0x04, -- 0x24, 0x04, 0x25, 0x04, 0x26, 0x04, 0x27, 0x04, -- 0x28, 0x04, 0x29, 0x04, 0x2A, 0x04, 0x2B, 0x04, -- 0x2C, 0x04, 0x2D, 0x04, 0x2E, 0x04, 0x2F, 0x04, -- 0x10, 0x04, 0x11, 0x04, 0x12, 0x04, 0x13, 0x04, -- 0x14, 0x04, 0x15, 0x04, 0x16, 0x04, 0x17, 0x04, -- 0x18, 0x04, 0x19, 0x04, 0x1A, 0x04, 0x1B, 0x04, -- 0x1C, 0x04, 0x1D, 0x04, 0x1E, 0x04, 0x1F, 0x04, -- 0x20, 0x04, 0x21, 0x04, 0x22, 0x04, 0x23, 0x04, -- 0x24, 0x04, 0x25, 0x04, 0x26, 0x04, 0x27, 0x04, -- 0x28, 0x04, 0x29, 0x04, 0x2A, 0x04, 0x2B, 0x04, -- 0x2C, 0x04, 0x2D, 0x04, 0x2E, 0x04, 0x2F, 0x04, -- 0x00, 0x04, 0x01, 0x04, 0x02, 0x04, 0x03, 0x04, -- 0x04, 0x04, 0x05, 0x04, 0x06, 0x04, 0x07, 0x04, -- 0x08, 0x04, 0x09, 0x04, 0x0A, 0x04, 0x0B, 0x04, -- 0x0C, 0x04, 0x0D, 0x04, 0x0E, 0x04, 0x0F, 0x04, -- 0x60, 0x04, 0x60, 0x04, 0x62, 0x04, 0x62, 0x04, -- 0x64, 0x04, 0x64, 0x04, 0x66, 0x04, 0x66, 0x04, -- 0x68, 0x04, 0x68, 0x04, 0x6A, 0x04, 0x6A, 0x04, -- 0x6C, 0x04, 0x6C, 0x04, 0x6E, 0x04, 0x6E, 0x04, -- 0x70, 0x04, 0x70, 0x04, 0x72, 0x04, 0x72, 0x04, -- 0x74, 0x04, 0x74, 0x04, 0x76, 0x04, 0x76, 0x04, -- 0x78, 0x04, 0x78, 0x04, 0x7A, 0x04, 0x7A, 0x04, -- 0x7C, 0x04, 0x7C, 0x04, 0x7E, 0x04, 0x7E, 0x04, -- 0x80, 0x04, 0x80, 0x04, 0x82, 0x04, 0x83, 0x04, -- 0x84, 0x04, 0x85, 0x04, 0x86, 0x04, 0x87, 0x04, -- 0x88, 0x04, 0x89, 0x04, 0x8A, 0x04, 0x8A, 0x04, -- 0x8C, 0x04, 0x8C, 0x04, 0x8E, 0x04, 0x8E, 0x04, -- 0x90, 0x04, 0x90, 0x04, 0x92, 0x04, 0x92, 0x04, -- 0x94, 0x04, 0x94, 0x04, 0x96, 0x04, 0x96, 0x04, -- 0x98, 0x04, 0x98, 0x04, 0x9A, 0x04, 0x9A, 0x04, -- 0x9C, 0x04, 0x9C, 0x04, 0x9E, 0x04, 0x9E, 0x04, -- 0xA0, 0x04, 0xA0, 0x04, 0xA2, 0x04, 0xA2, 0x04, -- 0xA4, 0x04, 0xA4, 0x04, 0xA6, 0x04, 0xA6, 0x04, -- 0xA8, 0x04, 0xA8, 0x04, 0xAA, 0x04, 0xAA, 0x04, -- 0xAC, 0x04, 0xAC, 0x04, 0xAE, 0x04, 0xAE, 0x04, -- 0xB0, 0x04, 0xB0, 0x04, 0xB2, 0x04, 0xB2, 0x04, -- 0xB4, 0x04, 0xB4, 0x04, 0xB6, 0x04, 0xB6, 0x04, -- 0xB8, 0x04, 0xB8, 0x04, 0xBA, 0x04, 0xBA, 0x04, -- 0xBC, 0x04, 0xBC, 0x04, 0xBE, 0x04, 0xBE, 0x04, -- 0xC0, 0x04, 0xC1, 0x04, 0xC1, 0x04, 0xC3, 0x04, -- 0xC3, 0x04, 0xC5, 0x04, 0xC5, 0x04, 0xC7, 0x04, -- 0xC7, 0x04, 0xC9, 0x04, 0xC9, 0x04, 0xCB, 0x04, -- 0xCB, 0x04, 0xCD, 0x04, 0xCD, 0x04, 0xC0, 0x04, -- 0xD0, 0x04, 0xD0, 0x04, 0xD2, 0x04, 0xD2, 0x04, -- 0xD4, 0x04, 0xD4, 0x04, 0xD6, 0x04, 0xD6, 0x04, -- 0xD8, 0x04, 0xD8, 0x04, 0xDA, 0x04, 0xDA, 0x04, -- 0xDC, 0x04, 0xDC, 0x04, 0xDE, 0x04, 0xDE, 0x04, -- 0xE0, 0x04, 0xE0, 0x04, 0xE2, 0x04, 0xE2, 0x04, -- 0xE4, 0x04, 0xE4, 0x04, 0xE6, 0x04, 0xE6, 0x04, -- 0xE8, 0x04, 0xE8, 0x04, 0xEA, 0x04, 0xEA, 0x04, -- 0xEC, 0x04, 0xEC, 0x04, 0xEE, 0x04, 0xEE, 0x04, -- 0xF0, 0x04, 0xF0, 0x04, 0xF2, 0x04, 0xF2, 0x04, -- 0xF4, 0x04, 0xF4, 0x04, 0xF6, 0x04, 0xF6, 0x04, -- 0xF8, 0x04, 0xF8, 0x04, 0xFA, 0x04, 0xFA, 0x04, -- 0xFC, 0x04, 0xFC, 0x04, 0xFE, 0x04, 0xFE, 0x04, -- 0x00, 0x05, 0x00, 0x05, 0x02, 0x05, 0x02, 0x05, -- 0x04, 0x05, 0x04, 0x05, 0x06, 0x05, 0x06, 0x05, -- 0x08, 0x05, 0x08, 0x05, 0x0A, 0x05, 0x0A, 0x05, -- 0x0C, 0x05, 0x0C, 0x05, 0x0E, 0x05, 0x0E, 0x05, -- 0x10, 0x05, 0x10, 0x05, 0x12, 0x05, 0x12, 0x05, -- 0x14, 0x05, 0x15, 0x05, 0x16, 0x05, 0x17, 0x05, -- 0x18, 0x05, 0x19, 0x05, 0x1A, 0x05, 0x1B, 0x05, -- 0x1C, 0x05, 0x1D, 0x05, 0x1E, 0x05, 0x1F, 0x05, -- 0x20, 0x05, 0x21, 0x05, 0x22, 0x05, 0x23, 0x05, -- 0x24, 0x05, 0x25, 0x05, 0x26, 0x05, 0x27, 0x05, -- 0x28, 0x05, 0x29, 0x05, 0x2A, 0x05, 0x2B, 0x05, -- 0x2C, 0x05, 0x2D, 0x05, 0x2E, 0x05, 0x2F, 0x05, -- 0x30, 0x05, 0x31, 0x05, 0x32, 0x05, 0x33, 0x05, -- 0x34, 0x05, 0x35, 0x05, 0x36, 0x05, 0x37, 0x05, -- 0x38, 0x05, 0x39, 0x05, 0x3A, 0x05, 0x3B, 0x05, -- 0x3C, 0x05, 0x3D, 0x05, 0x3E, 0x05, 0x3F, 0x05, -- 0x40, 0x05, 0x41, 0x05, 0x42, 0x05, 0x43, 0x05, -- 0x44, 0x05, 0x45, 0x05, 0x46, 0x05, 0x47, 0x05, -- 0x48, 0x05, 0x49, 0x05, 0x4A, 0x05, 0x4B, 0x05, -- 0x4C, 0x05, 0x4D, 0x05, 0x4E, 0x05, 0x4F, 0x05, -- 0x50, 0x05, 0x51, 0x05, 0x52, 0x05, 0x53, 0x05, -- 0x54, 0x05, 0x55, 0x05, 0x56, 0x05, 0x57, 0x05, -- 0x58, 0x05, 0x59, 0x05, 0x5A, 0x05, 0x5B, 0x05, -- 0x5C, 0x05, 0x5D, 0x05, 0x5E, 0x05, 0x5F, 0x05, -- 0x60, 0x05, 0x31, 0x05, 0x32, 0x05, 0x33, 0x05, -- 0x34, 0x05, 0x35, 0x05, 0x36, 0x05, 0x37, 0x05, -- 0x38, 0x05, 0x39, 0x05, 0x3A, 0x05, 0x3B, 0x05, -- 0x3C, 0x05, 0x3D, 0x05, 0x3E, 0x05, 0x3F, 0x05, -- 0x40, 0x05, 0x41, 0x05, 0x42, 0x05, 0x43, 0x05, -- 0x44, 0x05, 0x45, 0x05, 0x46, 0x05, 0x47, 0x05, -- 0x48, 0x05, 0x49, 0x05, 0x4A, 0x05, 0x4B, 0x05, -- 0x4C, 0x05, 0x4D, 0x05, 0x4E, 0x05, 0x4F, 0x05, -- 0x50, 0x05, 0x51, 0x05, 0x52, 0x05, 0x53, 0x05, -- 0x54, 0x05, 0x55, 0x05, 0x56, 0x05, 0xFF, 0xFF, -- 0xF6, 0x17, 0x63, 0x2C, 0x7E, 0x1D, 0x7F, 0x1D, -- 0x80, 0x1D, 0x81, 0x1D, 0x82, 0x1D, 0x83, 0x1D, -- 0x84, 0x1D, 0x85, 0x1D, 0x86, 0x1D, 0x87, 0x1D, -- 0x88, 0x1D, 0x89, 0x1D, 0x8A, 0x1D, 0x8B, 0x1D, -- 0x8C, 0x1D, 0x8D, 0x1D, 0x8E, 0x1D, 0x8F, 0x1D, -- 0x90, 0x1D, 0x91, 0x1D, 0x92, 0x1D, 0x93, 0x1D, -- 0x94, 0x1D, 0x95, 0x1D, 0x96, 0x1D, 0x97, 0x1D, -- 0x98, 0x1D, 0x99, 0x1D, 0x9A, 0x1D, 0x9B, 0x1D, -- 0x9C, 0x1D, 0x9D, 0x1D, 0x9E, 0x1D, 0x9F, 0x1D, -- 0xA0, 0x1D, 0xA1, 0x1D, 0xA2, 0x1D, 0xA3, 0x1D, -- 0xA4, 0x1D, 0xA5, 0x1D, 0xA6, 0x1D, 0xA7, 0x1D, -- 0xA8, 0x1D, 0xA9, 0x1D, 0xAA, 0x1D, 0xAB, 0x1D, -- 0xAC, 0x1D, 0xAD, 0x1D, 0xAE, 0x1D, 0xAF, 0x1D, -- 0xB0, 0x1D, 0xB1, 0x1D, 0xB2, 0x1D, 0xB3, 0x1D, -- 0xB4, 0x1D, 0xB5, 0x1D, 0xB6, 0x1D, 0xB7, 0x1D, -- 0xB8, 0x1D, 0xB9, 0x1D, 0xBA, 0x1D, 0xBB, 0x1D, -- 0xBC, 0x1D, 0xBD, 0x1D, 0xBE, 0x1D, 0xBF, 0x1D, -- 0xC0, 0x1D, 0xC1, 0x1D, 0xC2, 0x1D, 0xC3, 0x1D, -- 0xC4, 0x1D, 0xC5, 0x1D, 0xC6, 0x1D, 0xC7, 0x1D, -- 0xC8, 0x1D, 0xC9, 0x1D, 0xCA, 0x1D, 0xCB, 0x1D, -- 0xCC, 0x1D, 0xCD, 0x1D, 0xCE, 0x1D, 0xCF, 0x1D, -- 0xD0, 0x1D, 0xD1, 0x1D, 0xD2, 0x1D, 0xD3, 0x1D, -- 0xD4, 0x1D, 0xD5, 0x1D, 0xD6, 0x1D, 0xD7, 0x1D, -- 0xD8, 0x1D, 0xD9, 0x1D, 0xDA, 0x1D, 0xDB, 0x1D, -- 0xDC, 0x1D, 0xDD, 0x1D, 0xDE, 0x1D, 0xDF, 0x1D, -- 0xE0, 0x1D, 0xE1, 0x1D, 0xE2, 0x1D, 0xE3, 0x1D, -- 0xE4, 0x1D, 0xE5, 0x1D, 0xE6, 0x1D, 0xE7, 0x1D, -- 0xE8, 0x1D, 0xE9, 0x1D, 0xEA, 0x1D, 0xEB, 0x1D, -- 0xEC, 0x1D, 0xED, 0x1D, 0xEE, 0x1D, 0xEF, 0x1D, -- 0xF0, 0x1D, 0xF1, 0x1D, 0xF2, 0x1D, 0xF3, 0x1D, -- 0xF4, 0x1D, 0xF5, 0x1D, 0xF6, 0x1D, 0xF7, 0x1D, -- 0xF8, 0x1D, 0xF9, 0x1D, 0xFA, 0x1D, 0xFB, 0x1D, -- 0xFC, 0x1D, 0xFD, 0x1D, 0xFE, 0x1D, 0xFF, 0x1D, -- 0x00, 0x1E, 0x00, 0x1E, 0x02, 0x1E, 0x02, 0x1E, -- 0x04, 0x1E, 0x04, 0x1E, 0x06, 0x1E, 0x06, 0x1E, -- 0x08, 0x1E, 0x08, 0x1E, 0x0A, 0x1E, 0x0A, 0x1E, -- 0x0C, 0x1E, 0x0C, 0x1E, 0x0E, 0x1E, 0x0E, 0x1E, -- 0x10, 0x1E, 0x10, 0x1E, 0x12, 0x1E, 0x12, 0x1E, -- 0x14, 0x1E, 0x14, 0x1E, 0x16, 0x1E, 0x16, 0x1E, -- 0x18, 0x1E, 0x18, 0x1E, 0x1A, 0x1E, 0x1A, 0x1E, -- 0x1C, 0x1E, 0x1C, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, -- 0x20, 0x1E, 0x20, 0x1E, 0x22, 0x1E, 0x22, 0x1E, -- 0x24, 0x1E, 0x24, 0x1E, 0x26, 0x1E, 0x26, 0x1E, -- 0x28, 0x1E, 0x28, 0x1E, 0x2A, 0x1E, 0x2A, 0x1E, -- 0x2C, 0x1E, 0x2C, 0x1E, 0x2E, 0x1E, 0x2E, 0x1E, -- 0x30, 0x1E, 0x30, 0x1E, 0x32, 0x1E, 0x32, 0x1E, -- 0x34, 0x1E, 0x34, 0x1E, 0x36, 0x1E, 0x36, 0x1E, -- 0x38, 0x1E, 0x38, 0x1E, 0x3A, 0x1E, 0x3A, 0x1E, -- 0x3C, 0x1E, 0x3C, 0x1E, 0x3E, 0x1E, 0x3E, 0x1E, -- 0x40, 0x1E, 0x40, 0x1E, 0x42, 0x1E, 0x42, 0x1E, -- 0x44, 0x1E, 0x44, 0x1E, 0x46, 0x1E, 0x46, 0x1E, -- 0x48, 0x1E, 0x48, 0x1E, 0x4A, 0x1E, 0x4A, 0x1E, -- 0x4C, 0x1E, 0x4C, 0x1E, 0x4E, 0x1E, 0x4E, 0x1E, -- 0x50, 0x1E, 0x50, 0x1E, 0x52, 0x1E, 0x52, 0x1E, -- 0x54, 0x1E, 0x54, 0x1E, 0x56, 0x1E, 0x56, 0x1E, -- 0x58, 0x1E, 0x58, 0x1E, 0x5A, 0x1E, 0x5A, 0x1E, -- 0x5C, 0x1E, 0x5C, 0x1E, 0x5E, 0x1E, 0x5E, 0x1E, -- 0x60, 0x1E, 0x60, 0x1E, 0x62, 0x1E, 0x62, 0x1E, -- 0x64, 0x1E, 0x64, 0x1E, 0x66, 0x1E, 0x66, 0x1E, -- 0x68, 0x1E, 0x68, 0x1E, 0x6A, 0x1E, 0x6A, 0x1E, -- 0x6C, 0x1E, 0x6C, 0x1E, 0x6E, 0x1E, 0x6E, 0x1E, -- 0x70, 0x1E, 0x70, 0x1E, 0x72, 0x1E, 0x72, 0x1E, -- 0x74, 0x1E, 0x74, 0x1E, 0x76, 0x1E, 0x76, 0x1E, -- 0x78, 0x1E, 0x78, 0x1E, 0x7A, 0x1E, 0x7A, 0x1E, -- 0x7C, 0x1E, 0x7C, 0x1E, 0x7E, 0x1E, 0x7E, 0x1E, -- 0x80, 0x1E, 0x80, 0x1E, 0x82, 0x1E, 0x82, 0x1E, -- 0x84, 0x1E, 0x84, 0x1E, 0x86, 0x1E, 0x86, 0x1E, -- 0x88, 0x1E, 0x88, 0x1E, 0x8A, 0x1E, 0x8A, 0x1E, -- 0x8C, 0x1E, 0x8C, 0x1E, 0x8E, 0x1E, 0x8E, 0x1E, -- 0x90, 0x1E, 0x90, 0x1E, 0x92, 0x1E, 0x92, 0x1E, -- 0x94, 0x1E, 0x94, 0x1E, 0x96, 0x1E, 0x97, 0x1E, -- 0x98, 0x1E, 0x99, 0x1E, 0x9A, 0x1E, 0x9B, 0x1E, -- 0x9C, 0x1E, 0x9D, 0x1E, 0x9E, 0x1E, 0x9F, 0x1E, -- 0xA0, 0x1E, 0xA0, 0x1E, 0xA2, 0x1E, 0xA2, 0x1E, -- 0xA4, 0x1E, 0xA4, 0x1E, 0xA6, 0x1E, 0xA6, 0x1E, -- 0xA8, 0x1E, 0xA8, 0x1E, 0xAA, 0x1E, 0xAA, 0x1E, -- 0xAC, 0x1E, 0xAC, 0x1E, 0xAE, 0x1E, 0xAE, 0x1E, -- 0xB0, 0x1E, 0xB0, 0x1E, 0xB2, 0x1E, 0xB2, 0x1E, -- 0xB4, 0x1E, 0xB4, 0x1E, 0xB6, 0x1E, 0xB6, 0x1E, -- 0xB8, 0x1E, 0xB8, 0x1E, 0xBA, 0x1E, 0xBA, 0x1E, -- 0xBC, 0x1E, 0xBC, 0x1E, 0xBE, 0x1E, 0xBE, 0x1E, -- 0xC0, 0x1E, 0xC0, 0x1E, 0xC2, 0x1E, 0xC2, 0x1E, -- 0xC4, 0x1E, 0xC4, 0x1E, 0xC6, 0x1E, 0xC6, 0x1E, -- 0xC8, 0x1E, 0xC8, 0x1E, 0xCA, 0x1E, 0xCA, 0x1E, -- 0xCC, 0x1E, 0xCC, 0x1E, 0xCE, 0x1E, 0xCE, 0x1E, -- 0xD0, 0x1E, 0xD0, 0x1E, 0xD2, 0x1E, 0xD2, 0x1E, -- 0xD4, 0x1E, 0xD4, 0x1E, 0xD6, 0x1E, 0xD6, 0x1E, -- 0xD8, 0x1E, 0xD8, 0x1E, 0xDA, 0x1E, 0xDA, 0x1E, -- 0xDC, 0x1E, 0xDC, 0x1E, 0xDE, 0x1E, 0xDE, 0x1E, -- 0xE0, 0x1E, 0xE0, 0x1E, 0xE2, 0x1E, 0xE2, 0x1E, -- 0xE4, 0x1E, 0xE4, 0x1E, 0xE6, 0x1E, 0xE6, 0x1E, -- 0xE8, 0x1E, 0xE8, 0x1E, 0xEA, 0x1E, 0xEA, 0x1E, -- 0xEC, 0x1E, 0xEC, 0x1E, 0xEE, 0x1E, 0xEE, 0x1E, -- 0xF0, 0x1E, 0xF0, 0x1E, 0xF2, 0x1E, 0xF2, 0x1E, -- 0xF4, 0x1E, 0xF4, 0x1E, 0xF6, 0x1E, 0xF6, 0x1E, -- 0xF8, 0x1E, 0xF8, 0x1E, 0xFA, 0x1E, 0xFB, 0x1E, -- 0xFC, 0x1E, 0xFD, 0x1E, 0xFE, 0x1E, 0xFF, 0x1E, -- 0x08, 0x1F, 0x09, 0x1F, 0x0A, 0x1F, 0x0B, 0x1F, -- 0x0C, 0x1F, 0x0D, 0x1F, 0x0E, 0x1F, 0x0F, 0x1F, -- 0x08, 0x1F, 0x09, 0x1F, 0x0A, 0x1F, 0x0B, 0x1F, -- 0x0C, 0x1F, 0x0D, 0x1F, 0x0E, 0x1F, 0x0F, 0x1F, -- 0x18, 0x1F, 0x19, 0x1F, 0x1A, 0x1F, 0x1B, 0x1F, -- 0x1C, 0x1F, 0x1D, 0x1F, 0x16, 0x1F, 0x17, 0x1F, -- 0x18, 0x1F, 0x19, 0x1F, 0x1A, 0x1F, 0x1B, 0x1F, -- 0x1C, 0x1F, 0x1D, 0x1F, 0x1E, 0x1F, 0x1F, 0x1F, -- 0x28, 0x1F, 0x29, 0x1F, 0x2A, 0x1F, 0x2B, 0x1F, -- 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x2F, 0x1F, -- 0x28, 0x1F, 0x29, 0x1F, 0x2A, 0x1F, 0x2B, 0x1F, -- 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x2F, 0x1F, -- 0x38, 0x1F, 0x39, 0x1F, 0x3A, 0x1F, 0x3B, 0x1F, -- 0x3C, 0x1F, 0x3D, 0x1F, 0x3E, 0x1F, 0x3F, 0x1F, -- 0x38, 0x1F, 0x39, 0x1F, 0x3A, 0x1F, 0x3B, 0x1F, -- 0x3C, 0x1F, 0x3D, 0x1F, 0x3E, 0x1F, 0x3F, 0x1F, -- 0x48, 0x1F, 0x49, 0x1F, 0x4A, 0x1F, 0x4B, 0x1F, -- 0x4C, 0x1F, 0x4D, 0x1F, 0x46, 0x1F, 0x47, 0x1F, -- 0x48, 0x1F, 0x49, 0x1F, 0x4A, 0x1F, 0x4B, 0x1F, -- 0x4C, 0x1F, 0x4D, 0x1F, 0x4E, 0x1F, 0x4F, 0x1F, -- 0x50, 0x1F, 0x59, 0x1F, 0x52, 0x1F, 0x5B, 0x1F, -- 0x54, 0x1F, 0x5D, 0x1F, 0x56, 0x1F, 0x5F, 0x1F, -- 0x58, 0x1F, 0x59, 0x1F, 0x5A, 0x1F, 0x5B, 0x1F, -- 0x5C, 0x1F, 0x5D, 0x1F, 0x5E, 0x1F, 0x5F, 0x1F, -- 0x68, 0x1F, 0x69, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, -- 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x6F, 0x1F, -- 0x68, 0x1F, 0x69, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, -- 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x6F, 0x1F, -- 0xBA, 0x1F, 0xBB, 0x1F, 0xC8, 0x1F, 0xC9, 0x1F, -- 0xCA, 0x1F, 0xCB, 0x1F, 0xDA, 0x1F, 0xDB, 0x1F, -- 0xF8, 0x1F, 0xF9, 0x1F, 0xEA, 0x1F, 0xEB, 0x1F, -- 0xFA, 0x1F, 0xFB, 0x1F, 0x7E, 0x1F, 0x7F, 0x1F, -- 0x88, 0x1F, 0x89, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, -- 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, -- 0x88, 0x1F, 0x89, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, -- 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, -- 0x98, 0x1F, 0x99, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, -- 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, -- 0x98, 0x1F, 0x99, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, -- 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, -- 0xA8, 0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, -- 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, -- 0xA8, 0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, -- 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, -- 0xB8, 0x1F, 0xB9, 0x1F, 0xB2, 0x1F, 0xBC, 0x1F, -- 0xB4, 0x1F, 0xB5, 0x1F, 0xB6, 0x1F, 0xB7, 0x1F, -- 0xB8, 0x1F, 0xB9, 0x1F, 0xBA, 0x1F, 0xBB, 0x1F, -- 0xBC, 0x1F, 0xBD, 0x1F, 0xBE, 0x1F, 0xBF, 0x1F, -- 0xC0, 0x1F, 0xC1, 0x1F, 0xC2, 0x1F, 0xC3, 0x1F, -- 0xC4, 0x1F, 0xC5, 0x1F, 0xC6, 0x1F, 0xC7, 0x1F, -- 0xC8, 0x1F, 0xC9, 0x1F, 0xCA, 0x1F, 0xCB, 0x1F, -- 0xC3, 0x1F, 0xCD, 0x1F, 0xCE, 0x1F, 0xCF, 0x1F, -- 0xD8, 0x1F, 0xD9, 0x1F, 0xD2, 0x1F, 0xD3, 0x1F, -- 0xD4, 0x1F, 0xD5, 0x1F, 0xD6, 0x1F, 0xD7, 0x1F, -- 0xD8, 0x1F, 0xD9, 0x1F, 0xDA, 0x1F, 0xDB, 0x1F, -- 0xDC, 0x1F, 0xDD, 0x1F, 0xDE, 0x1F, 0xDF, 0x1F, -- 0xE8, 0x1F, 0xE9, 0x1F, 0xE2, 0x1F, 0xE3, 0x1F, -- 0xE4, 0x1F, 0xEC, 0x1F, 0xE6, 0x1F, 0xE7, 0x1F, -- 0xE8, 0x1F, 0xE9, 0x1F, 0xEA, 0x1F, 0xEB, 0x1F, -- 0xEC, 0x1F, 0xED, 0x1F, 0xEE, 0x1F, 0xEF, 0x1F, -- 0xF0, 0x1F, 0xF1, 0x1F, 0xF2, 0x1F, 0xF3, 0x1F, -- 0xF4, 0x1F, 0xF5, 0x1F, 0xF6, 0x1F, 0xF7, 0x1F, -- 0xF8, 0x1F, 0xF9, 0x1F, 0xFA, 0x1F, 0xFB, 0x1F, -- 0xF3, 0x1F, 0xFD, 0x1F, 0xFE, 0x1F, 0xFF, 0x1F, -- 0x00, 0x20, 0x01, 0x20, 0x02, 0x20, 0x03, 0x20, -- 0x04, 0x20, 0x05, 0x20, 0x06, 0x20, 0x07, 0x20, -- 0x08, 0x20, 0x09, 0x20, 0x0A, 0x20, 0x0B, 0x20, -- 0x0C, 0x20, 0x0D, 0x20, 0x0E, 0x20, 0x0F, 0x20, -- 0x10, 0x20, 0x11, 0x20, 0x12, 0x20, 0x13, 0x20, -- 0x14, 0x20, 0x15, 0x20, 0x16, 0x20, 0x17, 0x20, -- 0x18, 0x20, 0x19, 0x20, 0x1A, 0x20, 0x1B, 0x20, -- 0x1C, 0x20, 0x1D, 0x20, 0x1E, 0x20, 0x1F, 0x20, -- 0x20, 0x20, 0x21, 0x20, 0x22, 0x20, 0x23, 0x20, -- 0x24, 0x20, 0x25, 0x20, 0x26, 0x20, 0x27, 0x20, -- 0x28, 0x20, 0x29, 0x20, 0x2A, 0x20, 0x2B, 0x20, -- 0x2C, 0x20, 0x2D, 0x20, 0x2E, 0x20, 0x2F, 0x20, -- 0x30, 0x20, 0x31, 0x20, 0x32, 0x20, 0x33, 0x20, -- 0x34, 0x20, 0x35, 0x20, 0x36, 0x20, 0x37, 0x20, -- 0x38, 0x20, 0x39, 0x20, 0x3A, 0x20, 0x3B, 0x20, -- 0x3C, 0x20, 0x3D, 0x20, 0x3E, 0x20, 0x3F, 0x20, -- 0x40, 0x20, 0x41, 0x20, 0x42, 0x20, 0x43, 0x20, -- 0x44, 0x20, 0x45, 0x20, 0x46, 0x20, 0x47, 0x20, -- 0x48, 0x20, 0x49, 0x20, 0x4A, 0x20, 0x4B, 0x20, -- 0x4C, 0x20, 0x4D, 0x20, 0x4E, 0x20, 0x4F, 0x20, -- 0x50, 0x20, 0x51, 0x20, 0x52, 0x20, 0x53, 0x20, -- 0x54, 0x20, 0x55, 0x20, 0x56, 0x20, 0x57, 0x20, -- 0x58, 0x20, 0x59, 0x20, 0x5A, 0x20, 0x5B, 0x20, -- 0x5C, 0x20, 0x5D, 0x20, 0x5E, 0x20, 0x5F, 0x20, -- 0x60, 0x20, 0x61, 0x20, 0x62, 0x20, 0x63, 0x20, -- 0x64, 0x20, 0x65, 0x20, 0x66, 0x20, 0x67, 0x20, -- 0x68, 0x20, 0x69, 0x20, 0x6A, 0x20, 0x6B, 0x20, -- 0x6C, 0x20, 0x6D, 0x20, 0x6E, 0x20, 0x6F, 0x20, -- 0x70, 0x20, 0x71, 0x20, 0x72, 0x20, 0x73, 0x20, -- 0x74, 0x20, 0x75, 0x20, 0x76, 0x20, 0x77, 0x20, -- 0x78, 0x20, 0x79, 0x20, 0x7A, 0x20, 0x7B, 0x20, -- 0x7C, 0x20, 0x7D, 0x20, 0x7E, 0x20, 0x7F, 0x20, -- 0x80, 0x20, 0x81, 0x20, 0x82, 0x20, 0x83, 0x20, -- 0x84, 0x20, 0x85, 0x20, 0x86, 0x20, 0x87, 0x20, -- 0x88, 0x20, 0x89, 0x20, 0x8A, 0x20, 0x8B, 0x20, -- 0x8C, 0x20, 0x8D, 0x20, 0x8E, 0x20, 0x8F, 0x20, -- 0x90, 0x20, 0x91, 0x20, 0x92, 0x20, 0x93, 0x20, -- 0x94, 0x20, 0x95, 0x20, 0x96, 0x20, 0x97, 0x20, -- 0x98, 0x20, 0x99, 0x20, 0x9A, 0x20, 0x9B, 0x20, -- 0x9C, 0x20, 0x9D, 0x20, 0x9E, 0x20, 0x9F, 0x20, -- 0xA0, 0x20, 0xA1, 0x20, 0xA2, 0x20, 0xA3, 0x20, -- 0xA4, 0x20, 0xA5, 0x20, 0xA6, 0x20, 0xA7, 0x20, -- 0xA8, 0x20, 0xA9, 0x20, 0xAA, 0x20, 0xAB, 0x20, -- 0xAC, 0x20, 0xAD, 0x20, 0xAE, 0x20, 0xAF, 0x20, -- 0xB0, 0x20, 0xB1, 0x20, 0xB2, 0x20, 0xB3, 0x20, -- 0xB4, 0x20, 0xB5, 0x20, 0xB6, 0x20, 0xB7, 0x20, -- 0xB8, 0x20, 0xB9, 0x20, 0xBA, 0x20, 0xBB, 0x20, -- 0xBC, 0x20, 0xBD, 0x20, 0xBE, 0x20, 0xBF, 0x20, -- 0xC0, 0x20, 0xC1, 0x20, 0xC2, 0x20, 0xC3, 0x20, -- 0xC4, 0x20, 0xC5, 0x20, 0xC6, 0x20, 0xC7, 0x20, -- 0xC8, 0x20, 0xC9, 0x20, 0xCA, 0x20, 0xCB, 0x20, -- 0xCC, 0x20, 0xCD, 0x20, 0xCE, 0x20, 0xCF, 0x20, -- 0xD0, 0x20, 0xD1, 0x20, 0xD2, 0x20, 0xD3, 0x20, -- 0xD4, 0x20, 0xD5, 0x20, 0xD6, 0x20, 0xD7, 0x20, -- 0xD8, 0x20, 0xD9, 0x20, 0xDA, 0x20, 0xDB, 0x20, -- 0xDC, 0x20, 0xDD, 0x20, 0xDE, 0x20, 0xDF, 0x20, -- 0xE0, 0x20, 0xE1, 0x20, 0xE2, 0x20, 0xE3, 0x20, -- 0xE4, 0x20, 0xE5, 0x20, 0xE6, 0x20, 0xE7, 0x20, -- 0xE8, 0x20, 0xE9, 0x20, 0xEA, 0x20, 0xEB, 0x20, -- 0xEC, 0x20, 0xED, 0x20, 0xEE, 0x20, 0xEF, 0x20, -- 0xF0, 0x20, 0xF1, 0x20, 0xF2, 0x20, 0xF3, 0x20, -- 0xF4, 0x20, 0xF5, 0x20, 0xF6, 0x20, 0xF7, 0x20, -- 0xF8, 0x20, 0xF9, 0x20, 0xFA, 0x20, 0xFB, 0x20, -- 0xFC, 0x20, 0xFD, 0x20, 0xFE, 0x20, 0xFF, 0x20, -- 0x00, 0x21, 0x01, 0x21, 0x02, 0x21, 0x03, 0x21, -- 0x04, 0x21, 0x05, 0x21, 0x06, 0x21, 0x07, 0x21, -- 0x08, 0x21, 0x09, 0x21, 0x0A, 0x21, 0x0B, 0x21, -- 0x0C, 0x21, 0x0D, 0x21, 0x0E, 0x21, 0x0F, 0x21, -- 0x10, 0x21, 0x11, 0x21, 0x12, 0x21, 0x13, 0x21, -- 0x14, 0x21, 0x15, 0x21, 0x16, 0x21, 0x17, 0x21, -- 0x18, 0x21, 0x19, 0x21, 0x1A, 0x21, 0x1B, 0x21, -- 0x1C, 0x21, 0x1D, 0x21, 0x1E, 0x21, 0x1F, 0x21, -- 0x20, 0x21, 0x21, 0x21, 0x22, 0x21, 0x23, 0x21, -- 0x24, 0x21, 0x25, 0x21, 0x26, 0x21, 0x27, 0x21, -- 0x28, 0x21, 0x29, 0x21, 0x2A, 0x21, 0x2B, 0x21, -- 0x2C, 0x21, 0x2D, 0x21, 0x2E, 0x21, 0x2F, 0x21, -- 0x30, 0x21, 0x31, 0x21, 0x32, 0x21, 0x33, 0x21, -- 0x34, 0x21, 0x35, 0x21, 0x36, 0x21, 0x37, 0x21, -- 0x38, 0x21, 0x39, 0x21, 0x3A, 0x21, 0x3B, 0x21, -- 0x3C, 0x21, 0x3D, 0x21, 0x3E, 0x21, 0x3F, 0x21, -- 0x40, 0x21, 0x41, 0x21, 0x42, 0x21, 0x43, 0x21, -- 0x44, 0x21, 0x45, 0x21, 0x46, 0x21, 0x47, 0x21, -- 0x48, 0x21, 0x49, 0x21, 0x4A, 0x21, 0x4B, 0x21, -- 0x4C, 0x21, 0x4D, 0x21, 0x32, 0x21, 0x4F, 0x21, -- 0x50, 0x21, 0x51, 0x21, 0x52, 0x21, 0x53, 0x21, -- 0x54, 0x21, 0x55, 0x21, 0x56, 0x21, 0x57, 0x21, -- 0x58, 0x21, 0x59, 0x21, 0x5A, 0x21, 0x5B, 0x21, -- 0x5C, 0x21, 0x5D, 0x21, 0x5E, 0x21, 0x5F, 0x21, -- 0x60, 0x21, 0x61, 0x21, 0x62, 0x21, 0x63, 0x21, -- 0x64, 0x21, 0x65, 0x21, 0x66, 0x21, 0x67, 0x21, -- 0x68, 0x21, 0x69, 0x21, 0x6A, 0x21, 0x6B, 0x21, -- 0x6C, 0x21, 0x6D, 0x21, 0x6E, 0x21, 0x6F, 0x21, -- 0x60, 0x21, 0x61, 0x21, 0x62, 0x21, 0x63, 0x21, -- 0x64, 0x21, 0x65, 0x21, 0x66, 0x21, 0x67, 0x21, -- 0x68, 0x21, 0x69, 0x21, 0x6A, 0x21, 0x6B, 0x21, -- 0x6C, 0x21, 0x6D, 0x21, 0x6E, 0x21, 0x6F, 0x21, -- 0x80, 0x21, 0x81, 0x21, 0x82, 0x21, 0x83, 0x21, -- 0x83, 0x21, 0xFF, 0xFF, 0x4B, 0x03, 0xB6, 0x24, -- 0xB7, 0x24, 0xB8, 0x24, 0xB9, 0x24, 0xBA, 0x24, -- 0xBB, 0x24, 0xBC, 0x24, 0xBD, 0x24, 0xBE, 0x24, -- 0xBF, 0x24, 0xC0, 0x24, 0xC1, 0x24, 0xC2, 0x24, -- 0xC3, 0x24, 0xC4, 0x24, 0xC5, 0x24, 0xC6, 0x24, -- 0xC7, 0x24, 0xC8, 0x24, 0xC9, 0x24, 0xCA, 0x24, -- 0xCB, 0x24, 0xCC, 0x24, 0xCD, 0x24, 0xCE, 0x24, -- 0xCF, 0x24, 0xFF, 0xFF, 0x46, 0x07, 0x00, 0x2C, -- 0x01, 0x2C, 0x02, 0x2C, 0x03, 0x2C, 0x04, 0x2C, -- 0x05, 0x2C, 0x06, 0x2C, 0x07, 0x2C, 0x08, 0x2C, -- 0x09, 0x2C, 0x0A, 0x2C, 0x0B, 0x2C, 0x0C, 0x2C, -- 0x0D, 0x2C, 0x0E, 0x2C, 0x0F, 0x2C, 0x10, 0x2C, -- 0x11, 0x2C, 0x12, 0x2C, 0x13, 0x2C, 0x14, 0x2C, -- 0x15, 0x2C, 0x16, 0x2C, 0x17, 0x2C, 0x18, 0x2C, -- 0x19, 0x2C, 0x1A, 0x2C, 0x1B, 0x2C, 0x1C, 0x2C, -- 0x1D, 0x2C, 0x1E, 0x2C, 0x1F, 0x2C, 0x20, 0x2C, -- 0x21, 0x2C, 0x22, 0x2C, 0x23, 0x2C, 0x24, 0x2C, -- 0x25, 0x2C, 0x26, 0x2C, 0x27, 0x2C, 0x28, 0x2C, -- 0x29, 0x2C, 0x2A, 0x2C, 0x2B, 0x2C, 0x2C, 0x2C, -- 0x2D, 0x2C, 0x2E, 0x2C, 0x5F, 0x2C, 0x60, 0x2C, -- 0x60, 0x2C, 0x62, 0x2C, 0x63, 0x2C, 0x64, 0x2C, -- 0x65, 0x2C, 0x66, 0x2C, 0x67, 0x2C, 0x67, 0x2C, -- 0x69, 0x2C, 0x69, 0x2C, 0x6B, 0x2C, 0x6B, 0x2C, -- 0x6D, 0x2C, 0x6E, 0x2C, 0x6F, 0x2C, 0x70, 0x2C, -- 0x71, 0x2C, 0x72, 0x2C, 0x73, 0x2C, 0x74, 0x2C, -- 0x75, 0x2C, 0x75, 0x2C, 0x77, 0x2C, 0x78, 0x2C, -- 0x79, 0x2C, 0x7A, 0x2C, 0x7B, 0x2C, 0x7C, 0x2C, -- 0x7D, 0x2C, 0x7E, 0x2C, 0x7F, 0x2C, 0x80, 0x2C, -- 0x80, 0x2C, 0x82, 0x2C, 0x82, 0x2C, 0x84, 0x2C, -- 0x84, 0x2C, 0x86, 0x2C, 0x86, 0x2C, 0x88, 0x2C, -- 0x88, 0x2C, 0x8A, 0x2C, 0x8A, 0x2C, 0x8C, 0x2C, -- 0x8C, 0x2C, 0x8E, 0x2C, 0x8E, 0x2C, 0x90, 0x2C, -- 0x90, 0x2C, 0x92, 0x2C, 0x92, 0x2C, 0x94, 0x2C, -- 0x94, 0x2C, 0x96, 0x2C, 0x96, 0x2C, 0x98, 0x2C, -- 0x98, 0x2C, 0x9A, 0x2C, 0x9A, 0x2C, 0x9C, 0x2C, -- 0x9C, 0x2C, 0x9E, 0x2C, 0x9E, 0x2C, 0xA0, 0x2C, -- 0xA0, 0x2C, 0xA2, 0x2C, 0xA2, 0x2C, 0xA4, 0x2C, -- 0xA4, 0x2C, 0xA6, 0x2C, 0xA6, 0x2C, 0xA8, 0x2C, -- 0xA8, 0x2C, 0xAA, 0x2C, 0xAA, 0x2C, 0xAC, 0x2C, -- 0xAC, 0x2C, 0xAE, 0x2C, 0xAE, 0x2C, 0xB0, 0x2C, -- 0xB0, 0x2C, 0xB2, 0x2C, 0xB2, 0x2C, 0xB4, 0x2C, -- 0xB4, 0x2C, 0xB6, 0x2C, 0xB6, 0x2C, 0xB8, 0x2C, -- 0xB8, 0x2C, 0xBA, 0x2C, 0xBA, 0x2C, 0xBC, 0x2C, -- 0xBC, 0x2C, 0xBE, 0x2C, 0xBE, 0x2C, 0xC0, 0x2C, -- 0xC0, 0x2C, 0xC2, 0x2C, 0xC2, 0x2C, 0xC4, 0x2C, -- 0xC4, 0x2C, 0xC6, 0x2C, 0xC6, 0x2C, 0xC8, 0x2C, -- 0xC8, 0x2C, 0xCA, 0x2C, 0xCA, 0x2C, 0xCC, 0x2C, -- 0xCC, 0x2C, 0xCE, 0x2C, 0xCE, 0x2C, 0xD0, 0x2C, -- 0xD0, 0x2C, 0xD2, 0x2C, 0xD2, 0x2C, 0xD4, 0x2C, -- 0xD4, 0x2C, 0xD6, 0x2C, 0xD6, 0x2C, 0xD8, 0x2C, -- 0xD8, 0x2C, 0xDA, 0x2C, 0xDA, 0x2C, 0xDC, 0x2C, -- 0xDC, 0x2C, 0xDE, 0x2C, 0xDE, 0x2C, 0xE0, 0x2C, -- 0xE0, 0x2C, 0xE2, 0x2C, 0xE2, 0x2C, 0xE4, 0x2C, -- 0xE5, 0x2C, 0xE6, 0x2C, 0xE7, 0x2C, 0xE8, 0x2C, -- 0xE9, 0x2C, 0xEA, 0x2C, 0xEB, 0x2C, 0xEC, 0x2C, -- 0xED, 0x2C, 0xEE, 0x2C, 0xEF, 0x2C, 0xF0, 0x2C, -- 0xF1, 0x2C, 0xF2, 0x2C, 0xF3, 0x2C, 0xF4, 0x2C, -- 0xF5, 0x2C, 0xF6, 0x2C, 0xF7, 0x2C, 0xF8, 0x2C, -- 0xF9, 0x2C, 0xFA, 0x2C, 0xFB, 0x2C, 0xFC, 0x2C, -- 0xFD, 0x2C, 0xFE, 0x2C, 0xFF, 0x2C, 0xA0, 0x10, -- 0xA1, 0x10, 0xA2, 0x10, 0xA3, 0x10, 0xA4, 0x10, -- 0xA5, 0x10, 0xA6, 0x10, 0xA7, 0x10, 0xA8, 0x10, -- 0xA9, 0x10, 0xAA, 0x10, 0xAB, 0x10, 0xAC, 0x10, -- 0xAD, 0x10, 0xAE, 0x10, 0xAF, 0x10, 0xB0, 0x10, -- 0xB1, 0x10, 0xB2, 0x10, 0xB3, 0x10, 0xB4, 0x10, -- 0xB5, 0x10, 0xB6, 0x10, 0xB7, 0x10, 0xB8, 0x10, -- 0xB9, 0x10, 0xBA, 0x10, 0xBB, 0x10, 0xBC, 0x10, -- 0xBD, 0x10, 0xBE, 0x10, 0xBF, 0x10, 0xC0, 0x10, -- 0xC1, 0x10, 0xC2, 0x10, 0xC3, 0x10, 0xC4, 0x10, -- 0xC5, 0x10, 0xFF, 0xFF, 0x1B, 0xD2, 0x21, 0xFF, -- 0x22, 0xFF, 0x23, 0xFF, 0x24, 0xFF, 0x25, 0xFF, -- 0x26, 0xFF, 0x27, 0xFF, 0x28, 0xFF, 0x29, 0xFF, -- 0x2A, 0xFF, 0x2B, 0xFF, 0x2C, 0xFF, 0x2D, 0xFF, -- 0x2E, 0xFF, 0x2F, 0xFF, 0x30, 0xFF, 0x31, 0xFF, -- 0x32, 0xFF, 0x33, 0xFF, 0x34, 0xFF, 0x35, 0xFF, -- 0x36, 0xFF, 0x37, 0xFF, 0x38, 0xFF, 0x39, 0xFF, -- 0x3A, 0xFF, 0x5B, 0xFF, 0x5C, 0xFF, 0x5D, 0xFF, -- 0x5E, 0xFF, 0x5F, 0xFF, 0x60, 0xFF, 0x61, 0xFF, -- 0x62, 0xFF, 0x63, 0xFF, 0x64, 0xFF, 0x65, 0xFF, -- 0x66, 0xFF, 0x67, 0xFF, 0x68, 0xFF, 0x69, 0xFF, -- 0x6A, 0xFF, 0x6B, 0xFF, 0x6C, 0xFF, 0x6D, 0xFF, -- 0x6E, 0xFF, 0x6F, 0xFF, 0x70, 0xFF, 0x71, 0xFF, -- 0x72, 0xFF, 0x73, 0xFF, 0x74, 0xFF, 0x75, 0xFF, -- 0x76, 0xFF, 0x77, 0xFF, 0x78, 0xFF, 0x79, 0xFF, -- 0x7A, 0xFF, 0x7B, 0xFF, 0x7C, 0xFF, 0x7D, 0xFF, -- 0x7E, 0xFF, 0x7F, 0xFF, 0x80, 0xFF, 0x81, 0xFF, -- 0x82, 0xFF, 0x83, 0xFF, 0x84, 0xFF, 0x85, 0xFF, -- 0x86, 0xFF, 0x87, 0xFF, 0x88, 0xFF, 0x89, 0xFF, -- 0x8A, 0xFF, 0x8B, 0xFF, 0x8C, 0xFF, 0x8D, 0xFF, -- 0x8E, 0xFF, 0x8F, 0xFF, 0x90, 0xFF, 0x91, 0xFF, -- 0x92, 0xFF, 0x93, 0xFF, 0x94, 0xFF, 0x95, 0xFF, -- 0x96, 0xFF, 0x97, 0xFF, 0x98, 0xFF, 0x99, 0xFF, -- 0x9A, 0xFF, 0x9B, 0xFF, 0x9C, 0xFF, 0x9D, 0xFF, -- 0x9E, 0xFF, 0x9F, 0xFF, 0xA0, 0xFF, 0xA1, 0xFF, -- 0xA2, 0xFF, 0xA3, 0xFF, 0xA4, 0xFF, 0xA5, 0xFF, -- 0xA6, 0xFF, 0xA7, 0xFF, 0xA8, 0xFF, 0xA9, 0xFF, -- 0xAA, 0xFF, 0xAB, 0xFF, 0xAC, 0xFF, 0xAD, 0xFF, -- 0xAE, 0xFF, 0xAF, 0xFF, 0xB0, 0xFF, 0xB1, 0xFF, -- 0xB2, 0xFF, 0xB3, 0xFF, 0xB4, 0xFF, 0xB5, 0xFF, -- 0xB6, 0xFF, 0xB7, 0xFF, 0xB8, 0xFF, 0xB9, 0xFF, -- 0xBA, 0xFF, 0xBB, 0xFF, 0xBC, 0xFF, 0xBD, 0xFF, -- 0xBE, 0xFF, 0xBF, 0xFF, 0xC0, 0xFF, 0xC1, 0xFF, -- 0xC2, 0xFF, 0xC3, 0xFF, 0xC4, 0xFF, 0xC5, 0xFF, -- 0xC6, 0xFF, 0xC7, 0xFF, 0xC8, 0xFF, 0xC9, 0xFF, -- 0xCA, 0xFF, 0xCB, 0xFF, 0xCC, 0xFF, 0xCD, 0xFF, -- 0xCE, 0xFF, 0xCF, 0xFF, 0xD0, 0xFF, 0xD1, 0xFF, -- 0xD2, 0xFF, 0xD3, 0xFF, 0xD4, 0xFF, 0xD5, 0xFF, -- 0xD6, 0xFF, 0xD7, 0xFF, 0xD8, 0xFF, 0xD9, 0xFF, -- 0xDA, 0xFF, 0xDB, 0xFF, 0xDC, 0xFF, 0xDD, 0xFF, -- 0xDE, 0xFF, 0xDF, 0xFF, 0xE0, 0xFF, 0xE1, 0xFF, -- 0xE2, 0xFF, 0xE3, 0xFF, 0xE4, 0xFF, 0xE5, 0xFF, -- 0xE6, 0xFF, 0xE7, 0xFF, 0xE8, 0xFF, 0xE9, 0xFF, -- 0xEA, 0xFF, 0xEB, 0xFF, 0xEC, 0xFF, 0xED, 0xFF, -- 0xEE, 0xFF, 0xEF, 0xFF, 0xF0, 0xFF, 0xF1, 0xFF, -- 0xF2, 0xFF, 0xF3, 0xFF, 0xF4, 0xFF, 0xF5, 0xFF, -- 0xF6, 0xFF, 0xF7, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, -- 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD, 0xFF, -- 0xFE, 0xFF, 0xFF, 0xFF --}; -diff -Nurp linux-5.6.3.orig/drivers/staging/exfat/Kconfig linux-5.6.3/drivers/staging/exfat/Kconfig ---- linux-5.6.3.orig/drivers/staging/exfat/Kconfig 2020-03-30 01:25:41.000000000 +0300 -+++ linux-5.6.3/drivers/staging/exfat/Kconfig 1970-01-01 02:00:00.000000000 +0200 -@@ -1,41 +0,0 @@ --# SPDX-License-Identifier: GPL-2.0 --config STAGING_EXFAT_FS -- tristate "exFAT fs support" -- depends on BLOCK -- select NLS -- help -- This adds support for the exFAT file system. -- --config STAGING_EXFAT_DISCARD -- bool "enable discard support" -- depends on STAGING_EXFAT_FS -- default y -- --config STAGING_EXFAT_DELAYED_SYNC -- bool "enable delayed sync" -- depends on STAGING_EXFAT_FS -- default n -- --config STAGING_EXFAT_KERNEL_DEBUG -- bool "enable kernel debug features via ioctl" -- depends on STAGING_EXFAT_FS -- default n -- --config STAGING_EXFAT_DEBUG_MSG -- bool "print debug messages" -- depends on STAGING_EXFAT_FS -- default n -- --config STAGING_EXFAT_DEFAULT_CODEPAGE -- int "Default codepage for exFAT" -- default 437 -- depends on STAGING_EXFAT_FS -- help -- This option should be set to the codepage of your exFAT filesystems. -- --config STAGING_EXFAT_DEFAULT_IOCHARSET -- string "Default iocharset for exFAT" -- default "utf8" -- depends on STAGING_EXFAT_FS -- help -- Set this to the default input/output character set you'd like exFAT to use. -diff -Nurp linux-5.6.3.orig/drivers/staging/exfat/Makefile linux-5.6.3/drivers/staging/exfat/Makefile ---- linux-5.6.3.orig/drivers/staging/exfat/Makefile 2020-03-30 01:25:41.000000000 +0300 -+++ linux-5.6.3/drivers/staging/exfat/Makefile 1970-01-01 02:00:00.000000000 +0200 -@@ -1,10 +0,0 @@ --# SPDX-License-Identifier: GPL-2.0-or-later -- --obj-$(CONFIG_STAGING_EXFAT_FS) += exfat.o -- --exfat-y := exfat_core.o \ -- exfat_super.o \ -- exfat_blkdev.o \ -- exfat_cache.o \ -- exfat_nls.o \ -- exfat_upcase.o -diff -Nurp linux-5.6.3.orig/drivers/staging/exfat/TODO linux-5.6.3/drivers/staging/exfat/TODO ---- linux-5.6.3.orig/drivers/staging/exfat/TODO 2020-03-30 01:25:41.000000000 +0300 -+++ linux-5.6.3/drivers/staging/exfat/TODO 1970-01-01 02:00:00.000000000 +0200 -@@ -1,69 +0,0 @@ --A laundry list of things that need looking at, most of which will --require more work than the average checkpatch cleanup... -- --Note that some of these entries may not be bugs - they're things --that need to be looked at, and *possibly* fixed. -- --Clean up the ffsCamelCase function names. -- --Fix (thing)->flags to not use magic numbers - multiple offenders -- --Sort out all the s32/u32/u8 nonsense - most of these should be plain int. -- --exfat_core.c - ffsReadFile - the goto err_out seem to leak a brelse(). --same for ffsWriteFile. -- --All the calls to fs_sync() need to be looked at, particularly in the --context of EXFAT_DELAYED_SYNC. Currently, if that's defined, we only --flush to disk when sync() gets called. We should be doing at least --metadata flushes at appropriate times. -- --ffsTruncateFile - if (old_size <= new_size) { --That doesn't look right. How did it ever work? Are they relying on lazy --block allocation when actual writes happen? If nothing else, it never --does the 'fid->size = new_size' and do the inode update.... -- --ffsSetAttr() is just dangling in the breeze, not wired up at all... -- --Convert global mutexes to a per-superblock mutex. -- --Right now, we load exactly one UTF-8 table. Check to see --if that plays nice with different codepage and iocharset values --for simultanous mounts of different devices -- --exfat_rmdir() checks for -EBUSY but ffsRemoveDir() doesn't return it. --In fact, there's a complete lack of -EBUSY testing anywhere. -- --There's probably a few missing checks for -EEXIST -- --check return codes of sync_dirty_buffer() -- --Why is remove_file doing a num_entries++?? -- --Double check a lot of can't-happen parameter checks (for null pointers for --things that have only one call site and can't pass a null, etc). -- --All the DEBUG stuff can probably be tossed, including the ioctl(). Either --that, or convert to a proper fault-injection system. -- --exfat_remount does exactly one thing. Fix to actually deal with remount --options, particularly handling R/O correctly. For that matter, allow --R/O mounts in the first place. -- --Figure out why the VFAT code used multi_sector_(read|write) but the --exfat code doesn't use it. The difference matters on SSDs with wear leveling. -- --exfat_fat_sync(), exfat_buf_sync(), and sync_alloc_bitmap() --aren't called anyplace.... -- --Create helper function for exfat_set_entry_time() and exfat_set_entry_type() --because it's sort of ugly to be calling the same functionn directly and --other code calling through the fs_func struc ponters... -- --clean up the remaining vol_type checks, which are of two types: --some are ?: operators with magic numbers, and the rest are places --where we're doing stuff with '.' and '..'. -- --Patches to: -- Greg Kroah-Hartman -- Valdis Kletnieks -diff -Nurp linux-5.6.3.orig/drivers/staging/Kconfig linux-5.6.3/drivers/staging/Kconfig ---- linux-5.6.3.orig/drivers/staging/Kconfig 2020-03-30 01:25:41.000000000 +0300 -+++ linux-5.6.3/drivers/staging/Kconfig 2020-04-10 13:23:50.104394573 +0300 -@@ -115,8 +115,6 @@ source "drivers/staging/kpc2000/Kconfig" - source "drivers/staging/wusbcore/Kconfig" - source "drivers/staging/uwb/Kconfig" - --source "drivers/staging/exfat/Kconfig" -- - source "drivers/staging/qlge/Kconfig" - - source "drivers/staging/hp/Kconfig" -diff -Nurp linux-5.6.3.orig/drivers/staging/Makefile linux-5.6.3/drivers/staging/Makefile ---- linux-5.6.3.orig/drivers/staging/Makefile 2020-03-30 01:25:41.000000000 +0300 -+++ linux-5.6.3/drivers/staging/Makefile 2020-04-10 13:23:55.703656045 +0300 -@@ -48,7 +48,6 @@ obj-$(CONFIG_FIELDBUS_DEV) += fieldb - obj-$(CONFIG_KPC2000) += kpc2000/ - obj-$(CONFIG_UWB) += uwb/ - obj-$(CONFIG_USB_WUSB) += wusbcore/ --obj-$(CONFIG_STAGING_EXFAT_FS) += exfat/ - obj-$(CONFIG_QLGE) += qlge/ - obj-$(CONFIG_NET_VENDOR_HP) += hp/ - obj-$(CONFIG_WFX) += wfx/ -diff -Nurp linux-5.6.3.orig/MAINTAINERS linux-5.6.3/MAINTAINERS ---- linux-5.6.3.orig/MAINTAINERS 2020-03-30 01:25:41.000000000 +0300 -+++ linux-5.6.3/MAINTAINERS 2020-04-10 13:23:25.806260135 +0300 -@@ -6304,12 +6304,6 @@ F: include/trace/events/mdio.h - F: include/uapi/linux/mdio.h - F: include/uapi/linux/mii.h - --EXFAT FILE SYSTEM --M: Valdis Kletnieks --L: linux-fsdevel@vger.kernel.org --S: Maintained --F: drivers/staging/exfat/ -- - EXT2 FILE SYSTEM - M: Jan Kara - L: linux-ext4@vger.kernel.org diff --git a/kernel/tools/perf/files/patches/mageia/fs-exfat-update-file-system-parameter-handling.patch b/kernel/tools/perf/files/patches/mageia/fs-exfat-update-file-system-parameter-handling.patch deleted file mode 100644 index 9e07cd45a6..0000000000 --- a/kernel/tools/perf/files/patches/mageia/fs-exfat-update-file-system-parameter-handling.patch +++ /dev/null @@ -1,84 +0,0 @@ -From 9acd0d53800c55c6e2186e29b6433daf24617451 Mon Sep 17 00:00:00 2001 -From: Valdis Kletnieks -Date: Mon, 2 Mar 2020 15:21:45 +0900 -Subject: [PATCH] exfat: update file system parameter handling - -Al Viro recently reworked the way file system parameters are handled -Update super.c to work with it in linux-next 20200203. - -Signed-off-by: Valdis Kletnieks -Reviewed-by: Christoph Hellwig -Acked-by: Namjae Jeon -Signed-off-by: Al Viro ---- - fs/exfat/super.c | 28 +++++++++++----------------- - 1 file changed, 11 insertions(+), 17 deletions(-) - -diff --git a/fs/exfat/super.c b/fs/exfat/super.c -index f06e0b53e393..16ed202ef527 100644 ---- a/fs/exfat/super.c -+++ b/fs/exfat/super.c -@@ -214,7 +214,14 @@ enum { - Opt_time_offset, - }; - --static const struct fs_parameter_spec exfat_param_specs[] = { -+static const struct constant_table exfat_param_enums[] = { -+ { "continue", EXFAT_ERRORS_CONT }, -+ { "panic", EXFAT_ERRORS_PANIC }, -+ { "remount-ro", EXFAT_ERRORS_RO }, -+ {} -+}; -+ -+static const struct fs_parameter_spec exfat_parameters[] = { - fsparam_u32("uid", Opt_uid), - fsparam_u32("gid", Opt_gid), - fsparam_u32oct("umask", Opt_umask), -@@ -222,25 +229,12 @@ static const struct fs_parameter_spec exfat_param_specs[] = { - fsparam_u32oct("fmask", Opt_fmask), - fsparam_u32oct("allow_utime", Opt_allow_utime), - fsparam_string("iocharset", Opt_charset), -- fsparam_enum("errors", Opt_errors), -+ fsparam_enum("errors", Opt_errors, exfat_param_enums), - fsparam_flag("discard", Opt_discard), - fsparam_s32("time_offset", Opt_time_offset), - {} - }; - --static const struct fs_parameter_enum exfat_param_enums[] = { -- { Opt_errors, "continue", EXFAT_ERRORS_CONT }, -- { Opt_errors, "panic", EXFAT_ERRORS_PANIC }, -- { Opt_errors, "remount-ro", EXFAT_ERRORS_RO }, -- {} --}; -- --static const struct fs_parameter_description exfat_parameters = { -- .name = "exfat", -- .specs = exfat_param_specs, -- .enums = exfat_param_enums, --}; -- - static int exfat_parse_param(struct fs_context *fc, struct fs_parameter *param) - { - struct exfat_sb_info *sbi = fc->s_fs_info; -@@ -248,7 +242,7 @@ static int exfat_parse_param(struct fs_context *fc, struct fs_parameter *param) - struct fs_parse_result result; - int opt; - -- opt = fs_parse(fc, &exfat_parameters, param, &result); -+ opt = fs_parse(fc, exfat_parameters, param, &result); - if (opt < 0) - return opt; - -@@ -665,7 +659,7 @@ static struct file_system_type exfat_fs_type = { - .owner = THIS_MODULE, - .name = "exfat", - .init_fs_context = exfat_init_fs_context, -- .parameters = &exfat_parameters, -+ .parameters = exfat_parameters, - .kill_sb = kill_block_super, - .fs_flags = FS_REQUIRES_DEV, - }; --- -2.26.0 - diff --git a/kernel/tools/perf/pspec.xml b/kernel/tools/perf/pspec.xml index c2d0b3e691..e1c4e8c139 100644 --- a/kernel/tools/perf/pspec.xml +++ b/kernel/tools/perf/pspec.xml @@ -12,7 +12,7 @@ app:gui

Performance analyser tool that makes full use of the Linux performance counter subsystem perf is a new tool which is used to optimize, validate and measure applications, workloads or the full system through the Linux performance counter subsystem. - https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.6.tar.gz + https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.7.tar.gz libunwind-devel audit-devel @@ -42,27 +42,11 @@ - patches/linux/patch-5.6.19.xz + patches/linux/patch-5.7.14.xz patches/mageia/fs-aufs-5.6.patch patches/mageia/fs-aufs-5.6-modular.patch patches/mageia/fs-aufs-5.6-fix.patch - patches/mageia/fs-exfat-remove-from-staging.patch - patches/mageia/fs-exfat-add-in-memory-and-on-disk-structures-and-heade.patch - patches/mageia/fs-exfat-add-super-block-operations.patch - patches/mageia/fs-exfat-add-inode-operations.patch - patches/mageia/fs-exfat-add-directory-operations.patch - patches/mageia/fs-exfat-add-file-operations.patch - patches/mageia/fs-exfat-add-fat-entry-operations.patch - patches/mageia/fs-exfat-add-bitmap-operations.patch - patches/mageia/fs-exfat-add-exfat-cache.patch - patches/mageia/fs-exfat-add-misc-operations.patch - patches/mageia/fs-exfat-add-nls-operations.patch - patches/mageia/fs-exfat-add-Kconfig-and-Makefile.patch - patches/mageia/fs-MAINTAINERS-add-exfat-filesystem.patch - patches/mageia/fs-exfat-update-file-system-parameter-handling.patch - patches/mageia/fs-exfat-add-module_alias_fs.patch - patches/mageia/fs-exfat-fix-discard-support.patch patches/mageia/CVE-2019-12379.patch @@ -97,6 +81,13 @@ + + 2020-08-07 + 5.7.14 + Version bump. + Idris Kalp + idriskalp@gmail.com + 2020-06-18 5.6.19