S837: End-of-volume error, often too few volumes
An S837 abend means an error occurred during end-of-volume processing for a sequential data set. The common case is 837-08, where the data set needed another volume and the DD statement's volume list or volume count didn't allow one. Message IEC028I gives the details.
Other names for this code
Also written as 837, S837-08, 837-08, S837-04, abend 837, system abend 837, IEC028I 837.
What it means
When a sequential data set fills a tape, or input reaches the end of the current volume, end-of-volume (EOV) processing moves the data set to its next volume. To do that, the system needs another volume serial from the DD statement or the catalog, or room in the volume count to ask for a scratch volume. If it can't carry on, it issues message IEC028I and ends the step with system completion code 837.
The return codes are these.
837-08means EOV couldn't find another volume. Every volume serial on the DD was used and the volume count didn't allow more. It can also follow OPEN TYPE=J when the program changed the volume serials, or a label anomaly exit that supplied a volume the system couldn't use.837-04means the density in the DCB isn't supported by the tape drive.837-0Cmeans the next volume was mounted, but another data set was already using it.837-10and837-14are recording mode problems. The drive doesn't support the mode, or the tape would break the single recording mode rules.
S837 belongs to EOV for any sequential data set, but tape is where you'll usually see it. A disk data set that runs out of room usually gets B37, D37 or E37 instead.
Common causes
- A tape output data set needed more volumes than its volume count allows. Without a volume count, a nonspecific tape request can extend to five volumes, so a file that suddenly needs a sixth fails with 837-08.
- The DD statement lists specific volumes with VOL=SER, and the data needs more volumes than are listed.
- The next volume mounted was still in use by another data set (837-0C).
- A hard-coded density or recording mode doesn't match the allocated drive (837-04, 837-10).
How to find the problem
- Find IEC028I in the job log. It has the form
IEC028I 837-rc,.mod, jobname, stepname, ddname, dev, volser, dsname - Count the mount and IEC705I tape-on messages for that DD in the job log to see how many volumes the data set used before it failed.
- Check the DD statement's VOL parameter for a volume count, which is the fourth value in
VOL=(,,,n), and for any VOL=SER list. - Compare record counts with earlier runs. A sudden jump in the number of volumes usually means the input grew.
How to fix it
- Give the output DD a volume count large enough for the data, for example
VOL=(,,,10), and rerun the step. - Refer to cataloged data sets by name instead of with a fixed VOL=SER list, so the system knows every volume.
- Use higher-capacity media, a larger block size or tape compaction so the data fits on fewer volumes.
- For 837-04 and 837-10, remove hard-coded density or recording mode settings, or ask for a unit that supports them.
What it looks like
IEC028I 837-08,IFG0554A,PAYRUN01,STEP050,TAPEOUT,0B41,PR4421,PROD.PAYROLL.ARCHIVE IEA995I SYMPTOM DUMP OUTPUT SYSTEM COMPLETION CODE=837 REASON CODE=00000008 IEF450I PAYRUN01 STEP050 - ABEND=S837 U0000 REASON=00000008
IBM documentation
IBM z/OS: 837. Use the documentation for your installed release.
Related codes
Questions
How many volumes can a tape data set use?
It depends on the volume count. Without one, the system allows up to five volumes for a nonspecific tape request. Code a volume count in the VOL parameter when you expect more.
Is S837 a space problem?
In a way. The data set needed more room than the allowed volumes gave it. On disk the same kind of shortage is usually reported as E37.