FAT32 IFS drivers
upadted to V. 0.74
|
Henk Kelder updates
the FAT32 IFS
drivers to version 0.74. You can download these drivers in os2fat32.zip (176,68K) at Henk's Home
Page:
http://ourworld.compuserve.com/homepages/hkelder/
Changes in version 0.74: Corrected a problem with DosFindFirst/Next
and extended attributes that caused the Worksplace shell to give an error on opening
a directory. The error was: No objects were found that matched the search criteria.
FAT32 is Microsofts new FAT version that is currently only supported by Windows
95 OEM Service Release 2 (OSR2) and will be supported by Windows 98. The advantage
over normal (old fashioned FAT) is that FAT32 allows small cluster sizes to be
used on large disks thereby reducing the waste of disk space. Also, FAT32 has long
name
support using the VFAT algoritm.
FAT32.IFS for OS/2 will allow you to access FAT32 partitions from OS/2. You cannot
create FAT32 partitions, you'll still need Win95 OSR2 to do that. Also, OS/2s CHKDSK
cannot fix all possible errors that can occur, you'll have to use Windows 95 Scandisk
to fix certain errors.
Files in this version
FAT32.TXT This file.
FAT32.IFS The actual IFS.
CACHEF32.EXE The cache helper program.
UFAT32.DLL The module needed to run CHKDSK on FAT32 partition.
F32STAT.EXE A program to change the DIRTY flag of FAT32 partitions.
MONITOR.EXE A program to monitor what FAT32.IFS is doing.
PARTFILT.FLT A general partition filter device that allows FAT32
partitions to be recoqnized by OS/2.
OS2DASD.DMD A modified version of OS2DASD.DMD that is an
alternative for using PARTFILT.FLT. This modified
driver also allows FAT32 partitions to be recoqnized
by OS/2.
PLEASE NOTE: that this driver is NOT at the latest
level and will probably NOT support the latest
features like removable disks etc.
DISKINFO.EXE A diagnose program that will scan for and show
all partitions.
LIMITATIONS
===========
This version of FAT32.IFS has the following limitations:
- It only supports non-removable harddisks.
- It only supports disks with a sector size of 512 bytes. (Are there others?)
- You cannot BOOT from a FAT32 partition.
- You cannot place the SWAPPER.DAT on a FAT32 partition.
- CHKDSK can diagnose a disk, but will only FIX lost clusters and an incorrect
free space count. For all other errors, you'll need to run Windows95 and start scandisk
to fix the problem.
Note: CHKDSK will always convert lost clusters to files and NEVER to
directories. if you want that, use SCANDISK.
- The FORMAT, RECOVER and SYS commands are not supported.
- Only last access date (and not last access time) is maintained by
FAT32.IFS. This is similiar to Win95 (OSR2).
- Long filenames are not by default supported in DOS and Win-OS/2 sessions, they
use only the shortnames.
Please see 'LONG FILENAMES IN OS/2 AND DOS SESSIONS' later is this file.
- A maximum of 235 different files can be open at the simultaniously.
The number of times a single file is opened does not matter. So if a specific
file is opened more than once, it only counts as one file.
QUICK INSTALL:
(x: should be replaced by your boot drive.)
Copy the following files to your \OS2 directory:
FAT32.IFS
CACHEF32.EXE
F32STAT.EXE
MONITOR.EXE
Copy the following file to your \OS2\DLL directory:
UFAT32.DLL
Copy the following file to your \OS2\BOOT directory:
PARTFILT.FLT
=>Do NOT REPLACE your current OS2DASD.DMD with the version in the archive,<=
=>before you have read the remarks below about OS/2 and FAT32 and know you<=
=>MUST use this DMD. You probably do NOT NEED IT! <=
Make the following changes to the CONFIG.SYS:
IFS=x:\OS2\FAT32.IFS [options, see below]
(Install this one AFTER IFS=HPFS.IFS)
CALL=x:\OS2\CACHEF32.EXE [options, see below]
^^^^-> Make shure this is a CALL and NOT a RUN.
BASEDEV=PARTFILT.FLT /P 0B [/W]
(The /W should not be specified if you do not want write access)
(The best location seems to differ depening on your configuration. Some state FAT32.IFS
will only work is PARTFILT is the first basedev, other claim it only works if PARTFILT
is the last one.)
=>This Quick Install will add FAT32 partition after all existing drives! <=
=>PARTFILT.FLT might need other options IF you have converted an existing <=
=>FAT16 partition to FAT32 or if you want to influence the drive order! <=
FAT32.IFS
FAT32.IFS is the actual Installable File Systems driver.
The following options are supported:
/Q Quit, not messages.
/CACHE:nnnn specifies the cache size in kilobytes. If omitted the default
cache size is 1024KB. Maximum cache size is 2048KB.
*NOTE*
Cache memory is allocated as FIXED memory, so if you have less
than 16MB I suggest you set this option to 512KB or less.
/MONITOR Set monitor ON by default. If omitted monitor is OFF. See
MONITOR.EXE for more information.
/RASECTORS:n Read Ahead Sectors.
Specifies the minimum number of sectors to be read per read
action and placed in the cache.
If omitted the default differs per volume and equals the
number of sectors per cluster times 2.
The maximum treshold value used is the number of sectors per
cluster times 4.
You should note that the actual sector IO per read action is
NOT determined by an application, but by the IFS. For FAT access
single sector reads are done. For Directory and Files IO reads
are done on a cluster base. By setting the RASECTORS you can
define the minimum number of sectors the IFS will read from disk
and place in the cache.
/EAS Make FAT32.IFS support EXTENDED ATTRIBUTES.
CACHEF32.EXE
CACHEF32.EXE is a helper program with the following functions:
- Check DISK state on boot, run CHKDSK if needed.
- Start the LAZY WRITE daemon.
- Set CACHE and READ-AHEAD parameters.
- Set Longname behaviour.
When run in the foreground and CACHF32 is already running, it displays the CACHE
parameters and allows you to modify the values. If no other copy of CACHEF32 is
running, it detaches a background copy.
When run in the background (detached), CACHEF32 will act as lazywrite daemon.
CACHEF32.EXE supports the following options:
/? Shows help.
/Q Terminates CACHEF32. CacheF32 will be unloaded from memory, lazy
writing will stop. (Performance will degrade).
/D:nn Sets the DISKIDLE value. See OS/2 online help on CACHE.
/B:nn Sets the BUFFERIDLE value. See OS/2 online help on CACHE.
/M:nn Sets the MAXAGE value. See OS/2 online help on CACHE.
/R:d:,n Set RASECTORS for drive d: to n.
/L:ON|OFF Set lazy writing ON or OFF, default is ON
/FS Use short names internally.
/FL Use long names internally (default).
(see LONG FILENAMES IN OS/2 AND DOS SESSIONS below)
PARTFILT.FLT
Before anything else: PARTFILT is based on the excelent work of
Deon van der Westhuysen. I only made minor modification to it. The source code
is available under GPL conditions. Please send me a mail if you want the sources.
My current homepage lacks space to store the sources.
PARTFILT.FLT is a BASEDEV FILTER device that as able to presents (fakes) partition
types that are normally unsupported by OS/2 in such a way to OS/2 that IFS's can
be loaded on these partitions. Such virtualized partition will always be mounted
after the non-virualized partitions.
Currently (as far as I know) the filter can be used for two IFS's:
This one, FAT32.IFS and the Linux IFS.
Beside that, PARTFILT.FLT can be used for other purposes such as making not-visible
partitions visible or using multiple primary partitions.
PARTFILT.FLT supports the following options:
/Q Load quietly
/W Enables Writing to the faked partitions. Without this option
the faked partitions are read-only.
/A This option does two things:
- Disables OS/2 to access all partitions, but:
- Virtualizes (or fakes) all known partitions.
Known partitions are the normal FAT partitions,
IFS (=mainly HPFS) partitions and the partitions specified
with the /P option.
All primary partitions of known types are also virtualized,
and will be accessable from OS/2.
This option must be used in conjunction with the /M option.
/M <mountlist> - Specifies the order in which partitions must be mounted.
Must be used with the /M option.
WARNING: Incorrect usage of the /A and /M options could make your
system unbootable.
=> USING THE /A and /M OPTIONS is not advised! <=
if you need more information on these options please see:
http://ourworld.compuserve.com/homepages/hkelder
/P <partition types to fake>
This is option is used to tell PARTFILT which partition type are to be
faked. You should NOT use partition types already supported by OS/2 since this would
result in a single partition being mounted two times. The list should consist of
partition type numbers (in hexadecimal), separated by comma's.
The partition type number are as follows:
01 FAT12 (supported by OS/2)
02 XENIX_1
03 XENIX_2
04 FAT16 (supported by OS/2)
05 EXTENDED
06 HUGE (supported by OS/2)
07 IFS (supported by OS/2)
0A BOOTMANAGER
0B FAT32
0C FAT32_XINT13
0E XINT13
0F XINT13_EXTENDED
41 PREP
63 UNIX
83 LINUX
10 Hidden partition (bits OR'd with partition type)
To make PARTFILT.FLT fake a FAT32 partition the /P option should be /P 0B.
To make PARTFILT.FLT fake a LINUX partition the /P option should be /P 83.
To fake both specify /P 0B,83.
The best location seems to differ depening on your configuration. Some state FAT32.IFS
will only work is PARTFILT is the first basedev, other claim it only works if PARTFILT
is the last one.
A specific problem was reported when using a SCSI powersave basedev that only seemed
to work if PARTFILT was the last basedev.
CHKDSK & UFAT32.DLL
The UFAT32.DLL is called by CHKDSK whenever the CHKDSK command
is issued for a FAT32 drive. UFAT32.DLL currently only supports CHKDSK.
For CHKDSK the following options are implemented:
/F Fixes problems (Currently UFAT32.DLL only fixes lost clusters, and an incorrect
free space count.)
/C Causes lost clusters to be automatically converted to files if the drive was
in an inconsistent state at boot (No questions asked).
/V:1 Causes CHKDSK to show fragmented files.
/V[:2] Causes CHKDSK to show details on all files checked.(default)
The CHKDSK process does the following checks:
- Compares all copies of the FATs;
- Checks for each file the file allocation;
- Checks per file or directory the VFAT long filename;
- Checks for, and if /F is specified, repairs lost clusters.
- Checks for, and if /F is specified, repairs cross-linked files.
- Checks free space, and if /F is specified, corrects an incorrect setting.
- Checks for lost extended attributes.
F32STAT.EXE
F32STAT can be used to query the clean shutdown state of
a FAT32 drive.
It also allows you to alter the clean shutdown state. You could use this feature
if FAT32.IFS blocks access to the disk because it is dirty on boot, and CHKDSK could
not solve the problem.
The syntax is:
F32STAT drive: [options]
The following options exist:
/CLEAN - Inform FAT32.IFS that the disk was clean on boot and may be used.
The disk itself will be marked as clean on a succesfull shutdown.
(The internal dirty flag FAT32.IFS uses will be cleared.)
/FCLEAN - Inform FAT32.IFS that the disk was clean on boot and may be used.
The disk itself will also be marked as clean at that moment.
(The internal dirty flag FAT32.IFS uses will be cleared, but the
marking on disk will also be set ok.)
/DIRTY - Inform FAT32.IFS to set its internal dirty flag, and mark the drive dirty
on disk. On shutdown the drive will be left dirty, so when booting Windows 95 (OSR2)
SCANDISK will be fired.
MONITOR.EXE
Monitor will show (most) FAT32 actions on screen. This program
is intended for troubleshooting. Using MONITOR will degrade performance since FAT32
must send monitoring information to an internal buffer. This internal buffer is
only 4096 bytes large, so if monitoring is on, but MONITOR does not run, logging
information is lost. This will however only occur if /MONITOR is
specified after the IFS= line for FAT32.IFS.
If the /MONITOR command is not specified in the config.sys after the IFS= statement
monitoring is OFF by default, but starting MONITOR once will activate monitoring.
When MONITOR runs, information is shown on the screen, but also written to FAT32.LOG
in the current directory.
When MONITOR terminates the internal montoring is switched off.
the syntax for monitor is:
MONITOR [level] [/S]
level can be any number, but currently only 1,2 and 3 are actually implemented.
If no level is specified, then level 1 is used.
This level reports (almost) all calls into the IFS with the return values returned.
This can be very usefull to determine why a given program might fail or indicate
errors.
/S - Runs without output to the screen, but only to FAT32.LOG. This is usefull
if MONITOR sends so much messages to the screen that the program can't keep up with
the IFS. Using /S only sends the output to FAT32.LOG so no time is lost in screen
handling.
DISKINFO.EXE
When run with no options, diskinfo will scan
and show all partitions.
The following options are available:
/V - Verbose mode. Show more info, specifically on FAT32 partition.
/B - Show the boot sector of FAT32 partitions. Only if /V is only specified.
/P - Allows you to specify a list of partition types that should also get a partition
sequence number. See PARTFILT for more information.
GENERAL NOTES
MAKING OS/2 RECOQNIZE FAT32 PARTITIONS.
---------------------------------------
OS/2 by itself does not recoqnize FAT32 partitions. This means that installing
the IFS is useless if we can't make OS/2 recoqnize them.
Currently there are two ways to achieve that.
- Use PARTFILT.FLT to fake FAT32 partition; (this is advised)
- Use the modified version of OS2DASD.DMD.
OS2DASD.DMD
-----------
The version of OS2DASD.DMD supplied in this package is a modified version
of this driver and is NOT at the latest level. This means that it
is possible that some of the latest features in the IBM supplied driver may
not be supported. Also, when installing new fixpacks, you should make sure
that this version of OS2DASD.DMD is not replaced.
Also, when using this driver, FAT32 partitions COULD end up having a drive
letter assign before the OS/2 partition, shifting the assigned drive letters
for all next partitions up and thus making OS/2 unbootable.
This version of OS2DASD.DMD has extra support for partition type 11 (hex B).
Partition type 12 (hex C), FAT32 through INT13 is NOT supported by this
driver.
Generally, it is not advised to use this version of OS2DASD.DMD, but to
use the PARTFILT.FLT.
LONG FILENAMES IN OS/2 AND DOS SESSIONS
---------------------------------------
In the initial release long file names where only shown in OS/2 sessions, but in
DOS sessions, the short filename equivalent was shown.
This could however lead to big problems. An example:
In in an OS/2 session directory \DevStudio was current, from a DOS session the
directory \DEVSTU~1 could be removed since OS/2 didn't know that DevStudio and DEVSTU~1
were infact the same directories.
The same problem could occur when opening files in both OS/2 and DOS.
No proper multiuser handle would take place since OS/2 doesn't know that files
with different names are the same.
To solve this problem I've done the following:
Via a setting FAT32.IFS can be told to:
- Translate all long filenames internally to their short equivalences OR
- Use the long names internally, but hide all files or dirs with long names from
DOS sessions.
This setting can be changed (on the fly) with CACHEF32.EXE.
When using short names internally the following drawbacks occur:
- Current directory is shown as a short name (command line only)
- When deleting (long) files from the command line, the WPS doesn't pickup the
deletions.
When using long names internally the following drawbacks occur:
- Files and directories with long names are not visible in DOS sessions.
This is however the same as with HPFS.
CLEAN SHUTDOWN & CHKDSK
-----------------------
If Windows 95 (OSR2) shuts down properly, the clean shutdown status of the disk
is physically written on the disk. On next boot this state is checked, and if the
disk is not shutdown properly, SCANDISK is run.
FAT32.IFS also supports this feature. When CACHEF32 is called from the config.sys,
it checks, via a call to the IFS the state of each FAT32 drive.For each drive that
is not shutdown properly, CHKDSK is fired. If no errors are found, or if only lost
clusters where found and repaired, the drive is marked ok.
If CHKDSK cannot solve the problem, the drive state is left dirty, and NO FILES
CAN BE OPENED AND NO DIRECTORIES CAN BE ADDED OR REMOVED.
Shutting down the disk, leaves the disk marked as not properly shutdown.
You should boot Windows 95 and run SCANDISK on the drive to fix the remaining problems.
F32STAT however, allows you for set the drive status, bypassing the normal handling
of FAT32.IFS. See the description of F32STAT for more information.
FREE SPACE
----------
On most FAT32 drives the amount of free space is stored. FAT32.IFS will only
redetermine the amount of free space if:
- The disk was marked dirty on boot;
- The free space is set to -1 on the disk;
- The free space is not available on the disk.
FAT32.IFS will internally keep track of the free space and update it on disk
on shutdown.
PERFORMANCE
-----------
All of the code is in plain 16 bits C (All of OS/2's IFS's are 16 bits!).
No assembly language code is used.
The MONITOR function takes a lot of time. Be sure to switch if off if you don't
need it.
You should probably experiment with the CACHEF32 options to get the best performance
for your situation.
For best performance it is advised to keep the disk as defragmented as possible.
Use Windows 95 defrag to defrag the disk.
COMPATIBILITY WITH WINDOWS95
-----------------------------
As far as I can tell, FAT32.IFS is fully compatible with the FAT32 support in Windows
95. VFAT longnames can be used and on my PC, Windows95 doesn't compain (anymore!)
about long filenames I have created with FAT32.IFS.
The numeric tailed short names also seem to work ok. (The numeric tail option cannot
be switch off!)
File names are, as in Windows95, case preserving (in OS/2 sessions).
Creating a name in lower case will result in the file having a VFAT longname,even
if the name conforms to 8.3. The case will be preserved.
Last access dates are maintained by FAT32.IFS. (but not the last access time since
Win95 doesn't support it) You can see these when using the detailed view of the
drive object.
EXTENDED ATTRIBUTES
-------------------
General
-------
Since version 0.70 FAT32.IFS supports EXTENDED ATTRIBUTES.
For FAT32.IFS to support Extended Attributes /EAS MUST be specified after the IFS=....\FAT32.IFS
line in the config.sys.
Extended Attributes are implemented in the following manner:
For each file or directory that has extended attributes a file is created with
a name that consists of the file or directory name the EAs belongs to followed by
' EA. SF'. So if a file called 'FILE' has extended attributes these attributes are
stored in a file called 'FILE EA. SF'.
These EA files are given the hidden, read-only and system attributes.
FAT32.IFS will not show these files in a directory listing, but Windows 95 can
show them.
The mark byte
-------------
Also, to speed things up a bit, each file having extended attributes is marked
by FAT32.IFS. For this mark an appearant unused byte in the directory entry is used.
The value for this byte is set to 0xEA for files having normal EAs, to 0xEC for
files having critical EAs, and to 0x00 for files not having EAs at all.
(Please note that files with critical EAs can not be opened by programs no able
to handle EAs, like DOS programs.)
This byte (directly following the files attribute) is not modified while running
Windows 95 and neighter by SCANDISK or DEFRAG, but theoretically, other programs
running under Windows 95 could modify it.
If another program sets the value to 0x00 for a file that has EAs these EAs will
no longer be found using DosFindFirst/Next calls only. The other OS2 calls for retrieving
EAs (DosQueryPathInfo, DosQueryFileInfo and DosEnumAttribute) do not rely on this
byte.
Also the opposite could, again theoretically, occur. Files not having EAs could
be marked as having EAS. In this situation only the performance ofdirectory scans
will be decreased.
Both situations however are checked and if necessary corrected by CHKDSK.
The drawbacks
-------------
Currently, the drawback of using Extended Attributes is that directory scan performance
has slightly decreased.
The overhead on opening or accessing individual files is hardly noticable.
If you do not really need extended attribute support then simply do not specify
/EAS after the IFS line in the config.sys.
The advantages
--------------
The advantages of FAT32.IFS supporting extended attributes are:
- The WPS heavily uses EAS to store folder and file settings. Without EAS the WPS
will not remember settings across boots.
- REXX .CMD files must be tokenized on each run, thereby reducing performance.
With EAS the tokenized version of the .CMD will be stored in EAs.
If you can live with the small loss in performance while doing directory scans
it is advised you specify /EAS after the IFS line in the CONFIG.SYS.
If you do not really need extended attribute support and you cannot accept the
decrease in directory scan performance then simply do not specify /EAS after the
IFS line in the config.sys.
IOCTL SUPPORT
-------------
IOCTL calls (category 8) are now passed through to OS2DASD. All calls supported
by OS2DASD.DMD are now also supported by the IFS.
TROUBLESHOOTING
===============
Should FAT32.IFS fail to work, please check the following:
- Is a new drive letter assigned ? (If not OS2DASD.DMD failed)
If not, tell me.
- If you are not shure, try the /MONITOR parameter after FAT32.IFS,
and after reboot look with monitor for FS_MOUNT calls. Send me
the results.
- If a new drive letter is assigned, but FAT32.IFS fails,
please run DISKINFO and send me the output.
If you have a program that doesn't work or returns errors, please run monitor.exe
while you execute the program. After the error has occured, terminate monitor and
send me a message describing what the problem is, as detailed as possible and include
the FAT32.LOG that was created by monitor.
SUPPORTED IFS FUNCTIONS
=======================
FS_ALLOCATEPAGESPACE : No
FS_ATTACH : No
FS_CANCELLOCKREQUEST : No, function is implemented in the KERNEL
FS_CHDIR : Yes
FS_CHGFILEPTR : Yes
FS_CLOSE : Yes
FS_COMMIT : Yes
FS_COPY : Partly, unsupported actions are simulated by command
shell
FS_DELETE : Yes
FS_DOPAGEIO : No
FS_EXIT : Yes
FS_FILEATTRIBUTE : Yes
FS_FILEINFO : Yes
FS_FILEIO : No
FS_FILELOCKS : No, function is implemented in the KERNEL
FS_FINDCLOSE : Yes
FS_FINDFIRST : Yes
FS_FINDFROMNAME : Yes
FS_FINDNEXT : Yes
FS_FINDNOTIFYCLOSE : Obsolete in OS/2 WARP
FS_FINDNOTIFYFIRST : Obsolete in OS/2 WARP
FS_FINDNOTIFYNEXT : Obsolete in OS/2 WARP
FS_FLUSHBUF : Yes
FS_FSCTL : Yes
FS_FSINFO : Yes
FS_INIT : Yes
FS_IOCTL : Yes - LOCK & UNLOCK, others are passed to OS2DASD.
FS_MKDIR : Yes
FS_MOUNT : Yes
FS_MOVE : Yes
FS_NEWSIZE : Yes
FS_NMPIPE : No
FS_OPENCREATE : Yes
FS_OPENPAGEFILE : No
FS_PATHINFO : Yes
FS_PROCESSNAME : Yes
FS_READ : Yes
FS_RMDIR : Yes
FS_SETSWAP : No
FS_SHUTDOWN : Yes
FS_VERIFYUNCNAME : No
FS_WRITE : Yes
HISTORY
Version 0.10 - Initial Version
Version 0.20
- Cache routines have been improved for performance. Removing 'old' sectors from
the cache is no longer needed. /T option for CACHEF32 has been removed.
- CHKDSK: Is now able to fix incorrect free space count.
- CHKDSK: Lost cluster fix algoritm has been improved for performance.
- CHKDSK: Didn't recoqnize bad-sectors, has been fixed.
- CHKDSK: Had problems with recoqnition of some type of free clusters,has been
fixed.
- OS2DASD.DMD: Is now based on the latest version.
Version 0.30
- Added PARTFILT.FLT to the archive.
- Added support for ReadOnly partitions. This is needed for PARTFILT.
- IOCTL Calls (category 8) are now passed throught to OS2DASD.
Version 0.40
- The volume label was retrieved from the boot sector. However Win95 actually stores
the Volume label in the root directory. The Volume label now is taken from the root
directory.
Also, the label can be set now. (The boot sector is however still updated)
- /Q switch of PARTFILT didn't work. Now it does.
- A problem was in CHGFILEPOINTER that could (theoretically) lead to an trap (FAT32:
FS_WRITE: No next cluster available").
- Corrected a logical error where renaming a file or directory to an existing directory
caused the file or directory to be moved into the target directory. Now FAT32.IFS
returns an error.
- Changed CHKDSK so that if an error is found in on of the FATs CHKDSK continues,
but ignores the /F switch. Previously, CHKDSK would not do any additional checks.
- Renaming a file or directory from the workplace shell didn't work because of
two problems:
- the WPS uses a strange algoritm to determine of the IFS which appearantly
failed with FAT32. This has been corrected.
- FAT32.IFS does not support EA's (yet), the WPS renames a file, tries to write
EAs and since that fails renames the file back again.
Now FAT32 returns NO_ERROR on the call used to write EAs.
- CHKDSK now is able to fix cross-linked clusters on the disk.
Version 0.41
- Fixed a problem with numeric tails shortnames. Files alway got ~1 instead if
an incrementing number. Has been fixed.
Version 0.50
- Fixed a problem where files with longnames could sometimes not be found which
lead to duplicate filenames.
- Fixed a problem where scandisk would claim that a directory created by FAT32.IFS
contained invalid blocks.
- Fixed a (BIG) problem with files or directories with long names where if such
a file was opened in a DOS session and in an OS/2 session simultaniously OS/2 was
unable to see that the same file was opened.
- Fixed a problem where read-only executables could not be run.
- Fixed a problem where the algoritm used to determine the highest available cluster
number was incorrect.
- Fixed a problem were CHKDSK was unable to fix cross-linked files.
- Since some people complained that FAT32 would sometimes hang,
I have modified the internal semaphore mechanism so an error message will appear
if a semaphore remains blocked for more than a minute.
Version 0.51
- Did a lot of work on Lazy write performance. Cache access is no longer protected
with a semaphore but with a per sector inuse flag.
- Fixed a problem that caused INSTALL and MINSTALL to abort when FAT32.IFS was
loaded. The problem had to do with argument checking with FS_IOCTL
calls.
- Fixed a problem that BRIEF, a populair editor under OS/2, trapped or hung itself.
The problem had to do with returning improperly formatted nformation when querying
EAs (FAT32.IFS does not support EAs!)
- Corrected a serious problem when a single file was opened more than once and
the file was modified using one of the instances. The other instance(s) didn't pick
up the changes and FAT32.IFS might trap.
Version 0.52
- Didn't handle closes from child processes that inherited open files properly
so the final close would fail.
Version 0.60:
- Changed the algoritm to detect EOF in the FATs since MS appearantly uses other
values than 0x0FFFFFF8 as EOF token.
- Changed the flush dirty buffer mechanism to use strategy2 device calls.
This has resulted in an increase of performance during write to disk.
- Changed CHKDSK to accept an /V:1 argument to only show fragmented files,
while /V[:2] also lists all files.
- Made it possible that renaming a file to a new name where only the case was changed
worked.
Version 0.61:
- Changed some logic in the dirty buffer flush mechanism.
- Changed some logic in the FS_WRITE and FS_NEWSIZE functions.
Version 0.62:
- Corrected a bug that lead to a disk full message when a file was rewritten
(for instance with E.EXE) and the new size was just a couple of bytes more
then to old size. Problem was result of the logic change in FS_NEWSIZE.
- Oops: Forgot to update the version number in version 0.61.
Version 0.63:
- Finally understood why CHKDSK failed on very large disks. UFAT32.DLL accesses
the disk using DosOpen with OPEN_FLAGS_DASD. In that mode default behaviour is that
the disk is accessed using physical byte offsets from the beginning of the (logical)
disk. Now since the maximum value in a 32 bit integer is 2^32 this value divided
by 512 was the maximum sector that could be read (= sector 8388608 = 4Gb disk size
maximum).
Now UFAT32 uses the same trick as HPFS uses, via a call to DosFSCtl disk access
is switched to sector mode so 2^32 sectors can be accessed.
This means CHKDSK can (theoretically) check disks upto 2048 gigabytes.
Version 0.64:
- Again a problem with CHKDSK, this time the file allocation check failed if there
were more than 65535 clusters assigned to a file.
- FAT32.IFS now reports fake cluster sizes and total and free cluster counts whenever
a DOS session queries free space. The maximum cluster size returned has been set
to 32 Kb and the maximum for total and free clusters is 65526 clusters so the maximum
disk size in dos is reported as almost 2Gb.
- Encountered (and fixed) a trap that occured whenever a volume was flushed via
a explicit call and there were still dirty sectors in call.
It occured in code I changed in version 0.60 and this was the first time I trapped
on it, so the combination of factors appears unlikely.
- Modified FS_CHGFILEPTR so negative seeks will be handled properly and build in
logic to not allow files to grow bigger then 2Gb.
- Uptil now I ignored the MUST_HAVE_XXX settings for directory scans since I assumed
they were not used. Some users reported files beeing show twice in some application
so: I stand corrected and so is FAT32.IFS.
- Corrected a potential problem where (theoretically) files could be given a directory
attribute.
- Changed the algoritme used when no large enough contiguous fat chain is available
and the fat chain has to be constructed from various chains.
Before the change an algoritme searching for individual free clusters was used.
Now FAT32.IFS searches the largest free chain assigns it and then searches for the
next largest free chain until a chain long enough is created. This is still not
very fast, but will only really occur of the disk is rather full and very fragmented.
Version 0.65:
- Files with valid 8.3 lowercase filenames where returned by findfirst/next n DOS
sessions in lowercase as well. Some programs don't like that.
Now findfirst/next in DOS sessions always returns an uppercase name.
(This problem only occured when LFN's were hidden to DOS.)
- Corrected a problem where while filling the buffer for FindFirst/Next too much
data was initialized (due to using strncpy) and data was overwritten.
This was most appearant with OS/2 Commander that trapped on a FAT32 directory
with many files.
Version 0.66:
- DosSetFileInfo returned an error (ERROR_INVALID_LEVEL) when trying to write
Extended attributes. Now FAT32.IFS reports NO_ERROR (But still doesn't write
the EA!). This makes f.i. that the installation of the OS/2
Netscape pluginpack now works properly.
- Corrected a problem with FindFirst/Next where the check on required buffer space
was incorrect. Some programs (Slick Edit) failed doing a directory scan. This has
been fixed.
- Modified the behaviour of DosSetFileInfo so that it will only set date/time values
in the directory. Before DosSetFileInfo also set the attribute, but
I found that this also doesn't work on HPFS, so I modified the behaviour.
- Modified the default MONITOR logging so that (almost) all FS_XXXX calls are shown
with the return values given.
Version 0.70:
- Most significant change is the implementation of EXTENDED ATTRIBUTES.
Currently they will only be supported if /EAS is specified after FAT32.IFS in
the config.sys. Please read the chapter about extended attributes.
- Corrected a small problem where a whenever a short name had to be created for
a longer name containing any embedded blanks in the name FAT32.IFS left the blanks
in, while Win95 skips them while creating the shortname.
This lead to SCANDISK reporting incorrect long file names. (When correcting this
problem the short name was modified by SCANDISK.)
Now FAT32.IFS does the same as Windows 95.
- Received a report that FAT32.IFS failed allocating the cache space. Modified
FAT32.IFS so it will no longer trap on such a situation, but will continue to run
(without a cache - slow!)
- Received a report about a possible memory leakage problem in FAT32.IFS.
Changed CACHEF32.EXE so when run, it will show the number of GDT selectors currently
allocated for FAT32.IFS.
Version 0.71:
- EA's were not found from DOS sessions. Now this is hardly a problem since
DOS programs never access EA's, but EAUTIL can be used in DOS sessions, and didn't
work. Now it does.
- There was another problems with finding EAs when FAT32.IFS was set to the mode
in which internally short names were used (CACHEF32 /FS). Now this seems to work
properly.
Version 0.72:
- Forgot build in the EA logic for creating and removing directories. Has been
added.
Version 0.73:
- Using DosSetPathInfo, it was possible to create an EA file for a non existing
file. This lead f.i. to a ' EA. SF' file in the root directory.
This problem has been corrected.
- Changed a bit in the algoritm for making a short name for a file with a longname.
Version 0.74:
- Corrected a problem with DosFindFirst/next when the buffer wasn't large enough
for the extended attributes and FAT32.IFS returned ERROR_EAS_DIDNT_FIT when more
than one entry was placed in the resultbuffer.
Now FAT32.IFS returns this error only if the EA's of the first
matching entry don't fit in the buffer.
(This error lead to the WPS giving an error that no matching entries were found
on opening of a directory)
CONTACT AUTHOR:
Henk Kelder
hkelder@inetgate.capgemini.nl
hkelder@compuserve.com
@Macarlo, Inc.
@Macarlo's Shareware & Web
OS/2
Java Lobby Member
Java Site Accredited
[TOP]
[HOME] [INDEX]