xref: /OK3568_Linux_fs/kernel/Documentation/filesystems/hpfs.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun.. SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun====================
4*4882a593SmuzhiyunRead/Write HPFS 2.09
5*4882a593Smuzhiyun====================
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun1998-2004, Mikulas Patocka
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun:email: mikulas@artax.karlin.mff.cuni.cz
10*4882a593Smuzhiyun:homepage: https://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi
11*4882a593Smuzhiyun
12*4882a593SmuzhiyunCredits
13*4882a593Smuzhiyun=======
14*4882a593SmuzhiyunChris Smith, 1993, original read-only HPFS, some code and hpfs structures file
15*4882a593Smuzhiyun	is taken from it
16*4882a593Smuzhiyun
17*4882a593SmuzhiyunJacques Gelinas, MSDos mmap, Inspired by fs/nfs/mmap.c (Jon Tombs 15 Aug 1993)
18*4882a593Smuzhiyun
19*4882a593SmuzhiyunWerner Almesberger, 1992, 1993, MSDos option parser & CR/LF conversion
20*4882a593Smuzhiyun
21*4882a593SmuzhiyunMount options
22*4882a593Smuzhiyun
23*4882a593Smuzhiyunuid=xxx,gid=xxx,umask=xxx (default uid=gid=0 umask=default_system_umask)
24*4882a593Smuzhiyun	Set owner/group/mode for files that do not have it specified in extended
25*4882a593Smuzhiyun	attributes. Mode is inverted umask - for example umask 027 gives owner
26*4882a593Smuzhiyun	all permission, group read permission and anybody else no access. Note
27*4882a593Smuzhiyun	that for files mode is anded with 0666. If you want files to have 'x'
28*4882a593Smuzhiyun	rights, you must use extended attributes.
29*4882a593Smuzhiyuncase=lower,asis (default asis)
30*4882a593Smuzhiyun	File name lowercasing in readdir.
31*4882a593Smuzhiyunconv=binary,text,auto (default binary)
32*4882a593Smuzhiyun	CR/LF -> LF conversion, if auto, decision is made according to extension
33*4882a593Smuzhiyun	- there is a list of text extensions (I thing it's better to not convert
34*4882a593Smuzhiyun	text file than to damage binary file). If you want to change that list,
35*4882a593Smuzhiyun	change it in the source. Original readonly HPFS contained some strange
36*4882a593Smuzhiyun	heuristic algorithm that I removed. I thing it's danger to let the
37*4882a593Smuzhiyun	computer decide whether file is text or binary. For example, DJGPP
38*4882a593Smuzhiyun	binaries contain small text message at the beginning and they could be
39*4882a593Smuzhiyun	misidentified and damaged under some circumstances.
40*4882a593Smuzhiyuncheck=none,normal,strict (default normal)
41*4882a593Smuzhiyun	Check level. Selecting none will cause only little speedup and big
42*4882a593Smuzhiyun	danger. I tried to write it so that it won't crash if check=normal on
43*4882a593Smuzhiyun	corrupted filesystems. check=strict means many superfluous checks -
44*4882a593Smuzhiyun	used for debugging (for example it checks if file is allocated in
45*4882a593Smuzhiyun	bitmaps when accessing it).
46*4882a593Smuzhiyunerrors=continue,remount-ro,panic (default remount-ro)
47*4882a593Smuzhiyun	Behaviour when filesystem errors found.
48*4882a593Smuzhiyunchkdsk=no,errors,always (default errors)
49*4882a593Smuzhiyun	When to mark filesystem dirty so that OS/2 checks it.
50*4882a593Smuzhiyuneas=no,ro,rw (default rw)
51*4882a593Smuzhiyun	What to do with extended attributes. 'no' - ignore them and use always
52*4882a593Smuzhiyun	values specified in uid/gid/mode options. 'ro' - read extended
53*4882a593Smuzhiyun	attributes but do not create them. 'rw' - create extended attributes
54*4882a593Smuzhiyun	when you use chmod/chown/chgrp/mknod/ln -s on the filesystem.
55*4882a593Smuzhiyuntimeshift=(-)nnn (default 0)
56*4882a593Smuzhiyun	Shifts the time by nnn seconds. For example, if you see under linux
57*4882a593Smuzhiyun	one hour more, than under os/2, use timeshift=-3600.
58*4882a593Smuzhiyun
59*4882a593Smuzhiyun
60*4882a593SmuzhiyunFile names
61*4882a593Smuzhiyun==========
62*4882a593Smuzhiyun
63*4882a593SmuzhiyunAs in OS/2, filenames are case insensitive. However, shell thinks that names
64*4882a593Smuzhiyunare case sensitive, so for example when you create a file FOO, you can use
65*4882a593Smuzhiyun'cat FOO', 'cat Foo', 'cat foo' or 'cat F*' but not 'cat f*'. Note, that you
66*4882a593Smuzhiyunalso won't be able to compile linux kernel (and maybe other things) on HPFS
67*4882a593Smuzhiyunbecause kernel creates different files with names like bootsect.S and
68*4882a593Smuzhiyunbootsect.s. When searching for file thats name has characters >= 128, codepages
69*4882a593Smuzhiyunare used - see below.
70*4882a593SmuzhiyunOS/2 ignores dots and spaces at the end of file name, so this driver does as
71*4882a593Smuzhiyunwell. If you create 'a. ...', the file 'a' will be created, but you can still
72*4882a593Smuzhiyunaccess it under names 'a.', 'a..', 'a .  . . ' etc.
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun
75*4882a593SmuzhiyunExtended attributes
76*4882a593Smuzhiyun===================
77*4882a593Smuzhiyun
78*4882a593SmuzhiyunOn HPFS partitions, OS/2 can associate to each file a special information called
79*4882a593Smuzhiyunextended attributes. Extended attributes are pairs of (key,value) where key is
80*4882a593Smuzhiyunan ascii string identifying that attribute and value is any string of bytes of
81*4882a593Smuzhiyunvariable length. OS/2 stores window and icon positions and file types there. So
82*4882a593Smuzhiyunwhy not use it for unix-specific info like file owner or access rights? This
83*4882a593Smuzhiyundriver can do it. If you chown/chgrp/chmod on a hpfs partition, extended
84*4882a593Smuzhiyunattributes with keys "UID", "GID" or "MODE" and 2-byte values are created. Only
85*4882a593Smuzhiyunthat extended attributes those value differs from defaults specified in mount
86*4882a593Smuzhiyunoptions are created. Once created, the extended attributes are never deleted,
87*4882a593Smuzhiyunthey're just changed. It means that when your default uid=0 and you type
88*4882a593Smuzhiyunsomething like 'chown luser file; chown root file' the file will contain
89*4882a593Smuzhiyunextended attribute UID=0. And when you umount the fs and mount it again with
90*4882a593Smuzhiyunuid=luser_uid, the file will be still owned by root! If you chmod file to 444,
91*4882a593Smuzhiyunextended attribute "MODE" will not be set, this special case is done by setting
92*4882a593Smuzhiyunread-only flag. When you mknod a block or char device, besides "MODE", the
93*4882a593Smuzhiyunspecial 4-byte extended attribute "DEV" will be created containing the device
94*4882a593Smuzhiyunnumber. Currently this driver cannot resize extended attributes - it means
95*4882a593Smuzhiyunthat if somebody (I don't know who?) has set "UID", "GID", "MODE" or "DEV"
96*4882a593Smuzhiyunattributes with different sizes, they won't be rewritten and changing these
97*4882a593Smuzhiyunvalues doesn't work.
98*4882a593Smuzhiyun
99*4882a593Smuzhiyun
100*4882a593SmuzhiyunSymlinks
101*4882a593Smuzhiyun========
102*4882a593Smuzhiyun
103*4882a593SmuzhiyunYou can do symlinks on HPFS partition, symlinks are achieved by setting extended
104*4882a593Smuzhiyunattribute named "SYMLINK" with symlink value. Like on ext2, you can chown and
105*4882a593Smuzhiyunchgrp symlinks but I don't know what is it good for. chmoding symlink results
106*4882a593Smuzhiyunin chmoding file where symlink points. These symlinks are just for Linux use and
107*4882a593Smuzhiyunincompatible with OS/2. OS/2 PmShell symlinks are not supported because they are
108*4882a593Smuzhiyunstored in very crazy way. They tried to do it so that link changes when file is
109*4882a593Smuzhiyunmoved ... sometimes it works. But the link is partly stored in directory
110*4882a593Smuzhiyunextended attributes and partly in OS2SYS.INI. I don't want (and don't know how)
111*4882a593Smuzhiyunto analyze or change OS2SYS.INI.
112*4882a593Smuzhiyun
113*4882a593Smuzhiyun
114*4882a593SmuzhiyunCodepages
115*4882a593Smuzhiyun=========
116*4882a593Smuzhiyun
117*4882a593SmuzhiyunHPFS can contain several uppercasing tables for several codepages and each
118*4882a593Smuzhiyunfile has a pointer to codepage its name is in. However OS/2 was created in
119*4882a593SmuzhiyunAmerica where people don't care much about codepages and so multiple codepages
120*4882a593Smuzhiyunsupport is quite buggy. I have Czech OS/2 working in codepage 852 on my disk.
121*4882a593SmuzhiyunOnce I booted English OS/2 working in cp 850 and I created a file on my 852
122*4882a593Smuzhiyunpartition. It marked file name codepage as 850 - good. But when I again booted
123*4882a593SmuzhiyunCzech OS/2, the file was completely inaccessible under any name. It seems that
124*4882a593SmuzhiyunOS/2 uppercases the search pattern with its system code page (852) and file
125*4882a593Smuzhiyunname it's comparing to with its code page (850). These could never match. Is it
126*4882a593Smuzhiyunreally what IBM developers wanted? But problems continued. When I created in
127*4882a593SmuzhiyunCzech OS/2 another file in that directory, that file was inaccessible too. OS/2
128*4882a593Smuzhiyunprobably uses different uppercasing method when searching where to place a file
129*4882a593Smuzhiyun(note, that files in HPFS directory must be sorted) and when searching for
130*4882a593Smuzhiyuna file. Finally when I opened this directory in PmShell, PmShell crashed (the
131*4882a593Smuzhiyunfunny thing was that, when rebooted, PmShell tried to reopen this directory
132*4882a593Smuzhiyunagain :-). chkdsk happily ignores these errors and only low-level disk
133*4882a593Smuzhiyunmodification saved me.  Never mix different language versions of OS/2 on one
134*4882a593Smuzhiyunsystem although HPFS was designed to allow that.
135*4882a593SmuzhiyunOK, I could implement complex codepage support to this driver but I think it
136*4882a593Smuzhiyunwould cause more problems than benefit with such buggy implementation in OS/2.
137*4882a593SmuzhiyunSo this driver simply uses first codepage it finds for uppercasing and
138*4882a593Smuzhiyunlowercasing no matter what's file codepage index. Usually all file names are in
139*4882a593Smuzhiyunthis codepage - if you don't try to do what I described above :-)
140*4882a593Smuzhiyun
141*4882a593Smuzhiyun
142*4882a593SmuzhiyunKnown bugs
143*4882a593Smuzhiyun==========
144*4882a593Smuzhiyun
145*4882a593SmuzhiyunHPFS386 on OS/2 server is not supported. HPFS386 installed on normal OS/2 client
146*4882a593Smuzhiyunshould work. If you have OS/2 server, use only read-only mode. I don't know how
147*4882a593Smuzhiyunto handle some HPFS386 structures like access control list or extended perm
148*4882a593Smuzhiyunlist, I don't know how to delete them when file is deleted and how to not
149*4882a593Smuzhiyunoverwrite them with extended attributes. Send me some info on these structures
150*4882a593Smuzhiyunand I'll make it. However, this driver should detect presence of HPFS386
151*4882a593Smuzhiyunstructures, remount read-only and not destroy them (I hope).
152*4882a593Smuzhiyun
153*4882a593SmuzhiyunWhen there's not enough space for extended attributes, they will be truncated
154*4882a593Smuzhiyunand no error is returned.
155*4882a593Smuzhiyun
156*4882a593SmuzhiyunOS/2 can't access files if the path is longer than about 256 chars but this
157*4882a593Smuzhiyundriver allows you to do it. chkdsk ignores such errors.
158*4882a593Smuzhiyun
159*4882a593SmuzhiyunSometimes you won't be able to delete some files on a very full filesystem
160*4882a593Smuzhiyun(returning error ENOSPC). That's because file in non-leaf node in directory tree
161*4882a593Smuzhiyun(one directory, if it's large, has dirents in tree on HPFS) must be replaced
162*4882a593Smuzhiyunwith another node when deleted. And that new file might have larger name than
163*4882a593Smuzhiyunthe old one so the new name doesn't fit in directory node (dnode). And that
164*4882a593Smuzhiyunwould result in directory tree splitting, that takes disk space. Workaround is
165*4882a593Smuzhiyunto delete other files that are leaf (probability that the file is non-leaf is
166*4882a593Smuzhiyunabout 1/50) or to truncate file first to make some space.
167*4882a593SmuzhiyunYou encounter this problem only if you have many directories so that
168*4882a593Smuzhiyunpreallocated directory band is full i.e.::
169*4882a593Smuzhiyun
170*4882a593Smuzhiyun	number_of_directories / size_of_filesystem_in_mb > 4.
171*4882a593Smuzhiyun
172*4882a593SmuzhiyunYou can't delete open directories.
173*4882a593Smuzhiyun
174*4882a593SmuzhiyunYou can't rename over directories (what is it good for?).
175*4882a593Smuzhiyun
176*4882a593SmuzhiyunRenaming files so that only case changes doesn't work. This driver supports it
177*4882a593Smuzhiyunbut vfs doesn't. Something like 'mv file FILE' won't work.
178*4882a593Smuzhiyun
179*4882a593SmuzhiyunAll atimes and directory mtimes are not updated. That's because of performance
180*4882a593Smuzhiyunreasons. If you extremely wish to update them, let me know, I'll write it (but
181*4882a593Smuzhiyunit will be slow).
182*4882a593Smuzhiyun
183*4882a593SmuzhiyunWhen the system is out of memory and swap, it may slightly corrupt filesystem
184*4882a593Smuzhiyun(lost files, unbalanced directories). (I guess all filesystem may do it).
185*4882a593Smuzhiyun
186*4882a593SmuzhiyunWhen compiled, you get warning: function declaration isn't a prototype. Does
187*4882a593Smuzhiyunanybody know what does it mean?
188*4882a593Smuzhiyun
189*4882a593Smuzhiyun
190*4882a593SmuzhiyunWhat does "unbalanced tree" message mean?
191*4882a593Smuzhiyun=========================================
192*4882a593Smuzhiyun
193*4882a593SmuzhiyunOld versions of this driver created sometimes unbalanced dnode trees. OS/2
194*4882a593Smuzhiyunchkdsk doesn't scream if the tree is unbalanced (and sometimes creates
195*4882a593Smuzhiyununbalanced trees too :-) but both HPFS and HPFS386 contain bug that it rarely
196*4882a593Smuzhiyuncrashes when the tree is not balanced. This driver handles unbalanced trees
197*4882a593Smuzhiyuncorrectly and writes warning if it finds them. If you see this message, this is
198*4882a593Smuzhiyunprobably because of directories created with old version of this driver.
199*4882a593SmuzhiyunWorkaround is to move all files from that directory to another and then back
200*4882a593Smuzhiyunagain. Do it in Linux, not OS/2! If you see this message in directory that is
201*4882a593Smuzhiyunwhole created by this driver, it is BUG - let me know about it.
202*4882a593Smuzhiyun
203*4882a593Smuzhiyun
204*4882a593SmuzhiyunBugs in OS/2
205*4882a593Smuzhiyun============
206*4882a593Smuzhiyun
207*4882a593SmuzhiyunWhen you have two (or more) lost directories pointing each to other, chkdsk
208*4882a593Smuzhiyunlocks up when repairing filesystem.
209*4882a593Smuzhiyun
210*4882a593SmuzhiyunSometimes (I think it's random) when you create a file with one-char name under
211*4882a593SmuzhiyunOS/2, OS/2 marks it as 'long'. chkdsk then removes this flag saying "Minor fs
212*4882a593Smuzhiyunerror corrected".
213*4882a593Smuzhiyun
214*4882a593SmuzhiyunFile names like "a .b" are marked as 'long' by OS/2 but chkdsk "corrects" it and
215*4882a593Smuzhiyunmarks them as short (and writes "minor fs error corrected"). This bug is not in
216*4882a593SmuzhiyunHPFS386.
217*4882a593Smuzhiyun
218*4882a593SmuzhiyunCodepage bugs described above
219*4882a593Smuzhiyun=============================
220*4882a593Smuzhiyun
221*4882a593SmuzhiyunIf you don't install fixpacks, there are many, many more...
222*4882a593Smuzhiyun
223*4882a593Smuzhiyun
224*4882a593SmuzhiyunHistory
225*4882a593Smuzhiyun=======
226*4882a593Smuzhiyun
227*4882a593Smuzhiyun====== =========================================================================
228*4882a593Smuzhiyun0.90   First public release
229*4882a593Smuzhiyun0.91   Fixed bug that caused shooting to memory when write_inode was called on
230*4882a593Smuzhiyun       open inode (rarely happened)
231*4882a593Smuzhiyun0.92   Fixed a little memory leak in freeing directory inodes
232*4882a593Smuzhiyun0.93   Fixed bug that locked up the machine when there were too many filenames
233*4882a593Smuzhiyun       with first 15 characters same
234*4882a593Smuzhiyun       Fixed write_file to zero file when writing behind file end
235*4882a593Smuzhiyun0.94   Fixed a little memory leak when trying to delete busy file or directory
236*4882a593Smuzhiyun0.95   Fixed a bug that i_hpfs_parent_dir was not updated when moving files
237*4882a593Smuzhiyun1.90   First version for 2.1.1xx kernels
238*4882a593Smuzhiyun1.91   Fixed a bug that chk_sectors failed when sectors were at the end of disk
239*4882a593Smuzhiyun       Fixed a race-condition when write_inode is called while deleting file
240*4882a593Smuzhiyun       Fixed a bug that could possibly happen (with very low probability) when
241*4882a593Smuzhiyun       using 0xff in filenames.
242*4882a593Smuzhiyun
243*4882a593Smuzhiyun       Rewritten locking to avoid race-conditions
244*4882a593Smuzhiyun
245*4882a593Smuzhiyun       Mount option 'eas' now works
246*4882a593Smuzhiyun
247*4882a593Smuzhiyun       Fsync no longer returns error
248*4882a593Smuzhiyun
249*4882a593Smuzhiyun       Files beginning with '.' are marked hidden
250*4882a593Smuzhiyun
251*4882a593Smuzhiyun       Remount support added
252*4882a593Smuzhiyun
253*4882a593Smuzhiyun       Alloc is not so slow when filesystem becomes full
254*4882a593Smuzhiyun
255*4882a593Smuzhiyun       Atimes are no more updated because it slows down operation
256*4882a593Smuzhiyun
257*4882a593Smuzhiyun       Code cleanup (removed all commented debug prints)
258*4882a593Smuzhiyun1.92   Corrected a bug when sync was called just before closing file
259*4882a593Smuzhiyun1.93   Modified, so that it works with kernels >= 2.1.131, I don't know if it
260*4882a593Smuzhiyun       works with previous versions
261*4882a593Smuzhiyun
262*4882a593Smuzhiyun       Fixed a possible problem with disks > 64G (but I don't have one, so I can't
263*4882a593Smuzhiyun       test it)
264*4882a593Smuzhiyun
265*4882a593Smuzhiyun       Fixed a file overflow at 2G
266*4882a593Smuzhiyun
267*4882a593Smuzhiyun       Added new option 'timeshift'
268*4882a593Smuzhiyun
269*4882a593Smuzhiyun       Changed behaviour on HPFS386: It is now possible to operate on HPFS386 in
270*4882a593Smuzhiyun       read-only mode
271*4882a593Smuzhiyun
272*4882a593Smuzhiyun       Fixed a bug that slowed down alloc and prevented allocating 100% space
273*4882a593Smuzhiyun       (this bug was not destructive)
274*4882a593Smuzhiyun1.94   Added workaround for one bug in Linux
275*4882a593Smuzhiyun
276*4882a593Smuzhiyun       Fixed one buffer leak
277*4882a593Smuzhiyun
278*4882a593Smuzhiyun       Fixed some incompatibilities with large extended attributes (but it's still
279*4882a593Smuzhiyun       not 100% ok, I have no info on it and OS/2 doesn't want to create them)
280*4882a593Smuzhiyun
281*4882a593Smuzhiyun       Rewritten allocation
282*4882a593Smuzhiyun
283*4882a593Smuzhiyun       Fixed a bug with i_blocks (du sometimes didn't display correct values)
284*4882a593Smuzhiyun
285*4882a593Smuzhiyun       Directories have no longer archive attribute set (some programs don't like
286*4882a593Smuzhiyun       it)
287*4882a593Smuzhiyun
288*4882a593Smuzhiyun       Fixed a bug that it set badly one flag in large anode tree (it was not
289*4882a593Smuzhiyun       destructive)
290*4882a593Smuzhiyun1.95   Fixed one buffer leak, that could happen on corrupted filesystem
291*4882a593Smuzhiyun
292*4882a593Smuzhiyun       Fixed one bug in allocation in 1.94
293*4882a593Smuzhiyun1.96   Added workaround for one bug in OS/2 (HPFS locked up, HPFS386 reported
294*4882a593Smuzhiyun       error sometimes when opening directories in PMSHELL)
295*4882a593Smuzhiyun
296*4882a593Smuzhiyun       Fixed a possible bitmap race
297*4882a593Smuzhiyun
298*4882a593Smuzhiyun       Fixed possible problem on large disks
299*4882a593Smuzhiyun
300*4882a593Smuzhiyun       You can now delete open files
301*4882a593Smuzhiyun
302*4882a593Smuzhiyun       Fixed a nondestructive race in rename
303*4882a593Smuzhiyun1.97   Support for HPFS v3 (on large partitions)
304*4882a593Smuzhiyun
305*4882a593Smuzhiyun       ZFixed a bug that it didn't allow creation of files > 128M
306*4882a593Smuzhiyun       (it should be 2G)
307*4882a593Smuzhiyun1.97.1 Changed names of global symbols
308*4882a593Smuzhiyun
309*4882a593Smuzhiyun       Fixed a bug when chmoding or chowning root directory
310*4882a593Smuzhiyun1.98   Fixed a deadlock when using old_readdir
311*4882a593Smuzhiyun       Better directory handling; workaround for "unbalanced tree" bug in OS/2
312*4882a593Smuzhiyun1.99   Corrected a possible problem when there's not enough space while deleting
313*4882a593Smuzhiyun       file
314*4882a593Smuzhiyun
315*4882a593Smuzhiyun       Now it tries to truncate the file if there's not enough space when
316*4882a593Smuzhiyun       deleting
317*4882a593Smuzhiyun
318*4882a593Smuzhiyun       Removed a lot of redundant code
319*4882a593Smuzhiyun2.00   Fixed a bug in rename (it was there since 1.96)
320*4882a593Smuzhiyun       Better anti-fragmentation strategy
321*4882a593Smuzhiyun2.01   Fixed problem with directory listing over NFS
322*4882a593Smuzhiyun
323*4882a593Smuzhiyun       Directory lseek now checks for proper parameters
324*4882a593Smuzhiyun
325*4882a593Smuzhiyun       Fixed race-condition in buffer code - it is in all filesystems in Linux;
326*4882a593Smuzhiyun       when reading device (cat /dev/hda) while creating files on it, files
327*4882a593Smuzhiyun       could be damaged
328*4882a593Smuzhiyun2.02   Workaround for bug in breada in Linux. breada could cause accesses beyond
329*4882a593Smuzhiyun       end of partition
330*4882a593Smuzhiyun2.03   Char, block devices and pipes are correctly created
331*4882a593Smuzhiyun
332*4882a593Smuzhiyun       Fixed non-crashing race in unlink (Alexander Viro)
333*4882a593Smuzhiyun
334*4882a593Smuzhiyun       Now it works with Japanese version of OS/2
335*4882a593Smuzhiyun2.04   Fixed error when ftruncate used to extend file
336*4882a593Smuzhiyun2.05   Fixed crash when got mount parameters without =
337*4882a593Smuzhiyun
338*4882a593Smuzhiyun       Fixed crash when allocation of anode failed due to full disk
339*4882a593Smuzhiyun
340*4882a593Smuzhiyun       Fixed some crashes when block io or inode allocation failed
341*4882a593Smuzhiyun2.06   Fixed some crash on corrupted disk structures
342*4882a593Smuzhiyun
343*4882a593Smuzhiyun       Better allocation strategy
344*4882a593Smuzhiyun
345*4882a593Smuzhiyun       Reschedule points added so that it doesn't lock CPU long time
346*4882a593Smuzhiyun
347*4882a593Smuzhiyun       It should work in read-only mode on Warp Server
348*4882a593Smuzhiyun2.07   More fixes for Warp Server. Now it really works
349*4882a593Smuzhiyun2.08   Creating new files is not so slow on large disks
350*4882a593Smuzhiyun
351*4882a593Smuzhiyun       An attempt to sync deleted file does not generate filesystem error
352*4882a593Smuzhiyun2.09   Fixed error on extremely fragmented files
353*4882a593Smuzhiyun====== =========================================================================
354