]>
Commit | Line | Data |
---|---|---|
cb791f4e | 1 | This will update the following files: |
2 | ||
3 | Documentation/filesystems/ntfs.txt | 2 ++ | |
4 | fs/ntfs/ChangeLog | 14 +++++++++++++- | |
5 | fs/ntfs/Makefile | 2 +- | |
6 | fs/ntfs/compress.c | 29 ++++++++++++++++++++++------- | |
7 | 4 files changed, 38 insertions(+), 9 deletions(-) | |
8 | ||
9 | through these ChangeSets: | |
10 | ||
11 | <aia21@cantab.net> (04/05/10 1.1611) | |
12 | NTFS: 2.1.9 release - Fix two bugs in the decompression engine | |
13 | in handling of corner cases. | |
14 | ||
15 | ||
16 | diff -Nru a/Documentation/filesystems/ntfs.txt b/Documentation/filesystems/ntfs.txt | |
17 | --- a/Documentation/filesystems/ntfs.txt Mon May 10 10:09:16 2004 | |
18 | +++ b/Documentation/filesystems/ntfs.txt Mon May 10 10:09:16 2004 | |
19 | @@ -273,6 +273,8 @@ | |
20 | ||
21 | Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog. | |
22 | ||
23 | +2.1.9: | |
24 | + - Fix two bugs in handling of corner cases in the decompression engine. | |
25 | 2.1.8: | |
26 | - Read the $MFT mirror and compare it to the $MFT and if the two do not | |
27 | match, force a read-only mount and do not allow read-write remounts. | |
28 | diff -Nru a/fs/ntfs/ChangeLog b/fs/ntfs/ChangeLog | |
29 | --- a/fs/ntfs/ChangeLog Mon May 10 10:09:16 2004 | |
30 | +++ b/fs/ntfs/ChangeLog Mon May 10 10:09:16 2004 | |
31 | @@ -19,7 +19,19 @@ | |
32 | sufficient for synchronisation here. We then just need to make sure | |
33 | ntfs_readpage/writepage/truncate interoperate properly with us. | |
34 | ||
35 | -2.1.8 - Handle $MFT mirror and $LogFile, improve time ihandling, and cleanups. | |
36 | +2.1.9 - Fix two bugs in decompression engine. | |
37 | + | |
38 | + - Fix a bug where we would not always detect that we have reached the | |
39 | + end of a compression block because we were ending at minus one byte | |
40 | + which is effectively the same as being at the end. The fix is to | |
41 | + check whether the uncompressed buffer has been fully filled and if so | |
42 | + we assume we have reached the end of the compression block. A big | |
43 | + thank you to Marcin GibuĊa for the bug report, the assistance in | |
44 | + tracking down the bug and testing the fix. | |
45 | + - Fix a possible bug where when a compressed read is truncated to the | |
46 | + end of the file, the offset inside the last page was not truncated. | |
47 | + | |
48 | +2.1.8 - Handle $MFT mirror and $LogFile, improve time handling, and cleanups. | |
49 | ||
50 | - Use get_bh() instead of manual atomic_inc() in fs/ntfs/compress.c. | |
51 | - Modify fs/ntfs/time.c::ntfs2utc(), get_current_ntfs_time(), and | |
52 | diff -Nru a/fs/ntfs/Makefile b/fs/ntfs/Makefile | |
53 | --- a/fs/ntfs/Makefile Mon May 10 10:09:16 2004 | |
54 | +++ b/fs/ntfs/Makefile Mon May 10 10:09:16 2004 | |
55 | @@ -5,7 +5,7 @@ | |
56 | ntfs-objs := aops.o attrib.o compress.o debug.o dir.o file.o inode.o logfile.o \ | |
57 | mft.o mst.o namei.o super.o sysctl.o unistr.o upcase.o | |
58 | ||
59 | -EXTRA_CFLAGS = -DNTFS_VERSION=\"2.1.8\" | |
60 | +EXTRA_CFLAGS = -DNTFS_VERSION=\"2.1.9\" | |
61 | ||
62 | ifeq ($(CONFIG_NTFS_DEBUG),y) | |
63 | EXTRA_CFLAGS += -DDEBUG | |
64 | diff -Nru a/fs/ntfs/compress.c b/fs/ntfs/compress.c | |
65 | --- a/fs/ntfs/compress.c Mon May 10 10:09:16 2004 | |
66 | +++ b/fs/ntfs/compress.c Mon May 10 10:09:16 2004 | |
67 | @@ -197,9 +197,15 @@ | |
68 | do_next_sb: | |
69 | ntfs_debug("Beginning sub-block at offset = 0x%x in the cb.", | |
70 | cb - cb_start); | |
71 | - | |
72 | - /* Have we reached the end of the compression block? */ | |
73 | - if (cb == cb_end || !le16_to_cpup((u16*)cb)) { | |
74 | + /* | |
75 | + * Have we reached the end of the compression block or the end of the | |
76 | + * decompressed data? The latter can happen for example if the current | |
77 | + * position in the compression block is one byte before its end so the | |
78 | + * first two checks do not detect it. | |
79 | + */ | |
80 | + if (cb == cb_end || !le16_to_cpup((u16*)cb) || | |
81 | + (*dest_index == dest_max_index && | |
82 | + *dest_ofs == dest_max_ofs)) { | |
83 | int i; | |
84 | ||
85 | ntfs_debug("Completed. Returning success (0)."); | |
86 | @@ -501,7 +507,7 @@ | |
87 | */ | |
88 | unsigned int nr_pages = (end_vcn - start_vcn) << | |
89 | vol->cluster_size_bits >> PAGE_CACHE_SHIFT; | |
90 | - unsigned int xpage, max_page, cur_page, cur_ofs, i; | |
91 | + unsigned int xpage, max_page, max_ofs, cur_page, cur_ofs, i; | |
92 | unsigned int cb_clusters, cb_max_ofs; | |
93 | int block, max_block, cb_max_page, bhs_size, nr_bhs, err = 0; | |
94 | struct page **pages; | |
95 | @@ -544,8 +550,11 @@ | |
96 | */ | |
97 | max_page = ((VFS_I(ni)->i_size + PAGE_CACHE_SIZE - 1) >> | |
98 | PAGE_CACHE_SHIFT) - offset; | |
99 | - if (nr_pages < max_page) | |
100 | + max_ofs = (VFS_I(ni)->i_size + PAGE_CACHE_SIZE - 1) & ~PAGE_CACHE_MASK; | |
101 | + if (nr_pages < max_page) { | |
102 | max_page = nr_pages; | |
103 | + max_ofs = 0; | |
104 | + } | |
105 | for (i = 0; i < max_page; i++, offset++) { | |
106 | if (i != xpage) | |
107 | pages[i] = grab_cache_page_nowait(mapping, offset); | |
108 | @@ -713,8 +722,14 @@ | |
109 | cb_max_page >>= PAGE_CACHE_SHIFT; | |
110 | ||
111 | /* Catch end of file inside a compression block. */ | |
112 | - if (cb_max_page > max_page) | |
113 | - cb_max_page = max_page; | |
114 | + if (cb_max_page >= max_page) { | |
115 | + if (cb_max_page > max_page) { | |
116 | + cb_max_page = max_page; | |
117 | + cb_max_ofs = max_ofs; | |
118 | + } else if (cb_max_ofs > max_ofs) { | |
119 | + cb_max_ofs = max_ofs; | |
120 | + } | |
121 | + } | |
122 | ||
123 | if (vcn == start_vcn - cb_clusters) { | |
124 | /* Sparse cb, zero out page range overlapping the cb. */ | |
125 | ||
126 | =================================================================== | |
127 | ||
128 | This BitKeeper patch contains the following changesets: | |
129 | 1.1611 | |
130 | ## Wrapped with gzip_uu ## | |
131 | ||
132 | ||
133 | M'XL( +Y> [U8Z6[;1A#^+3[%-"D"V[&D7=Y4*C>.KQB)$\-V@J(P("S) | |
134 | MI468(@7NRD>C]$??K>_5V:5N6:VO5!(D<G?VF_OCV"_AB^!EJ\929E+C);PO | |
135 | MA&S5(I9+%C9R+G'II"APJ=DM>KPIRJB9RT34S89KX-XQDU$7KG@I6C7:L"8K | |
136 | M\K;/6[63O8,O'[=/#*/=AITNRR_X*9?0;ANR**]8%HNW3':S(F_(DN6BQR5K | |
137 | M1$5O.!$=FH28^':H9Q'''5*7V-XPHC&ES*8\)J;MN[:A;7\[M7D>P,;CA/AF | |
138 | M8#M#8EG4,W:!-JA+*1"[29PF)4""EN.VB/F:T!8AL @(KVVH$^,=/*_=.T8$ | |
139 | MG\[V3UM@-F@C@))GG D.==A/;T!>%Q .+@2D.<@NAYBCCG[)A4B+''A^D>8< | |
140 | M :H7RJ#R.$OS"R@2B(HRYR5$B"8:Q@>P+.(;Q],<&/4'O@R#,&)LP;L/PT3H | |
141 | M"F@>L4N>I!D?TL CA.+;(H$3# G>>,.$1S1TJ$/MF%CA<DB78::I<AS;'YH! | |
142 | M(E8:=XMHT.-X4J+G324L;H7DO0JA(6_D'380.O0<XG*/)"9WPSBTPF4C[H&\ | |
143 | M8)9K^J8W'X@JJA^+B[NL<(=QXB8!HV@,3RPOL5>'8@JTH-2R@L"95SJNA49T | |
144 | MEU:TD]HTB3R?>;%G,]-=K74&:3$%MF][NGG_.TZJJY\Q5<L]?>]4$8^Z#GX/ | |
145 | M'2>P+-WLMCW?ZD[+]E>VNOFC6OU+/V:20U*4\_VN&K0JJ\]0+Z_U!SON^!Y1 | |
146 | M?T0?'YJ> Z:A+6@9M66N6<4C_\9##5TE2W4\*HI'-LIR#:QJE%'*_:&-67 K | |
147 | M?K>]!^2<6E"G_WO2J[9>2/J2CX_(\:YI L5,X[=59?J.9\K=>3P?EP13@G#= | |
148 | MY26':_P4@RR&O)# LFMV*_"XY)'$BF!2[7?9%4??6-3EL2H3HP:(&:LB8C"K | |
149 | M*,R*Z!)"'K&!J)"5!A15)8=8O30?""AR#N&MU##7W10GBE0 3_"I(M,KGMWJ | |
150 | M2A2LQX$)!!N=58N(U XPZL$O<!3LE @:!>J17=0IM2"@WQL%EH<#A"[1"\4 | |
151 | M&L\A&62H!%LNPTUL"$@3$!KH6JD4V)=W>3UV65TN.8UF;4.87B@4#%M^";?% | |
152 | M ,V#(U9&F)"#-!S\_1?3M:( 5/Q+WB]*N:GO46TJ),LCCNG3("6++I7K<7&= | |
153 | M3XXH:R474FW(*@R-:5+[!:*$&9_-;A<=GB8)/4&/8AVZ$H.$Y1LK*^>36B%G | |
154 | MO#*M2!*!?93F(HVY7LF8D-!G%PB/,55U,P%31::*TL>B?*_(AL//1_MGF/FR | |
155 | M1->5_3]CW>]K]!2-*C#(,NWQ"35M:J$(&RD?],4\^8SGB07N>="TLIIY%J:5 | |
156 | M"?'@M$("33R^]1#>^<&THP9S57^8/DT#BG6JP6H%ZXS]>PSI^(ISU-?>;V<G | |
157 | MVYV=_8_;!Z?0AOJN&G([7_=.3@\_?VJ?O]"FG+^82]MT"EE(W$,'G=6Y6QQT | |
158 | M;-,G ;4<?&P$EEL]-IS@(9,"C@K>#TG?\U"P^N/@.3A8X3R=A!7*\["PMN?I | |
159 | M-*Q@5O'P^<TW0FWS^WW96&/=GXZG&7X:'\]D^$F$C*R@9_T5K##MG$<-(]@\ | |
160 | M%DXCQ(3 J#4W\"FR@<1_I5-WWZS!* U3&0TS'6(0 RF/_5J57<:DU(.KFF?[ | |
161 | M?55+",!O6*^/L4Y'2@9EB>.U!L(\I&K,'D^YRP:DTX[ ZD0XQ)%"&R2*B4%) | |
162 | M6F*<U9RE:QV;M-#!'O5J*AM*K&G4T(:U*$2R@RCL*)#A$'[*.'4[LNA$_4%_ | |
163 | M;6U W8WU*%S'+:-6JZUMQ%A'G32/^8TZI^]Z[&:T\NJ5$JIDBD3,2>#]^CI\ | |
164 | M,W8=8BN6KGYJ RR/BQPCE^82;E1Q;((2GU[AP4T5I]&2NM)+Z1O$PA%;8>&/ | |
165 | M:=1&TLCW:U^1[0_7\G2]OI5V1/H'A]=PO'VPU]G9WGF_USD]_'T/ZY^NPROX | |
166 | M<V;]:/OTPYLJ,'FE4, O$WN4^:C+5[IFE!$\\=W8Q><P;AQZU -_'-O.^"AL | |
167 | MM>=@:LL""_NUV<WIX3<S6Y7ZT97:^ X\$[JVUF9$ML8B\\#+IY4;DW^?5;4S | |
168 | 2Z+6#P'=YY/K&/T+)/F"H$P | |
169 | - | |
170 | To unsubscribe from this list: send the line "unsubscribe linux-kernel" in | |
171 | the body of a message to majordomo@vger.kernel.org | |
172 | More majordomo info at http://vger.kernel.org/majordomo-info.html | |
173 | Please read the FAQ at http://www.tux.org/lkml/ | |
174 |