FS_SHUTDOWN
Purpose
Used to shutdown an FSD in preparation for power-off or IPL.
Calling Sequence
int far pascal FS_SHUTDOWN(type, reserved) unsigned short type; unsigned long reserved;
Where
type | indicates what type of a shutdown operation to perform. |
---|---|
type == 0 | indicates that the shutdown sequence is beginning. The kernel will not allow any new I/O calls to reach the FSD. The only exception will be I/O to the swap file by the swap thread through the FS_READ and FS_WRITE entry points. The kernel will still allow any thread to call FS_COMMIT, FS_FLUSHBUF and FS_SHUTDOWN. The FSD should complete all pending calls that might generate disk corruption. |
type == 1 | indicates that the shutdown sequence is ending. An FS_COMMIT has been called on every SFT open on the FSD and following that an FS_FLUSHBUF on all volumes has been called. All final clean up activity must be completed before this call returns. |
reserved reserved for future expansion.
Remarks
From the perspective of an FSD, the shutdown sequence looks like this:
First, the system will call the FSD's FS_SHUTDOWN entry with type == 0. This notifies the FSD that the system will begin committing SFTs in preparation for system power off. The kernel will not allow any new IO calls to the FSD once it receives this first call, except from the swapper thread. The swapper thread will continue to call the FS_READ and FS_WRITE entry points to read and write the swap file. The swapper thread will not attempt to grow or shrink the swap file nor should the FSD reallocate it. The kernel will continue to allow FS_COMMIT and FS_FLUSHBUF calls from any thread. This call should not return from the FSD until disk data modifying calls have completed to insure that a thread already inside the FSD does not wake and change disk data.
After the first FS_SHUTDOWN call returns, the kernel will start committing SFTs. The FSD will see a commit for every SFT associated with it. During these FS_COMMIT calls, the FSD must flush any data associated with these SFTs to disk. The FSD must not allow any FS_COMMIT or FS_FLUSHBUF call to block permanently.
Once all of the SFTs associated with the FSD have been committed, FS_SHUTDOWN will be called with type == 1. This will tell the FSD to flush all buffers to disk. From this point, the FSD must not buffer any data destined for disk. Reads and writes to the swap file will continue, but the allocation of the swap file will not change. Once this call has completed, no file system corruption should occur if power is shut off.