to save some "Read The Source" time, if somebody would tell me,
how much the same is the Coda userspace/kernel protocol
on differnet OS and architectures.
See coda-src/venus/worker.cc:VFSMount.
NetBSD, modern FreeBSD:
error = mount("coda", venusRoot, 0, kernDevice);
Linux:
struct coda_mount_data mountdata;
mountdata.version = CODA_MOUNT_VERSION;
mountdata.fd = worker::muxfd;
error = mount("coda", venusRoot, "coda", MS_MGC_VAL,
islinux20 ? (void *)&kernDevice : (void *)&mountdata);
if (!error) {
FILE *fd = setmntent("/etc/mtab", "a");
struct mntent ent;
if (fd) {
ent.mnt_fsname = "coda";
ent.mnt_dir = venusRoot;
ent.mnt_type = "coda";
ent.mnt_opts = "rw";
ent.mnt_freq = 0;
ent.mnt_passno = 0;
addmntent(fd, &ent);
endmntent(fd);
}
}
So it seems pretty different. But, many things are and you never
notice because Linux emulation on BSD is so well done. It may just be
a matter of putting some glue in the BSD kernel's handling of the
linux mount syscall.
I am unsure of how different the rest of the user/kernel interface is,
but I'd be surprised if a Linux venus worked on BSD without some
effort.
It would be really cool if the coda kernel interface and the arla
kernel interface could be 64-bit-rationalized/merged and there would
be one generic kernel interface for complicated userspace-implemented
filesystems.
--
Greg Troxel <[EMAIL PROTECTED]>