The BPXYVLOK macro maps the interface block to pass locking
information via the v_lockctl service.
* %GOTO VLOKPRO ; /* Bilingual header
MACRO
BPXYVLOK &DSECT=YES,&LIST=YES
GBLB &VLOK411
AIF (&VLOK411 EQ 1).E411
&VLOK411 SETB 1
AIF ('&LIST' EQ 'YES').A411
PUSH PRINT BPXYVLOK: Vnode Byte Range Locking Structure
PRINT OFF
AGO .A411
* */
*%VLOKPRO : ;
*/****START OF SPECIFICATIONS******************************************
*
* $MAC (BPXYVLOK) COMP(SCPX1) PROD(BPX):
*
*01* MACRO NAME: BPXYVLOK
*
*01* DSECT NAME: VLOK
*
*01* DESCRIPTIVE NAME: Vnode Services Byte Range Locking Structure
*
*02* ACRONYM: VLOK
**/
*/*01* PROPRIETARY STATEMENT= */
*/***PROPRIETARY_STATEMENT********************************************/
*/* */
*/* */
*/* LICENSED MATERIALS - PROPERTY OF IBM */
*/* THIS MACRO IS "RESTRICTED MATERIALS OF IBM" */
*/* 5650-ZOS (C) COPYRIGHT IBM CORP. 1993, 2005 */
*/* */
*/* STATUS= HBB7720 */
*/* */
*/***END_OF_PROPRIETARY_STATEMENT*************************************/
*/*
*01* EXTERNAL CLASSIFICATION: GUPI
*01* END OF EXTERNAL CLASSIFICATION:
*
*01* FUNCTION:
*
* To pass locking information about the V_lockctl interface.
*
*01* METHOD OF ACCESS:
*
*02* PL/X:
*
* %INCLUDE SYSLIB(BPXYVLOK)
* By default, the VLOK is based on VLOKPtr. If
* other basing is desired, use %VLOKBASE='BASED(XXXXXX)'.
* If %VLOKBASE='BASED(VLOKPtr)' is coded, a Declare for
* VLOKPtr is also generated.
*
* Typical Syscall usage: %VLOKBASE = 'Based(Addr(InputVLOK))'
*
*02* ASM:
* With DSECT=NO, storage is allocated in line
* and addressability is provided thru that DSECT or CSECT.
* With DSECT=YES, a DSECT is produced and "USING VLOK,reg"
* is required for addressability. Here "reg" contains the
* address of VLOK#LENGTH bytes of storage.
* The default is DSECT=YES.
*
*01* SIZE: VLOK#LENGTH
*
*01* POINTED TO BY: VLOKPtr
*
*01* CREATED BY: Storage obtained by caller of system call
*
*01* DELETED BY: Caller of system call
*
*01* STORAGE ATTRIBUTES:
*02* SUBPOOL/DATASPACE: N/A
*02* KEY: N/A
*02* RESIDENCY: N/A
*
*01* FREQUENCY: 1 per v_lockctl syscall
*
*01* SERIALIZATION: N/A
*
*01* DEPENDENCIES: None
*
*01* NOTES:
* BPXYVFSI is a C program interface for the BPX1V (v_)
* services. The VLOCK structure in BPXYVFSI matches
* the BPXYVLOK structure.
*
*01* COMPONENT: z/OS UNIX (SCPX1)
*
*01* DISTRIBUTION LIBRARY: AMACLIB
*
*01* EYE-CATCHER: VLOK
*02* OFFSET: 0
*02* LENGTH: 4
*
****END OF SPECIFICATIONS*********************************************/
* %GOTO VLOKPLS ; /* Bilingual header
.A411 ANOP ,
** BPXYVLOK: VLOK - Vnode Service Byte Range Locking structure
AIF ('&DSECT' EQ 'NO').B411
VLOK DSECT ,
AGO .C411
.B411 ANOP ,
DS 0D Clear storage
VLOK DC XL(VLOK#LENGTH)'00'
ORG VLOK
.C411 ANOP ,
VLOKBEGIN DS 0D
*
VLOKID DC C'VLOK' Eye catcher
VLOKLEN DC AL4(VLOK#LENGTH) Length of the structure
VLOKLOCKER DS 0F Locker
VLOKSERVERPID DS F Server's Process ID
VLOKCLIENTPID DS F Server's Client's PID
VLOKLOCKERTOK DS CL8 Locker Token
VLOKCLIENTTID DS CL8 Client's Thread ID
VLOKOBJECT DS 0F Object - a locked file
VLOKOBJCLASS DS F Object Class
VLOKOBJID DS 0CL12 Object ID @D1C
VLOKOBJDEV DS CL4 Object Device ID
VLOKOBJFID DS CL8 Object File ID
VLOKOBJTOK DS CL8 Object token
VLOKDOS DS 0F <--Not used externally
VLOKDOSMODE DS CL1 <--Not used externally
VLOKDOSACCESS DS CL1 <--Not used externally
VLOKBLKLOCKLEN DS CL1 VlokBlockingLock length
VLOKSUBFUNCTION DS CL1 Internal SubFunction
VLOKRSVD DS CL4 Reserved
VLOKVNTOKEN DS CL8 Vnode Token
VLOKBRLK DS CL24 Lock Information mapped
* by BPXYBRLK
VLOKENDVER1 DS 0F --- END OF VERSION 1 -------
DS F
VLOKBLOCKINGLOCK DS A Ptr to Ret Blocking Lock
VLOKUNION DS 0CL12
VLOKAIOEXT ORG VLOKUNION Async Extension
DS F ! Rsvd for Ptr64
VLOKAIOCB DS A Async Locking Aiocb
VLOKAIOCBLEN DS F Async Aiocb Length
*
VLOKUNLOADLOCKSEXT ORG VLOKUNION Unload Locks Extension
DS F ! Rsvd for Ptr64
VLOKULLOUTLISTPTR DS A Output List Ptr
VLOKULLSUBPOOL DS CL1 Storage Subpool
DS CL1
VLOKULLRETWAITERS DS CL1 Return Waiters too
*
VLOKPURGEEXT ORG VLOKUNION Purge Locks Mask Ext
DS F ! Rsvd for Ptr64
VLOKPGMASKS DS A VlokObjOwnMasks
VLOKPGMASKSLEN DS F Length of the two masks
*
DS CL12
VLOKENDVER2 DS 0F --- End of Version 2 -------
*
* Constants
*
VLOK#LENGTH EQU *-VLOKBEGIN Length of VLOK
VLOK#HFS EQU 0 HFS Object Class
VLOK#MVS EQU 1 MVS Object Class
VLOK#LFSESA EQU 2 LFS/ESA Object Class
*
* Constants for V_lockctl commands
*
VLOK#REGLOCKER EQU 1 Register Locker
VLOK#UNREGLOCKER EQU 2 Unregister Locker
VLOK#LOCK EQU 3 Lock object's byte range
VLOK#LOCKWAIT EQU 4 Lock object's byte range +
- wait if blocked
VLOK#UNLOCK EQU 5 UnLock object's byte range
VLOK#QUERY EQU 6 Query byte range for locks
VLOK#PURGE EQU 7 Purge all locks for a locker
VLOK#LOCKASY EQU 8 Lock Asynchronously
VLOK#LOCKCANCEL EQU 9 Cancel Async Lock
VLOK#UNLOADLOCKS EQU 10 Unload BRLM Locks
*
* Constants for UnLoadLocks
*
VLOK#RETWAITERS EQU 1 Ret Held & Waiters
VLOK#RETALLOBJ EQU 3 Total UnLoad
*
* Mask structure for Purge Locks
*
VLOKOBJOWNMASKS DSECT ,
VLOKOBJECTMASK DS 0CL16 Object Id Mask
VLOKOBJCLASSMASK DS CL4 Object Class
VLOKOBJDEVMASK DS CL4 Object Devno (HFS)
VLOKOBJFIDMASK DS CL8 Object Fid (HFS)
VLOKOWNERMASK DS 0CL16 Owner Id Mask
VLOKLOCKERMASK DS 0CL8 Locker Mask
VLOKSPIDMASK DS CL4 Server PID Mask
VLOKCPIDMASK DS CL4 Client PID Mask
VLOKTIDMASK DS CL8 Thread Id Mask
*
** BPXYVLOK END
SPACE 3
AIF ('&LIST' EQ 'YES').E411 6@D1A
POP PRINT
.E411 ANOP ,
MEND , Terminating PL/X comment */
*
*%VLOKPLS : ;
*%IF VLOKBASE = '' %THEN
* %DO;
* %VLOKBASE = 'BASED(VlokPtr)';
* %END;
*%IF Translate(VLOKBASE) = 'BASED(VLOKPTR)' %THEN
* %DO;
* DCL VlokPtr Ptr(31); /* Pointer to the VLOK */
* %END;
*
*
*DCL
* 1 Vlok VLOKBASE Bdy(Dword), /* V_lockctl Byte Range Lock Info */
*
* 3 VlokId Char(4), /* Eye catcher - 'VLOK ' */
* 3 VlokLen Fixed(31), /* Length of structure */
*
* 3 VlokLocker Bdy(Dword), /* Locker @01C*/
* 5 VlokServerPID Fixed(32), /* Server's Process ID */
* 7 * Char(1), /* */
* 7 VlokServerPIDByte2 Char(1), /* sysplex system number @D1A*/
* 5 VlokClientPID Fixed(32), /* Server's Client's PID */
* /* +10 */
* 3 VlokLockerTok Char(8) /* Locker token @01C*/
* Bdy(Dword), /* @01A*/
* 5 VlokLockerTok1 Ptr(31), /* For CDS @01A*/
* 5 VlokLockerTok2 Ptr(31), /* For CDS @01A*/
* 3 VlokClientTID Char(8) /* Client's Thread ID @01C*/
* Bdy(Dword), /* @01A*/
* /* +20 */
* 3 VlokObject, /* Object - a locked file */
* 5 VlokObjClass Fixed(32), /* Object Class */
* 5 VlokObjID Char(12), /* Object ID -unique within Class */
* 7 VlokObjDev Char(4), /* Device ID for HFS file */
* 7 VlokObjFid Char(8), /* File ID for HFS file */
* /* +30 */
* 3 VlokObjTok Char(8), /* Object token */
*
* ! The fields below were never used and are being left @D2A
* ! here so old programs that may have referenced them @D2A
* ! will not suffer compile failures with this new macro. @D2A
* 3 VlokDOS, !<--Not used externally @D2C
* 5 VlokDOSMode Char(1), !<--Not used externally @D2C
* 5 VlokDOSAccess Char(1), !<--Not used externally @D2C
* !------------------------------------------------------- @D2A
*
* 3 VlokBlkLockLen Fixed(8), /* Length for VlokBlockingLock @D2A*/
* 3 VlokSubFunction Fixed(8), /* Optional internal sub function
* codes - see below @02A*/
* 3 * Char(4), /* Reserved for expansion */
* /* +40 */
* 3 VlokVnToken Char(8), /* Vnode Token @D2A*/
* /* +48 */
* 3 VlokBrlk Char(Length(Brlk)),/* Lock Information - BPXYBRLK */
*
* 3 VlokEndVer1 Char(0), /* +60 --- End of Version 1 ------- @D2A*/
* 3 * Ptr, ! Rsvd for Ptr64 @D2A*/
* 3 VlokBlockingLock Ptr, /* Ptr to Ret Blocking Lock @D2A*/
* /* +68 */
* 3 * UNION Bdy(DWord), /*@D2A*/
* 4 VlokAioExt , /* Async Extension @D2A*/
* 5 * Ptr, ! Rsvd for Ptr64 @D2A*/
* 5 VlokAiocb Ptr, /* Async Locking Aiocb @D2A*/
* 5 VlokAiocbLen Fixed(32), /* Async Aiocb Length @D2A*/
* /*@D2A*/
* 4 VlokUnLoadLocksExt , /* Unload Locks Extension @D2A*/
* 5 * Ptr, ! Rsvd for Ptr64 @D2A*/
* 5 VlokUllOutListPtr Ptr, /* Output List Ptr @D2A*/
* 5 VlokUllSubpool Fixed(8), /* Storage Subpool @D2A*/
* 5 * Fixed(8), /*@P3D@D2A*/
* 5 VlokUllRetWaiters Fixed(8), /* Return Waiters too @D2A*/
* /*@D2A*/
* 4 VlokPurgeExt , /* Purge Locks Mask Ext @D2A*/
* 5 * Ptr, ! Rsvd for Ptr64 @D2A*/
* 5 VlokPgMasks Ptr, /* VlokObjOwnMasks @D2A*/
* 5 VlokPgMasksLen Fixed(32), /* Length of the two masks @D2A*/
* /* +74 */
* 3 * Char(12), /*@D2A*/
* 3 VlokEndVer2 Char(0); /* +80 --- End of Version 2 ------- @D2A*/
*
*
*DCL
* Vlok#ID Char(4) Constant('VLOK'), /* Eye catcher */
* Vlok#Len Fixed(31) Constant(Length(Vlok));/* Length of Vlok */
*DCL
* Vlok#InvalidToken Char(8) /* Token is invalid due */
* Constant('FFFFFFFFFFFFFFFF'X); /* to lock error @D3A*/
*
*/* Constants for VlokSubFunction (Internal Use) */
*DCL
* Vlok#Close Fixed(8) Constant(5), /* v_lockctl = Vlok#Unlock & this
* is for a close @02A*/
* Vlok#Getown Fixed(8) Constant(6), /* Query owner locks @03A*/
* Vlok#MoveFs Fixed(8) Constant(7); /* filesystem move @D3A*/
*
*/* Constants for Object Class (VlokObjClass) */
*DCL
* Vlok#HFS Fixed(32) Constant(0), /* z/OS UNIX MVS Hierarchical FS */
* Vlok#MVS Fixed(32) Constant(1), /* MVS dataset */
* Vlok#LFSESA Fixed(32) Constant(2); /* LAN File Server/ESA files */
*
* /* Constants for UnLoadLocks @D2A*/
* Dcl /*@P3D@D2A*/
* Vlok#RetWaiters Fixed(8) Constant(1), /* Ret Held & Waiters @D2A*/
* Vlok#RetAllObj Fixed(8) Constant(3); /* Total UnLoad @D2A*/
*
* /* The UnLoaded Locks output is mapped by the
* Brlm_UnloadLocksList structure in the IGWLB2IN macro.
* This contains an array of (ObjectID,RangeLock) pairs.
*
* In the RangeLock structure if the RLAccess field equals
* Vlok#OpenModes then the RangeLock structure contains the
* file's open access and deny modes rather than a byte range
* lock. The file's open modes are returned when the VlokVnToken
* field contains a Vnode token and only for opens that have
* specified either DenyRead or DenyWrite. These are mapped
* by the VlokRngLock structure below, which overlays the
* BRLM_UnLoadList_RangeLock element of the array. @D2A*/
*
* Dcl Vlok#OpenModes Fixed(8) Constant(5); /*@D2A*/
*
* /* RangeLock structure for RLAccess=Vlok#OpenModes @D2A*/
* /*@D2A*/
* Dcl 1 VlokRngLock Based, /* A BRLM_RangeLock For Open Modes @D2A*/
* 2 VlokRngOwner Char(16), /* V_Open VopnOpenOwner @D2A*/
* 2 VlokRngOffLen Char(16), /* Not used @D2A*/
* 2 VlokRngFlags Fixed(32), /*@D2A*/
* 3 VlokRngWaiter Bit(1), /*@D2A*/
* 3 * Bit(7), /*@D2A*/
* 3 VlokRngOpenAcc Fixed(8), /* VopnShrAccess value @D2A*/
* 3 VlokRngOpenDeny Fixed(8), /* VopnShrDeny value @D2A*/
* 3 VlokRngRlAccess Fixed(8); /* =Vlok#OpenModes @D2A*/
*
* /* Mask structure for Purge Locks @D2A*/
*
* Dcl 1 VlokObjOwnMasks Based, /*@D2A*/
* 2 VlokObjectMask Char(16), /* Object Id Mask @D2A*/
* 3 VlokObjClassMask Char(4), /* Object Class @D2A*/
* 3 VlokObjDevMask Char(4), /* Object Devno (HFS) @D2A*/
* 3 VlokObjFIDMask Char(8), /* Object Fid (HFS) @D2A*/
* 2 VlokOwnerMask Char(16), /* Owner Id Mask @D2A*/
* 3 VlokLockerMask Char(8), /* Locker Mask @D2A*/
* 5 VlokSPidMask Char(4), /* Server PID Mask @D2A*/
* 5 VlokCPidMask Char(4), /* Client PID Mask @D2A*/
* 3 VlokTIDMask Char(8); /* Thread Id Mask @D2A*/
*
*/* Constants for V_lockctl commands */
*/* Changes made to these commands should also be made @P2A*/
*/* in the BPXZFCNA macro in the BPXFCBRL section. @P2A*/
*DCL
* Vlok#RegLocker Fixed(32) Constant(1), /* Register Locker */
* Vlok#UnregLocker Fixed(32) Constant(2), /* Unregister Locker */
* Vlok#Lock Fixed(32) Constant(3), /* Lock object's byte range*/
* Vlok#LockWait Fixed(32) Constant(4), /* Lock object's byte range
* - wait if blocked */
* Vlok#Unlock Fixed(32) Constant(5), /* UnLock object's byte range
* */
* Vlok#Query Fixed(32) Constant(6), /* Query byte range for locks
* */
* Vlok#Purge Fixed(32) Constant(7), /* Purge all locks for a
* locker */
* Vlok#LockAsy Fixed(32) Constant(8), /* Lock Asynchronously @D2A*/
* Vlok#LockCancel Fixed(32) Constant(9), /* Cancel Async Lock @D2A*/
* Vlok#UnloadLocks Fixed(32) Constant(10);/* Unload BRLM Locks @D2A*/
*
*
*/* VlokObjectVP & VlokObjTokVP are used internally for loading */
*/* and unloading byte range locks. */
*
*DCL 1 VlokObjectVP ViaPtr Bdy(Dword) Defined(VlokObject), /* @D1A*/
* 3 VlokObject1 Fixed(32), /* word 1 of VlokObject @D1A*/
* 3 VlokObject2 Ptr; /* word 2 of VlokObject @D1A*/
*
*DCL 1 VlokObjTokVP ViaPtr Bdy(Dword) Defined(VlokObjTok), /* @D1A*/
* 3 VlokObjTok1 Fixed(32), /* word 1 of VlokObjTok @D1A*/
* 3 VlokObjTok2 Ptr; /* word 2 of VlokObjTok @D1A*/
*