z/OS message

IEC030I: B37 abend, out of space at end of volume

IEC030I means a data set filled the space it had on a volume, z/OS couldn't give it another extent or move it to another volume, and the step ended with system abend B37. Return code 04 covers nearly every real case.

Other names for this code

Also written as IEC030I B37-04, B37-04, abend B37, SB37, IEC030I, B37 abend out of space, system abend B37.

What it means

When a program writes a sequential or partitioned data set and fills the space it has on the current volume, z/OS runs end-of-volume processing. It tries to add another extent on the same volume, using the secondary amount from the SPACE parameter. If that isn't possible, it tries to move on to the next volume. If neither works, it writes IEC030I and ends the step with system abend B37.

The message gives, in order, the abend and return code (such as B37-04), the module that found the problem, the job name, step name and DD name, the device number, the volume serial, a DADSM extend diagnostic code when one is available, and the data set name with any member. A hyphen and a number after the DD name mean the failing data set was in a concatenation and wasn't the first one.

Return code 04 is the one you will see almost every time. It means the data set needed more room and couldn't get it. The volume may be full, the data set may have reached its extent or track limit on the volume, the VTOC may be full, or no further volume was available. Return code 08 means z/OS tried to extend onto a volume whose VTOC is in a VSE or DIRF state that it couldn't convert to standard format. Return code 0C means the device already had 127 users, the maximum.

IEF450I follows with ABEND=SB37 and the return code in its REASON field. D37 (IEC031I) and E37 (IEC032I) are close relatives with narrower causes.

Common causes

  • The data set used its primary space and all the secondary extents it could get on the volume. A basic-format sequential or partitioned data set can have at most 16 extents on one volume, so a small secondary amount runs out quickly.
  • The volume itself filled up, and the data set wasn't allowed to continue on another volume.
  • The data set reached 65,535 tracks on one volume, the limit for a basic-format data set.
  • The VTOC on the volume is full, so no new extent can be recorded.
  • The input grew. A job sized years ago now writes more records than its SPACE parameter allows for.
  • A program loop wrote the same records again and again until the space ran out.
  • Rarely, return code 08 (a volume with a VSE or DIRF VTOC that couldn't be converted) or 0C (127 users on the device).

How to find the problem

  1. In SDSF, open the job's JESYSMSG and find IEC030I. Note the return code, the DD name, the volume serial and the data set name.
  2. Look up the data set in ISPF option 3.4 and use the I line command. It shows the space allocated and used, the number of extents and the volume. If it shows 16 extents, the extent limit was the cause.
  3. Find the DD statement for that DD name in the step's JCL (the JESJCL listing shows procedures expanded). Compare the SPACE amounts with the number of records the step wrote, from the program's counts or a previous good run.
  4. If the data set is SMS-managed, ask the storage team how full the storage group is and what volume count the data class allows. Give them the DADSM diagnostic code from the message if it is present.
  5. If the output is far larger than usual, check the program for a loop before adding space.

How to fix it

  • Ask for more space. Raise the secondary amount, the primary amount or both, and use cylinders for large files, for example SPACE=(CYL,(50,25),RLSE). RLSE gives back what isn't used when the data set is closed.
  • Let the data set spread across volumes with a volume count, such as VOL=(,,,3), or ask for a data class that allows more volumes.
  • For very large sequential files, use DSNTYPE=LARGE or an extended-format data class. LARGE removes the 65,535-track limit on one volume, and extended format also allows more extents per volume.
  • Before rerunning, delete the partial output if the step kept it. Otherwise the rerun may fail with a duplicate data set name.
  • If a loop caused it, fix the program. More space only delays the failure.

IBM documentation

IBM documentation: IEC030I. Use the documentation for your installed release.

Report a correction to WND Software.

Questions

What is the difference between B37, D37 and E37?

All three mean a data set ran out of space. D37 says there was no secondary amount to extend with. E37 says space ran out on every volume the data set could use. B37 covers the other end-of-volume failures, and the three overlap, so read the return code in the IEC message too.

Why did it fail when the volume still has free space?

The data set may already have 16 extents on the volume, or the free space may be in pieces too small for the secondary amount. Either way z/OS can't add an extent, even though the volume isn't full.

Does RLSE prevent a B37?

No. RLSE only releases unused space when the data set is closed. It doesn't give a running step any extra room.