FS_MOUNT - Mount/unmount volumes
Purpose
Examination of a volume by an FSD to see if it recognizes the file system
format.
Calling Sequence
int far pascal FS_MOUNT(flag, pvpfsi, pvpfsd, hVPB, pBoot)
unsigned short flag;
struct vpfsi far * pvpfsi;
struct vpfsd far * pvpfsd;
unsigned short hVPB;
char far * pBoot;
Where
flag indicates operation requested.
flag == 0 indicates that the FSD is requested to mount or accept a volume
.
flag == 1 indicates that the FSD is being advised that the specified
volume has been removed.
flag == 2 indicates that the FSD is requested to release all internal
storage assigned to that volume as it has been removed from its driver and
the last kernel- managed reference to that volume has been removed.
flag == 3 indicates that the FSD is requested to accept the volume
regardless of recognition in preparation for formatting for use with the
FSD.
All other values are reserved.
The value passed to the FSD will be valid.
pvpfsi is a pointer to the file-system-independent portion of VPB.
If the media contains an OS/2-recognizable boot sector, then the vpi_vid
field contains the 32-bit identifier for that volume. If the media does
not contain such a boot sector, the FSD must generate a unique label for
the media and place it into the vpi_vid field.
pvpfsd is a pointer to the file-system-dependent portion of VPB.
The FSD may store information as necessary into this area.
hVPB is the handle to the volume
pBoot is a pointer to sector 0 read from the media.
This pointer is only valid when flag == 0.The buffer the pointer refers to
must not be modified. The pointer is always valid and does not need to be
verified when flag == 0. If a read error occurred, the buffer will contain
zeroes .
Remarks
The FSD examines the volume presented and determine whether it recognizes
the file system. If it does, it returns zero, after having filled in
appropriate parts of the vpfsi and vpfsd data structures. The vpi_vid and
vpi_text fields must be filled in by the FSD. If the FSD has an OS/2
format boot sector, it must convert the label from the media into ASCIIZ
form. The vpi_hDev field is filled in by OS/2. If the volume is
unrecognized, the driver returns non-zero.
The vpi_text and vpi_vid must be updated by the FSD each time these values
change.
The contents of the vpfsd data structure are as follows:
FLAG = 0 The FSD is expected to issue an FSD_FINDDUPHVPB to see if a
duplicate VPB exists. If one does exist, the VPB fs dependent area of the
new VPB is invalid and the new VPB will be unmounted after the FSD returns
from the MOUNT. The FSD is expected to update the FS dependent area of the
old duplicate VPB. If no duplicate VPB exists, the FSD should initialize
the FS dependent area.
FLAG = 1 VPB FS dependent part is same as when FSD last modified it.
FLAG = 2 VPB FS dependent part is same as when FSD last modified it.
After media recognition time, the volume parameters may be examined using
the FSH_GETVOLPARM call. The volume parameters should not be changed after
media recognition time.
During a mount request, the FSD may examine other sectors on the media by
using FSH_DOVOLIO to perform the I/O. If an uncertain-media return is
detected, the FSD is expected to clean up and return an UNCERTAIN MEDIA
error in order to allow the volume mount logic to restart on the
newly-inserted media. The FSD must provide the buffer to use for
additional I/O.
The OS/2 kernel manages the VPB through a reference count. All volume-
specific objects are labeled with the appropriate volume handle and
represent references to the VPB. When all kernel references to a volume
disappear, FS_MOUNT is called with flag == 2, indicating a dismount
request.
When the kernel detects that a volume has been removed from its driver,
but there are still outstanding references to the volume, FS_MOUNT is
called with flag == 1 to allow the FSD to drop clean (or other
regenerable) data for the volume. Data which is dirty and cannot be
regenerated should be kept so that it may be written to the volume when it
is remounted in the drive.
When a volume is to be formatted for use with an FSD, the kernel calls the
FSD's FS_MOUNT entry point with flag == 3 to allow the FSD to prepare for
the format operation. The FSD should accept the volume even if it is not a
volume of the type that FSD recognizes, since the point of format is to
change the file system on the volume. The operation may fail if formatting
does not make sense . (For example, an FSD which supports only CD-ROM.)
Since the hardware does not allow for kernel-mediated removal of media, it
is certain that the unmount request is issued when the volume is not
present in any drive .
Created using Inf-PHP v.2 (c) 2003 Yuri Prokushev
Created using Inf-HTML v.0.9b (c) 1995 Peter Childs