Updating LNKLST concatenations

Use the SETPROG LNKLST command to:
  • Define a LNKLST set of data sets for the LNKLST concatenation
  • Add data sets to or delete data sets from the LNKLST set
  • Remove the definition of a LNKLST set from the system
  • Test for the location of a specific module in the LNKLST concatenation
  • Activate a LNKLST set as the LNKLST concatenation for the system
  • Update an address space for jobs to use a LNKLST set

PROGxx is the parmlib member used to define one or more LNKLST sets. You can use PROGxx to activate one of the LNKLST sets as the LNKLST concatenation at IPL. (You can also activate the LNKLST concatenation through LNKLSTxx, but IBM recommends that you use PROGxx.) See z/OS MVS Initialization and Tuning Reference for information about the PROGxx parmlib member.

SETPROG LNKLST allows you to dynamically modify the LNKLST concatenation after IPL. For example, it allows you to define a new LNKLST concatenation, set a new LNKLST as the current one (meaning that any subsequently started job will use this new LNKLST), or update a currently executing job that is using another LNKLST to switch to use a new one. Note that currently executing jobs do not automatically switch to use a new LNKLST when that LNKLST is activated, thus multiple LNKLST definitions may be in use on the system simultaneously. See Changing the current LNKLST set in z/OS® MVS™ Initialization and Tuning Reference.

Attention: When using the SETPROG LNKLST command, be aware that some actions, such as ADD and ACTIVATE, may temporarily allocate all the data sets in the LNKLST concatenation to the master scheduler address space. The master scheduler address space has a TIOT size of 12 K, which allows for approximately 600 unit allocations. For data sets in the LNKLST concatenation that have an SMS data class assigned with a dynamic volume count greater than 1, additional TIOT space may be required, reducing the number of data sets that may be allocated within the master scheduler address space. Multi-volume data sets are not supported in the LNKLST concatenation. For this reason, IBM recommends that you not assign a data class that specifies a dynamic volume count greater than 1 to a data set in the LNKLST concatenation.

Syntax

The complete syntax for the SETPROG LNKLST command is:
 
SETPROG LNKLST,{DEFINE,NAME=lnklstname[,COPYFROM=lnklstname][,NOCHECK] }
               {ADD,NAME=lnklstname,
                      DSNAME=dsname[,VOLUME=volser][,ATBOTTOM    ]
                                                   [,ATTOP       ]
                                                   [,AFTER=dsname]
                                                   [,CONCAT(CHECK | NOCHECK)]}
               {DELETE,NAME=lnklstname,DSNAME=dsname                   }
               {UNDEFINE,NAME=lnklstname                               }
               {TEST,NAME=lnklstname,MODNAME=name                      }
               {ACTIVATE,NAME=lnklstname                               }
               {UPDATE,{{JOBNAME | JOB}=jobname} [,DELAY=nn]           }
                       {ASID=asid  } [DELAY=delay]                        
               {UNALLOCATE                                             }
               {ALLOCATE                                               }
 
Note: This command requires a /* */ around comments. See System command formats for further information.

Parameters

The parameters for the SETPROG LNKLST command are:
LNKLST
Indicates that an action is to be performed for a LNKLST set. LINKLIST, LINKLST, LNK, or LNKLIST can be specified as an alternative to LNKLST.
DEFINE
Specifies that you want to define a LNKLST set (a set of ordered data sets for the LNKLST concatenation).
NAME=lnklstname
The name of the LNKLST set that you want to specify. Naming conventions are as follows:
  • You can specify from 1 to 16 characters for name.
  • You can use alphanumerics, underscores, periods, and $, #, or @.
  • Do not use imbedded blanks.
  • Do not use the name CURRENT. The system uses CURRENT to mean the current LNKLST set.
  • For all options except TEST, do not use the name IPL. The system uses IPL to mean LNKLST information specified in parmlib member LNKLSTxx. However, you can specify
       SETPROG LNKLST,TEST,NAME=IPL
  • Do not begin the name with SYS. SYS is reserved for IBM® use.
COPYFROM=lnklstname
Specifies the name of an existing LNKLST set from which to initialize the LNKLST set you are defining. If you specify CURRENT for the name, the system uses the current LNKLST set.
NOCHECK
Indicates that the system does not check to determine if the specified LNKLST set contains SYS1.LINKLIB, SYS1.MIGLIB, SYS1.CSSLIB, SYS1.SIEALNKE and SYS1.SIEAMIGE before allocating the LNKLST concatenation.
Note: Use NOCHECK with caution. You might use NOCHECK after you have modified SYS1.LINKLIB and want to compress SYS1.LINKLIB. For a procedure, see the description of the PROGxx NOCHECK parameter in z/OS MVS Initialization and Tuning Reference.
ADD
Indicates that you want to add a data set to the specified LNKLST set.

You cannot add a data set to either the current or the active LNKLST set. If a data set has been migrated, the request waits until the data set is available. For information about the maximum number of data sets you can define to a LNKLST set, see z/OS MVS Initialization and Tuning Reference.

Note that you cannot specify in a SETSSI ADD command a subsystem initialization routine that is added via a SETPROG LNKLST,ADD command. That is because the new LNKLST library will not be picked up until the end of the job that is running. However, the SETSSI command runs in the MASTER ASID, which never ends (until the next IPL). Therefore, the SETSSI command can never pick up a new LNKLST. To correct this problem, you must issue the UPDATE command; however, use caution when you do that. See the UPDATE for considerations and restrictions.

DSNAME=dsname
The 44-character name of a data set or library that you want to add to the specified LNKLST set or delete from the specified LNKLST set. DSN, LIB, and LIBRARY are accepted synonyms for this parameter.

The data set can be a PDS or a PDSE. IBM recommends that you use PDSEs because of the limitations on the number of extents for a LNKLST concatenation. See z/OS MVS Initialization and Tuning Reference.

Data sets to be added can be SMS-managed or non SMS-managed. After the system determines the volume and the SMS status of the data set, the following actions result in an error when the system tries to allocate the LNKLST set:
  • If the data set in the LNKLST set changes status from SMS-managed to non SMS-managed, or from non-SMS managed to SMS-managed.
  • If a non SMS-managed data set in the LNKLST set is deleted and moved to another volume.
In either case, to add the data set after the change has occurred, you must first delete the data set from the LNKLST set and add it again.
VOLUME=volser
Specifies the name of the volume on which the data set resides. The data set must be cataloged. If the volume does not match the name in the catalog, the ADD request fails. The name can be from 1 to 6 characters.

Cataloged data sets must be defined using the standard search order for requests as outlined in the z/OS DFSMS Managing Catalogs. Variations in the standard search order might result in data sets not being found during LNKLST processing.

ATBOTTOM
ATTOP
AFTER=dsname
Indicates where in the LNKLST set you want to place the data set. The default is ATBOTTOM.

ATBOTTOM indicates that you want to place the data set specified on the DSNAME parameter at the bottom of the list of data sets in the LNKLST set.

ATTOP indicates that you want to place the data set specified on the DSNAME parameter at the beginning of the LNKLST set. The system places the LINKLIB, MIGLIB, CSSLIB, LINKLIBE and MIGLIBE data sets in that order at the beginning of every LNKLST set in the LNKLST concatenation. If you use ATTOP, the system always places the data set after the CSSLIB data set.

AFTER =dsname indicates that the system places the data set specified on the DSNAME parameter after the data set specified by dsname. You cannot use this parameter to place a data set after the LINKLIB, MIGLIB, CSSLIB, LINKLIBE, or MIGLIBE data set in the LNKLST set. Instead, use ATTOP if you want to place the data set immediately after the CSSLIB data set.

Default Value: If you omit ATBOTTOM, ATTOP, or AFTER, the system adds the data set to the bottom of the LNKLST set.

CONCAT(CHECK | NOCHECK)
Specifies whether or not to check if the concatenation defined by the LNKLST set is full. The parameter is optional. CONCAT(NOCHECK) is the default.

CONCAT(CHECK) specifies that the system is to check if the concatenation is full. This requires that all data sets in the LNKLST be allocated and concatenated together, and will require more processing time than the default.

CONCAT(NOCHECK), the default option, specifies that the system is not to check whether the concatenation is full. (If the concatenation actually is full, it will be detected when the LNKLST set is activated.)

DELETE
Indicates that you want to delete a data set from the specified LNKLST set.

You cannot delete a data set from either the current or the active LNKLST set.

UNDEFINE
Removes the definition of the LNKLST set specified by NAME=lnklstname from the system. You cannot remove the definition of the current LNKLST set, another LNKLST set that is being actively used by a job or address space, or the LNKLST defined at IPL through LNKLSTxx and the LNK parameter of IEASYSxx. See "Removing or Compressing a Data Set in an Active LNKLST Set" in z/OS MVS Initialization and Tuning Reference for information about LLA management of the LNKLST data set.
TEST
Indicates that you want to locate a specific routine associated with a data set in the LNKLST set. If the system locates the data set, the system indicates the name of the data set. If a data set has been migrated, the request waits until the data set is available.
MODNAME=name
MODNAME specifies the name of a module to be located in the LNKLST set. MODULE and MOD can be used as synonyms for MODNAME.
ACTIVATE
Indicates that you want to activate the specified LNKLST set as the current LNKLST concatenation. When you use SETPROG LNKLST to activate the LNKLST set after IPL, jobs or address spaces that are still active continue to use the previous current LNKLST set. To associate a job in an address space to the current LNKLST set after IPL, see UPDATE. See "Removing or Compressing a Data Set in an Active LNKLST Set" in z/OS MVS Initialization and Tuning Reference for information about LLA management of the LNKLST data set.

If a data set in the LNKLST set has been migrated before the LNKLST set is activated, the request waits until the data set is available.

When the ACTIVATE request completes, the system issues an event (ENF) signal (event code 52). Depending on the options specified in SMFPRMxx, whenever a LNKLST set is activated, the system records SMF record type 90 subtype 29. See SETSMF command.

UPDATE
Indicates that the system is to update an address space so that a specified job or jobs associated with that space can use the current LNKLST set. If the job is using another LNKLST set when the current LNKLST set is activated, it will continue to use the original LNKLST set until it completes operations. When the job completes and restarts, it then uses the data sets defined in the new currently active LNKLST set. See "Removing or Compressing a Data Set in an Active LNKLST Set" in z/OS MVS Initialization and Tuning Reference for information about LLA management of the LNKLST data set.

Be careful when you use UPDATE. Updating an address space while a program in that address space is fetching a module can cause the fetch to fail or to locate an incorrect copy of the module. The system does not attempt to verify the validity of the data for UPDATE.

JOBNAME | JOB=jobname
Specifies the name of the job or jobs to update. You can use wildcard characters (? or *) for jobname. UPDATE updates any job whose name matches the specified criteria. The system compares jobname to the name of any initiated job or jobs that match, or to the name of the address space.
ASID=asid
Specifies the address space id for the job.
DELAY=nn
Indicates the number of seconds to delay the completion of the UPDATE operation.
UNALLOCATE
Indicates that you want to undo all existing allocations obtained while processing active LNKLST sets. This also releases the SYSDSN ENQ.
Note:
  1. Make sure that you do not delete or move the LNKLST data sets while the allocations are not in effect (from the time that you use the UNALLOCATE request until the time that you use the ALLOCATE request).
  2. Once you have completed everything associated with the UNALLOCATE, you must specify LNKLST ALLOCATE to re-obtain the remaining ENQs.
  3. UNALLOCATE does not remove the ENQ of the MASTER address space from the volumes where data sets of the active LNKLST reside. You must either create a new LNKLST or activate a LNKLST without the data sets on that volume. MASTER address space allocation could be caused by data sets in an active but unallocated LNKLST residing on that volume; if the D U,,ALLOC command shows the MASTER address space, check for data sets in the active LNKLST and remove them.
ALLOCATE
Indicates that you want to re-obtain the allocation (and SYSDSN ENQ) for every data set in every active LNKLST.

Examples

  1. Add the data set DATA.SET.A to the LNKLST set MY.LNKLST.SET. The system places the data set after the MIGLIBE data set in the LNKLST set.
    SETPROG LNKLST,ADD,NAME=MY.LNKLST.SET,DSNAME=DATA.SET.A,ATTOP
  2. Change the job MY.JOB to use the current LNKLST set:
    SETPROG LNKLST,UPDATE,JOB=MY JOB