1*4882a593Smuzhiyun(Note: I consider version numbers as cheap. That means 2*4882a593Smuzhiyunthat I do not like numbers like 0.1 and the like for 3*4882a593Smuzhiyunthings that can be used since quite some time. But 4*4882a593Smuzhiyunthen, 3.1 doesn't mean 'perfectly stable', too.) 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunKnown bugs: 7*4882a593Smuzhiyun----------- 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun- Doesn't work on the alpha. The only 64/32-bit 10*4882a593Smuzhiyun problem that I'm aware of (pointer/int conversion 11*4882a593Smuzhiyun in readdir()) gives compiler warnings but is 12*4882a593Smuzhiyun apparently not causing the failure, as directory 13*4882a593Smuzhiyun reads basically work (but all files are of size 0). 14*4882a593Smuzhiyun Alas, I've got no alpha to debug. :-( 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun- The partition checker (drivers/block/genhd.c) 17*4882a593Smuzhiyun doesn't work with devices which have 256 byte 18*4882a593Smuzhiyun blocks (some very old SCSI drives). 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun- The feature to automatically make the fs clean 21*4882a593Smuzhiyun might leave a trashed file system with the 22*4882a593Smuzhiyun bitmap flag set valid. 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun- When a file is truncated to a size that is not 25*4882a593Smuzhiyun a multiple of the blocksize, the rest of the 26*4882a593Smuzhiyun last allocated block is not cleared. Well, 27*4882a593Smuzhiyun this fs never claimed to be Posix conformant. 28*4882a593Smuzhiyun 29*4882a593SmuzhiyunPlease direct bug reports to: zippel@linux-m68k.org 30*4882a593Smuzhiyun 31*4882a593SmuzhiyunVersion 3.20 32*4882a593Smuzhiyun------------ 33*4882a593Smuzhiyun- kill kernel lock 34*4882a593Smuzhiyun- fix for a possible bitmap corruption 35*4882a593Smuzhiyun 36*4882a593SmuzhiyunVersion 3.19 37*4882a593Smuzhiyun------------ 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun- sizeof changes from Kernel Janitor Project 40*4882a593Smuzhiyun- several bug fixes found with fsx 41*4882a593Smuzhiyun 42*4882a593SmuzhiyunVersion 3.18 43*4882a593Smuzhiyun------------ 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun- change to global min macro + warning fixes 46*4882a593Smuzhiyun- add module tags 47*4882a593Smuzhiyun 48*4882a593SmuzhiyunVersion 3.17 49*4882a593Smuzhiyun------------ 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun- locking fixes 52*4882a593Smuzhiyun- wrong sign in __affs_hash_dentry 53*4882a593Smuzhiyun- remove unnecessary check in affs_new_inode 54*4882a593Smuzhiyun- enable international mode for dircache fs 55*4882a593Smuzhiyun 56*4882a593SmuzhiyunVersion 3.16 57*4882a593Smuzhiyun------------ 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun- use mark_buffer_dirty_inode instead of mark_buffer_dirty. 60*4882a593Smuzhiyun- introduce affs_lock_{link|dir|ext}. 61*4882a593Smuzhiyun 62*4882a593SmuzhiyunVersion 3.15 63*4882a593Smuzhiyun------------ 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun- disable link to directories until we can properly support them. 66*4882a593Smuzhiyun- locking fixes for link creation/removal. 67*4882a593Smuzhiyun 68*4882a593SmuzhiyunVersion 3.14 69*4882a593Smuzhiyun------------ 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun- correctly cut off long file names for compares 72*4882a593Smuzhiyun- correctly initialize s_last_bmap 73*4882a593Smuzhiyun 74*4882a593SmuzhiyunVersion 3.13 75*4882a593Smuzhiyun------------ 76*4882a593Smuzhiyun 77*4882a593SmuzhiyunMajor cleanup for 2.4 [Roman Zippel] 78*4882a593Smuzhiyun- new extended block handling 79*4882a593Smuzhiyun- new bitmap allocation functions 80*4882a593Smuzhiyun- locking should be safe for the future 81*4882a593Smuzhiyun- cleanup of some interfaces 82*4882a593Smuzhiyun 83*4882a593SmuzhiyunVersion 3.12 84*4882a593Smuzhiyun------------ 85*4882a593Smuzhiyun 86*4882a593Smuzhiyunmore 2.4 fixes: [Roman Zippel] 87*4882a593Smuzhiyun- s_lock changes 88*4882a593Smuzhiyun- increased getblock mess 89*4882a593Smuzhiyun- clear meta blocks 90*4882a593Smuzhiyun 91*4882a593SmuzhiyunVersion 3.11 92*4882a593Smuzhiyun------------ 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun- Converted to use 2.3.x page cache [Dave Jones] 95*4882a593Smuzhiyun- Corruption in truncate() bugfix [Ken Tyler <kent@werple.net.au>] 96*4882a593Smuzhiyun 97*4882a593SmuzhiyunVersion 3.10 98*4882a593Smuzhiyun------------ 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun- Changed partition checker to allow devices 101*4882a593Smuzhiyun with physical blocks != 512 bytes. 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun- The partition checker now also ignores the 104*4882a593Smuzhiyun word at 0xd0 that Windows likes to write to. 105*4882a593Smuzhiyun 106*4882a593SmuzhiyunVersion 3.9 107*4882a593Smuzhiyun----------- 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun- Moved cleanup from release_file() to put_inode(). 110*4882a593Smuzhiyun This makes the first one obsolete. 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun- truncate() zeroes the unused remainder of a 113*4882a593Smuzhiyun partially used last block when a file is truncated. 114*4882a593Smuzhiyun It also marks the inode dirty now (which is not 115*4882a593Smuzhiyun really necessary as notify_change() will do 116*4882a593Smuzhiyun it anyway). 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun- Added a few comments, fixed some typos (and 119*4882a593Smuzhiyun introduced some new ones), made the debug messages 120*4882a593Smuzhiyun more consistent. Changed a bad example in the 121*4882a593Smuzhiyun doc file (affs.txt). 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun- Sets the NOEXEC flag in read_super() for old file 124*4882a593Smuzhiyun systems, since you can't run programs on them. 125*4882a593Smuzhiyun 126*4882a593SmuzhiyunVersion 3.8 127*4882a593Smuzhiyun----------- 128*4882a593SmuzhiyunBill Hawes kindly reviewed the affs and sent me the 129*4882a593Smuzhiyunpatches he did. They're marked (BH). Thanks, Bill! 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun- Cleanup of error handling in read_super(). 132*4882a593Smuzhiyun Didn't release all resources in case of an 133*4882a593Smuzhiyun error. (BH) 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun- put_inode() releases the ext cache only if it's 136*4882a593Smuzhiyun no longer needed. (BH) 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun- One set of dentry callbacks is enough. (BH) 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun- Cleanup of error handling in namei.c. (BH) 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun- Cleanup of error handling in file.c. (BH) 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun- The original blocksize of the device is 145*4882a593Smuzhiyun restored when the fs is unmounted. (BH) 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun- getblock() did not invalidate the key cache 148*4882a593Smuzhiyun when it allocated a new block. 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun- Removed some unnecessary locks as Bill 151*4882a593Smuzhiyun suggested. 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun- Simplified match_name(), changed all hashing 154*4882a593Smuzhiyun and case insensitive name comparisons to use 155*4882a593Smuzhiyun uppercase. This makes the tolower() routines 156*4882a593Smuzhiyun obsolete. 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun- Added mount option 'mufs' to force muFS 159*4882a593Smuzhiyun uid/gid interpretation. 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun- File mode changes were not updated on disk. 162*4882a593Smuzhiyun This was fixed before, but somehow got lost. 163*4882a593Smuzhiyun 164*4882a593SmuzhiyunVersion 3.7 165*4882a593Smuzhiyun----------- 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun- Added dentry callbacks to allow the dcache to 168*4882a593Smuzhiyun operate case insensitive and length ignorant 169*4882a593Smuzhiyun like the affs itself. 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun- getblock() didn't update the lastblock field in the 172*4882a593Smuzhiyun inode if the fs was not an OFS. This bug only shows 173*4882a593Smuzhiyun up if a file was enlarged via truncate() and there 174*4882a593Smuzhiyun was not enough space. 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun- Remove some more superfluous code left over from 177*4882a593Smuzhiyun the old link days ... 178*4882a593Smuzhiyun 179*4882a593Smuzhiyun- Fixed some oversights which were in patch 2.1.78. 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun- Fixed a few typos. 182*4882a593Smuzhiyun 183*4882a593SmuzhiyunVersion 3.6 184*4882a593Smuzhiyun----------- 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun- dentry changes. (Thanks to Jes Sorensen for his help.) 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun- Fixed bug in balloc(): Superblock was not set dirty after 189*4882a593Smuzhiyun the bitmap was changed, so the bitmap wasn't sync'd. 190*4882a593Smuzhiyun 191*4882a593Smuzhiyun- Fixed nasty bug in find_new_zone(): If the current 192*4882a593Smuzhiyun zone number was zero, the loop didn't terminate, 193*4882a593Smuzhiyun causing a solid lock-up. 194*4882a593Smuzhiyun 195*4882a593Smuzhiyun- Removed support for old-style directory reads. 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun- Fixed bug in add_entry(): When doing a sorted insert, 198*4882a593Smuzhiyun the pointer to the next entry in the hash chain wasn't 199*4882a593Smuzhiyun correctly byte-swapped. Since most of the users of the 200*4882a593Smuzhiyun affs use it on a 68k, they didn't notice. But why did 201*4882a593Smuzhiyun I not find this during my tests? 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun- Fixed some oversights (version wasn't updated on some 204*4882a593Smuzhiyun directory changes). 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun- Handling of hard links rewritten. To the VFS 207*4882a593Smuzhiyun they appear now as normal Unix links. They are 208*4882a593Smuzhiyun now resolved only once in lookup(). The backside 209*4882a593Smuzhiyun is that unlink(), rename() and rmdir() have to 210*4882a593Smuzhiyun be smart about them, but the result is worth the 211*4882a593Smuzhiyun effort. This also led to some code cleanup. 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun- Changed name type to unsigned char; the test for 214*4882a593Smuzhiyun invalid filenames didn't work correctly. 215*4882a593Smuzhiyun (Thanks to Michael Krause for pointing at this.) 216*4882a593Smuzhiyun 217*4882a593Smuzhiyun- Changed mapping of executable flag. 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun- Changed all network byte-order macros to the 220*4882a593Smuzhiyun recommended ones. 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun- Added a remount function, so attempts to remount 223*4882a593Smuzhiyun a dircache filesystem or one with errors read/write 224*4882a593Smuzhiyun can be trapped. Previously, ro remounts didn't 225*4882a593Smuzhiyun flush the super block, and rw remounts didn't 226*4882a593Smuzhiyun create allocation zones ... 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun- Call shrink_dcache_parent() in rmdir(). 229*4882a593Smuzhiyun (Thanks to Bill Hawes.) 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun- Permission checks in unlink(). 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun- Allow mounting of volumes with superfluous 234*4882a593Smuzhiyun bitmap pointers read only, also allows them 235*4882a593Smuzhiyun to be remounted read/write. 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun- Owner/Group defaults now to the fs user (i.e. 238*4882a593Smuzhiyun the one that mounted it) instead of root. This 239*4882a593Smuzhiyun obsoletes the mount options uid and gid. 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun- Argument to volume option could overflow the 242*4882a593Smuzhiyun name buffer. It is now silently truncated to 243*4882a593Smuzhiyun 30 characters. (Damn it! This kind of bug 244*4882a593Smuzhiyun is too embarrassing.) 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun- Split inode.c into 2 files, the superblock 247*4882a593Smuzhiyun routines desperately wanted their own file. 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun- truncate() didn't allocate an extension block 250*4882a593Smuzhiyun cache. If a file was extended by means of 251*4882a593Smuzhiyun truncate(), this led to an Oops. 252*4882a593Smuzhiyun 253*4882a593Smuzhiyun- fsuser is now checked last. 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun- rename() will not ignore changes in filename 256*4882a593Smuzhiyun casing any more (though mv(1) still won't allow 257*4882a593Smuzhiyun you to do "mv oldname OldName"). 258*4882a593Smuzhiyun 259*4882a593SmuzhiyunVersion 3.5 260*4882a593Smuzhiyun----------- 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun- Extension block caches are now allocated on 263*4882a593Smuzhiyun demand instead of when a file is opened, as 264*4882a593Smuzhiyun files can be read and written without opening 265*4882a593Smuzhiyun them (e. g. the loopback device does this). 266*4882a593Smuzhiyun 267*4882a593Smuzhiyun- Removed an unused function. 268*4882a593Smuzhiyun 269*4882a593SmuzhiyunVersion 3.4 270*4882a593Smuzhiyun----------- 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun- Hash chains are now sorted by block numbers. 273*4882a593Smuzhiyun (Thanks to Kars de Jong for finding this.) 274*4882a593Smuzhiyun- Removed all unnecessary external symbols. 275*4882a593Smuzhiyun 276*4882a593SmuzhiyunVersion 3.3 277*4882a593Smuzhiyun----------- 278*4882a593Smuzhiyun 279*4882a593Smuzhiyun- Tried to make all types 'correct' and consistent. 280*4882a593Smuzhiyun- Errors and warnings are now reported via a 281*4882a593Smuzhiyun function. They are all prefixed by a severity 282*4882a593Smuzhiyun and have the same appearance: 283*4882a593Smuzhiyun "AFFS: <function>: <error message>" 284*4882a593Smuzhiyun (There's one exception to this, as in that function 285*4882a593Smuzhiyun is no pointer to the super block available.) 286*4882a593Smuzhiyun- The filesystem is remounted read-only after an 287*4882a593Smuzhiyun error. 288*4882a593Smuzhiyun- The names of newly created filesystem objects are 289*4882a593Smuzhiyun now checked for validity. 290*4882a593Smuzhiyun- Minor cleanups in comments. 291*4882a593Smuzhiyun- Added this Changes file. At last! 292*4882a593Smuzhiyun 293*4882a593SmuzhiyunVersion 3.2 294*4882a593Smuzhiyun----------- 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun- Extension block cache: Reading/writing of huge files 297*4882a593Smuzhiyun (several MB) is much faster (of course the added 298*4882a593Smuzhiyun overhead slows down opening, but this is hardly 299*4882a593Smuzhiyun noticeable). 300*4882a593Smuzhiyun- The same get_block()-routine can now be used for 301*4882a593Smuzhiyun both OFS and FFS. 302*4882a593Smuzhiyun- The super block is now searched in the block that 303*4882a593Smuzhiyun was calculated and in the one following. This 304*4882a593Smuzhiyun should remedy the round-off error introduced by 305*4882a593Smuzhiyun the 1-k blocks that Linux uses. 306*4882a593Smuzhiyun- Minor changes to adhere to the new VFS interface. 307*4882a593Smuzhiyun- The number of used blocks is now also calculated 308*4882a593Smuzhiyun if the filesystem is mounted read-only. 309*4882a593Smuzhiyun- Prefixed some constants with AFFS_ to avoid name 310*4882a593Smuzhiyun clashes. 311*4882a593Smuzhiyun- Removed 'EXPERIMENTAL' status. 312*4882a593Smuzhiyun 313*4882a593SmuzhiyunVersion 3.1 314*4882a593Smuzhiyun----------- 315*4882a593Smuzhiyun 316*4882a593Smuzhiyun- Fixed a nasty bug which didn't allow read-only 317*4882a593Smuzhiyun mounts. 318*4882a593Smuzhiyun- Allow dir-cache filesystems to be mounted 319*4882a593Smuzhiyun read only. 320*4882a593Smuzhiyun- OFS support. 321*4882a593Smuzhiyun- Several other changes I just cannot remember 322*4882a593Smuzhiyun any more. 323*4882a593Smuzhiyun 324*4882a593SmuzhiyunVersion 3.0 325*4882a593Smuzhiyun----------- 326*4882a593Smuzhiyun 327*4882a593Smuzhiyun- Almost complete rewrite for the new VFS 328*4882a593Smuzhiyun interface in Linux 1.3. 329*4882a593Smuzhiyun- Write support. 330*4882a593Smuzhiyun- Support for hard and symbolic links. 331*4882a593Smuzhiyun- Lots of things I remember even less ... 332*4882a593Smuzhiyun 333*4882a593SmuzhiyunVersion 2.0 334*4882a593Smuzhiyun----------- 335*4882a593Smuzhiyun 336*4882a593Smuzhiyun- Fixed a few things to get it compiled. 337*4882a593Smuzhiyun- Automatic root block calculation. 338*4882a593Smuzhiyun- Partition checker for genhd.c 339*4882a593Smuzhiyun 340*4882a593Smuzhiyun======================================== 341*4882a593Smuzhiyun 342*4882a593SmuzhiyunLet's just call Ray Burr's original affs 343*4882a593Smuzhiyun'Version 1.0'. 344