* Update compatibility maximum cluster size when sector size is larger than 512 bytes.
* Additional validation of values in FsInfo sector.
* next_free_cluster cannot be 0 or 1, as these are reserved clusters
* next_free_cluster must be a valid cluster (using BPB to validate)
* free_cluster_count must be possible value (using BPB to validate)
* Avoid data-loss edge-case on volumes over 138GB in size.
Specifically, if the volume has more
than 0x0FFF_FFF4 clusters, then the FAT
will include an entry for clusters that
are reserved values. Specifically, cluster
number 0x0FFF_FFF7 is defined to mean
BAD_SECTOR, while numbers 0x0FFF_FFF8 ..
0x0FFF_FFFF are defined to mean end-of-chain.
This prevents these clusters from being part
of any valid cluster chain. Therefore:
1. prevent setting these clusters to point to
a valid next cluster
2. prevent reading these clusters as pointing
to a valid next cluster
Instead, always read/write these FAT entries
to have next cluster value of BAD_SECTOR.
* Reduce noisy warnings on FAT32.
* The reserved bits in FAT entry must be preserved on update.
* Change the set() implementation for FAT32 entries to return an actual Err(),
when attempting to set values for cluster numbers that have special meaning.
This change allows for moving an object ownership to FileSystem object
instead of borrowing it. It makes usage of library easier in some cases.
Unfortunately it is a breaking change.