-------------------- AmigaOS 3.5/3.9 project -------------------------

The following changes have been made in V45.2 (6.4.2000)

- If the partition is beyond the 4GB barrier, and NSD64 detection 
fails, the FFS now falls back to TD64 commands. Of course, if the 
device does not speak TD64 either, the FFS is out of luck, but at 
least you will be able to use large disks and mount large disks 
without any additional patches in the system.

- Users can now enforce that disks are handled as removable media and 
their sizes are recognized automatically. Prior releases enabled this 
feature only for the trackdisk.device, for the carddisk.device and all 
NSD64 capable devices. To enable this feature, users need to set 
"LowCyl = 0" in the mount list (a requirement anyhow, as the whole 
disk is to be used for storage, and not just a partition), and 
"Surfaces = 0". Note that this is an invalid layout (a disk without 
surfaces), and FFS will fill in the correct values as soon as a disk 
is mounted. To keep FFS from doing stupid things on such an invalid 
disk, the number of surfaces is internally set to 2 (the standard
floppy layout) until the disk layout can be recognized.

Users, beware: For this to work, the device needs to support 
TD_GETGEOMETRY. While most "modern" devices do, some very old devices 
do not and hence cannot be used with "Surfaces = 0" safely.

- Inlined calls to utility/UDivMod32.

- Removed the envoy-support functions, mostly due to lack of suitable 
includes and .fd files of the "accounts.library."

The following changes have been made in V45.3 (6.5.2000)

- In order to support removable disks in a better and more compatible 
way, the version 45.3 first attempts to use HD_SCSICMD to identify 
external disks and to determine their capacity. If that fails, it 
falls back to the old style TD_GETGEOMETRY function. NSD support is 
not required to make this mechanism work.

The following changes have been made in V45.4 (8.5.2000)

- To also allow legacy devices use large disks, the FFS can now also 
make use of HDSCSICmd instead of the trackdisk commands to read and 
write sectors. For that, set the bit 7 of the DOS type of the filing 
system. For example, the dos type 0x444f5383 indicates an 
international filing system with HD-SCSICmd interface.

-------------------- AmigaOS 3.1.4.(1) project -----------------------

The following changes have been made in V45.15 (4.1.2017)

- Bumped the version number beyond the 3.9 versions to properly mirror 
the development stage. No functional changes.

The following changes have been made in V45.16 (21.1.2017)

- The restart module now also uses MODE_SENSE to get an idea on the 
sector size and the number of sectors. Apparently, some optical 
storage devices do not implement READ_CAPACITY.

The following changes have been made in V45.17 (23.1.2017)

- Temporary memory allocated by the validator was not properly 
released, the allocation size did not fit to the release size (and 
neither fitted to the required size!).

- Computation of the number of bitmaps had an off-by-one error. It 
started from the last block, not the number of blocks (difference 
between index and count!)

- The same bug was also contained in the validator: lastblock is an 
index, not a count, so the buffer size was off by one.

- Allocating now much more memory for EasyRequest(), actually 
4K+512 bytes. Any smaller size would make intuition to switch stacks 
again, requiring then 8K instead of 4K buffer.

The following changes have been made in V45.18 (22.3.2017)

- SCSI_DIRECT access is now enabled differently, namely by setting 
  bit 16 of the Interleave environment element. Bit 7 of DosType has 
  been phased out.
  
- Bit 17 of Interleave now enables superfloppy support, i.e. the
  FFS queries the device geometry itself. Setting surfaces = 0 still 
  works but should probably remain undocumented.

- Bit 18 of the interleave entry disables the potentially dangerous
  NSDCMD_QUERY and falls back to TD64 directly without testing NSD.

- Handling of LUNs was broken for DIRECT_SCSI access. It now takes
  the tenth's digit of the unit number to address the LUN (as 
  suggested by the CBM documentation).
  
- Due to an oversight, DIRECT_SCSI removable disks caused an FFS crash
  in case a disk change was detected.
  
The following changes have been made in V45.19 (29.4.2019)

- This release adds experimental support for long file names (up to 54
  characters). This was actually already there, partially, but never
  enabled.
  
- Fixed a potential leak due to not setting the header key of a cache
  block correctly.
  
The following changes have been made in V45.20 (26.5.2017)

- Reworked ACTION_READ_LINK which was massively broken:
  A partial path upfront the current link position in a path was
  ignored.
  A unqualified ':' at the start of the soft link did not insert the
  volume name to ensure that the host program follows the path on
  the current volume instead of its own root volume.
  A slash at the end of the link would have resulted in a double slash
  after link resolution, identifying erroneously the parent directory.
  Even though the size of a target buffer for link resolution was 
  given, this size was completely ignored, resulting in potential 
  buffer overruns.
  A user path name longer than 256 characters would have crashed the 
  FFS due to an internal buffer overrun. Now it errors (at least.)
  
The following changes have been made in V45.21 (30.7.2017)

- EXALL and EXAMINE/EXNEXT filled in nonsense into the fib_FileNote field
  if the directory root was examined.
  
- If a rename on a directory caching enabled filing system failed due to
  lack of storage on the disk, the code failed to re-insert the object under
  its old key, making the object unaccessible and additionally creating a
  memory leak.

- ACTION_SET_COMMENT could not set comments on hardlinks. Instead, it always
  set the comment on the link target, which is not very useful.
  
The following changes have been made in V46.1 (31.7.2017)

- This is an experimental release that adds support for DOS\06 and DOS\07, namely
  long file name support in OFS and FFS fashion with separate extension blocks in
  case the combined length of filename and comment grow too large. While this
  release is (somewhat) debugged, I would not recommend this version for production
  purposes as the co-routine handling of the FFS is somewhat tricky and may have
  impact on the implementation of long comment handling.

The following changes have been made in V46.2 (16.9.2017)

- ACTION_SET_DATE did not operate on the root directory and hence could not change
  its "last modification date", unlike for all other directories. Fixed.
  
The following changes have been made in V46.3 (17.11.2017)

- ACTION_OPEN_FROM_LOCK could have leaked memory if the creation of the
  file handle failed in the middle.
- This version of the FFS is smart enough to install itself into the
  FileSystem.resource if the harddisk controller does not do it, so once
  loaded, it becomes immediately available to all other devices.
- By major trickery, the FFS can now operate both with GlobVec = 0
  and GlobVec = -1, i.e. both as BCPL and C version.

The following changes have been made in V46.4 (17.11.2017)

- Forgot to add the right version number in the file system resource.
- The seglist given to the FileSytem.resouce is now also agnostic to
  BCPL vs. C startup.

The following changes have been made in V46.5 (6.12.2017)

- Modifying the FileSystem.resource is now Forbid()-locked.

The following changes have been made in V46.6 (16.12.2017)

- RELABEL and FORMAT checked against the wrong file name size.
  Note that volume labels are still limited to 30 characters, not
  the full file name size as the administration is somewhat different
  in the root block.

The following changes have been made in V46.7 (18.12.2017)

- The validator did not special-case the root block in the DOS6/DOS7
  variant, causing potentially a bad-block error.
  
The following changes have been made in V46.8 (19.12.2017)

- The same special-casing was also missing on object creation for the
  parent directory and Examine on the root block. Fixed!
  
The following changes have been made in V46.9 (19.1.2018)

- The FFS will now bring up a requester in case validation fails due
  to out of memory situations.
  
The following changes have been made in V46.10 (24.1.2018)

- Failure of memory allocation in the disk validator can now be retried,
  though success is probably unlikely if the disk is too large.
  
The following changes have been made in V46.11 (20.2.2018)

- The interpretation of the SCSI mode page to interpret the layout
  of the disk was just plain wrong as it forgot to skip the SCSI page
  headers and block descriptors. Fixed this.
  
  
The following changes have been made in V46.12 (23.3.2018)

- There was still one inverted logic in the SCSI geometry interpretation
  that made the code not use the SCSI rigid disk page. Fixed.
  
- SCSI geometry parsing is now only used if SCSI Direct is turned on.
  Otherwise, the code falls back to TD_GETGEOMETRY.

The following changes have been made in V46.13 (23.9.2018)

- The DirectSCSI init function accessed a word item on an odd
  byte boundary and hence crashed on an 68000. Fixed.
 
The following changes have been made in V46.14 (22.10.2018)

- Re-reading the bitmap is now started after the change interrupt is registered.
  This is a workaround for the omniscsi.device which does not return the proper
  disk status upon a TD_CHANGESTATE initially.

The following changes have been made in V46.15 (5.1.2019)

- Since TD_CHANGESTATE does not return reliable information for the
  omniscsi.device even after a change interrupt has been registered, the FFS
  now manually triggers a disk-read to wake up the device and let it register
  the diskchange task.
  
- The restart code and the bitmap reader called AllocMem() and FreeMem()
  for each block they read, which is needlessly wasteful. Now, the memory is
  allocated only once and released at the end.

- ACTION_FORMAT for long file name file systems (DOS\06 and DOS\07) wrote
  directory caching information even though this information is of course never
  used or needed later on.

The following changes have been made in V46.16 (10.1.2019)

- The startup packet is now replied only after Restart has been called, thus
  delaying the startup of any other filing system. This may avoid disk-
  trashing in case several partitions are mounted on the same drive.
  
- Bitmap extension blocks and bitmaps are now allocated in block-sequential
  order if possible. This may enable future optimizations, though currently
  does not make any difference.

The following changes have been made in V46.18 (25.5.2019)

- Re-implemented the bitmap allocation algorithm again, but this time in a
  lot simpler and more orthogonal way.

The following changes have been made in V46.20 (7.6.2019)

- The patch flags for the file system have been altered to also include
  a larger stack size, and to signal a C type mount.
 
----------------------- AmigaOS 3.2 project --------------------------

The following changes have been made in V47.1:

- Bumped to 47.1 to be consistent with the rest of the Os and to avoid
  warnings from LoadModule.

The following changes have been made in V47.2:

- Implemented ACTION_DIE to safely shut down a file system. Also fixes
  a memory leak in case creating the file system failed at some
  point. Note that this requires a new workbench as the current one
  will deadlock in case a device is removed that was present at its
  creation.
  
The following changes have been made in V47.3:

- An attempt to ExNext or ExAll through the root lock (lock = 0) caused
  hits as the code attempted to store side information within the lock.
  As this cannot work, an attempt to try such an operation fails now.


fs 47.4 (16.6.2020)

- Added "trackfile.device" as yet another name of a device with
  trackdisk.device-like behaviour which does not crash instantly
  when processing the TD_GETGEOMETRY command.
