File status 90: Unclassified error, no further information
File status 90 is IBM's general error status with no further information. An input-output statement failed for a reason that has no more specific status, so the real cause is in the VSAM return code area or the system messages.
Other names for this code
Also written as FS 90, file status code 90, COBOL status 90, VSAM status 90, status key 90, SK90.
What it means
Codes from 90 up are implementor-defined, which means IBM chose them rather than the COBOL standard. Status 90 is the least specific of them. The statement failed and the runtime had no better code to give.
For VSAM, a 90 usually means VSAM returned a code that COBOL doesn't translate into one of the standard statuses. The reason is in the second status area, data-name-8 of the FILE STATUS clause, which holds the VSAM return code, function code and feedback code. Without that area, 90 tells you very little. For QSAM, IBM points you to the DFSMS message issued for the failure, which is in the job log near the COBOL messages.
In a multithreaded program, IBM also uses 90 when a CLOSE of a QSAM or VSAM file is issued on a thread other than the one that opened it. Under the older CMPR2 behavior 90 covered more cases, including what Enterprise COBOL now reports as 35 and 37. Some old runtime defects also reported a record format mismatch as 90 instead of 39 (IBM APAR PN20128 describes one).
Common causes
- A VSAM logical or system error that has no standard COBOL status. The feedback code in data-name-8 names it.
- A QSAM failure that DFSMS reports with its own message.
- A CLOSE from a thread that didn't open the file, in a multithreaded program.
- An old program or runtime level that still reports some OPEN failures as 90.
How to find the problem
- Add the VSAM return code area to the FILE STATUS clause if it isn't there, as in
FILE STATUS IS WS-FS WS-VSAM-RC. WS-VSAM-RC is a 6-byte group of three 2-byte binary fields. DISPLAY all three after the failure. - Look up the codes in IBM's DFSMS Macro Instructions for Data Sets. Return code 8 is a logical error and 12 a physical error. OPEN errors use their own table of error codes.
- Check the job log and SYSLOG for IEC messages, such as IEC161I for VSAM OPEN problems, issued for the same ddname at the same time.
- Check whether the program runs with POSIX threads, if the 90 came from a CLOSE.
How to fix it
- Fix the underlying problem the VSAM codes or DFSMS message point to. 90 itself has no single fix.
- Close files on the same thread that opened them.
- Keep data-name-8 in every VSAM SELECT, so the next unusual failure explains itself.
- Apply current runtime maintenance if an old defect is mapping a known condition to 90.
IBM documentation
IBM Enterprise COBOL documentation. Use the documentation for your installed release.
This link opens the relevant IBM reference library or lookup instructions. Match the complete code and your installed product release; it is not a code-specific review.
Related codes
Questions
Why does my program only show status 90?
Because the FILE STATUS clause has no second data name. Add the 6-byte VSAM return code area and display it after the failure.
What is the difference between 90 and 30?
30 is a permanent error, usually physical. 90 is a general code for failures that don't fit any standard status.