When an active request to the PFS is interrupted in a situation
where normal ESTAE processing is bypassed by MVS™, the PFS may have resources, such as storage
and locks, that are left in a state that will cause problems for other
users.To allow the PFS a chance to clean up if this should happen,
a Recovery_area is passed on every operation, through the osi_rtokptr
pointer in the OSI_structure, where the PFS can record its resources
or store a pointer to a recovery block. Any information that is stored
in this area by the PFS during an operation is passed back to the
PFS via the Recovery_area parameter of vfs_recovery if the operation
is interrupted by end-of-memory for the user address space.
The
OSI Work Area and the Pre-initialized C Environment Stack, if used,
are still addressable and left as they were at the time of the abend.
These areas can be used to hold a recovery block whose address is
placed in the Recovery_area. The vfs_recovery operation is invoked
with its own areas like any other operation.
Refer also to vn_recovery — Recover resources after an abend, which is the operation that is invoked during
normal ESTAE processing.
There is no EOM recovery for the vfs_recovery
operation itself. The operation is invoked with osi_rtokptr pointing
to a new recovery area that can be used for standard PFS abend recovery;
that is, with vn_recovery.
The PFS is not called if the file
system has been unmounted between the original vnode operation and
the running of the EOM resource manager. This can only happen if the
user was in a signal-enabled wait at the time the address space was
terminated. It is expected that the PFS has cleaned up all its file-system-related
resources during vfs_umount.
See also the OSI and osirtoken
structures in Interface structures for C language servers and clients.
The state of any
file-level objects that may have been involved with the interrupted
operation is unknown at the time vfs_recovery is invoked.