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