Question & Answer
Why is my SMP/E APPLY or ACCEPT of maintenance to a product failing with GIM23901E and IEW2736S indicating I'm out of directory blocks when the SMP process was not adding new members?
When I look at the SMP CAUSER report, I find messages like this:
CAUSER FMID MESSAGE ID PAGE ERROR DESCRIPTION AND POSSIBLE CAUSES xxxxxxx yyyyyyy GIM23901E 33 LINK-EDIT PROCESSING FAILED FOR MODULE modulename IN LMOD lmodname IN THE zzzzzzzz LIBRARY. THE RETURN CODE WAS 12. THE SEQUENCE NUMBER WAS 000133.
When I go down to page 33 (or whichever page is mentioned in the CAUSER report) I find the reason is that the target dataset has run out of directory blocks:
IEW2736S DA10 THERE IS NO SPACE LEFT IN THE DIRECTORY FOR DDNAME xxxxxxxx. STOW OF THE DIRECTORY ENTRY MEMBER NAME modulename FAILED.
Note: I've received message IEW2736S when applying CICS and CPSM PTFs. But, PTFs for any IBM product could cause this failure if the datasets are allocated with just the minimum directory blocks needed.
The problem may be that you were using all of the existing directory blocks, and the maintenance process updated some of them and the LINKEDIT process had a SETSSI xxxxxxxx parameter. The use of SETSSI introduces 'user data' to the directory entry. That user data for the SETSSI is 4 bytes long. If your directory entries didn't have user data before, but maintenance is adding it, you may need additional directory blocks if you were using all of the existing directory block space.
There is no single PTF that causes this. It may happen at any time, for any PTF you are APPLYing or ACCEPTing. The solution is to either reallocate the dataset with more directory blocks, or change the dataset to be a PDS/E, which is more dynamic in its space use.
To view the data in the directory entries, you can run IEHLIST with the LISTPDS command, as in the following JCL
//STEP1 EXEC PGM=IEHLIST //SYSPRINT DD SYSOUT=* //DD1 DD UNIT=SYSDA,VOL=SER=AAAAAA,DISP=OLD //SYSIN DD * LISTPDS VOL=SYSDA=AAAAAA,DSNAME=my.dataset.name /* //
The listing below shows the output from the LISTPDS command
MEMBERS TTRC VARIABLE USER DATA ---(USER DATA AND TTRC ARE IN HEX) TEMPNAM1 0002ED2C 0000000000 00000002C0 0038B00000 0000288C12 00010000 TEMPNAM2 0002EF2E 0000000000 00000002C0 0038B00000 0000289C12 0000201511 230100
TEMPNAM1 was not linked using SETSSI. TEMPNAM2 was linked with 'SETSSI 20151123'
CICS/TS CICSTS CICS TS CICS Transaction Server
02 December 2015