Subject: removal of pre-realms coda support?
To: None <tech-kern@NetBSD.org>
From: Greg Troxel <gdt@NetBSD.org>
List: tech-kern
Date: 03/15/2006 21:07:01
I've been working to make coda work reliably again, and noticed that
our kernel support has ifdefs for supporting an old interface.  I'd
like to remove the ifdefs, so that -current will only support the
current interface, in order to remove clutter.  My view is that no one
would be harmed by removing the compatibility support, no one is
reasonably using it, and that very likely no one is using it at all.

details:

coda (http://www.coda.cs.cmu.edu/) is a distributed filesystem, derived
from AFS, that supports disconnected operation.  Clients run a program
"venus" which stores cached copies of files in a regular filesystem,
and makes those available via the coda kernel interface (in
src/sys/coda/*).

Over time, coda has used several variations of the venus/kernel
interface.  Until a few years ago, both venus and the interface
supported using files from only a single "realm", or administrative
group of servers.  With the release of Coda 6 in May of 2003, venus
supported multiple realms at once, and the venus/kernel interface was
extended to include a realm identifier (as an opaque member).  Also, a
complicated credentials structure was replaced with a single uid_t.
The following is abstracted from the .h:

#ifdef CODA_COMPAT_5

typedef struct {
    u_long Volume;
    u_long Vnode;
    u_long Unique;
} CodaFid;

#else

/* modern definition */

typedef struct {
    u_int32_t opaque[4];
} CodaFid;

#endif


Removing CODA_COMPAT_5 would mean that venus programs from before May,
2003. could not be run, even if the kernel were compiled with the
option.  Coda has had vast numbers of bugfixes since then, and the old
version is not maintained.  The venus/kernel interface is specifically
for venus, and is not used by any other programs (other than a test
driver for it).  My estimate for the number of systems running coda-5
binaries and -current kernels is zero.  (Building coda from CVS is not
hard.)

1.6 has the version 5 venus/kernel interface, and 2.0 and later have
the version 6 interface.

There is a further wrinkle in coda ABI compatibility, which is that
the ino_t change to 64 bits changed the kernel/venus ABI.  Versioning
this and handling compatibility is non-trivial because the version
number space is multi-platform, changes in the sizes of built-in types
were not contemplated, and coda does not build against installed
kernel headers for these interfaces.  While I'm not at all opposed to
someone fixing this I believe the effort would be far better spent
elsewhere, so I won't.  The current situation is that a venus built on
3.0 won't work on current.  But, running coda is still hard enough
that this is a minor issue.

Does anyone besides Brett, Phil and I use coda on NetBSD?

Are there any objections to removing CODA_COMPAT_5?

    Greg