What is ENOANO (No Anode) intended to be used for?

ENOANO appeared in Linux 0.97, which was released on 1992-08-01. For a very long time, it wasn't used anywhere; it's since then been used now and then in some drivers as “I didn't know what error code to use”. It's now only in uapi/asm-generic/errno.h (i.e. in the header files for userland programs), but it was moved there automatically, so that's no indication of whether anybody cares about it.

The errno.h header in 0.97 got some attention because it is one of the files that SCO claimed was copied from Unix SVR4. At the time of the SCO claims, Linus Torvalds didn't remember how that file had been assembled; he later found that it had been generated from values known by libc 2.2.2. This was a C library for Linux, distributed with a port of GCC for Linux. That library would probably have included error codes from all kinds of unix variants that were around at the time.

Stéphane Chazelas found that the term “anode” was used in Convergent/Burroughs Unix (CENTIX) as a synonym of inode. I found another book (from 1993) mentioning “anode” as a variant of “inode”, but other than that, it seems to have been pretty obscure even then. The Solaris errno.h confirms the Convergent origin: it lists ENOANO in a section titled “Convergent Error Returns” (together with a few other error codes with esoteric descriptions but at least vaguely comprehensible like “invalid exchange”, “exchange full” or “invalid slot” which a few more drivers use).

So ENOANO probably indicated that either the kernel had run out of memory for inodes, or that the filesystem's inode table was full, in some commercial Unix in the 1980s. That Unix is now forgotten, its terminology is now forgotten, and due to some quirk the error code has stayed around.

At least it's not “lp0 on fire”.