On Wed, Nov 12, 2008 at 2:13 PM, <[EMAIL PROTECTED]> wrote: > stat(5) specifies exclusive-access files, which we do use for locking. > In what sense is that not `doing locking'? It's not POSIX byte-range > read- or write-locking per fcntl, but it's not clear to me how often > that's actually useful. In quite a few situations, having a single > process directly access a resource and forcing all other accesses > through that process suffices.
For special purposes, the canonical solution is probably just to have a ctl file that accepts commands to manipulate locks. It's a bit of a protocol dance in the sense of the calling program having some smarts about what order it does things in, but wouldn't require changes to 9P proper. I recall when we were talking about adding a Tflush message around the time of 9P2000 and Rob or Russ or someone saying, "that's really the job of a fileserver." I didn't fully appreciate what they meant at that time, thinking solely in terms of disk-based "file servers" (instead of the more abstract notion of a fileserver as a collection of related resources with well-defined operations on them) like kenfs, but it dawned on me (much) later that they were just referring to some sort of ctl file and a command along the lines of "sync <fid>". Locking is a natural abstraction of that kind of thing; it could easily be abstracted into a library function that does the right thing, much as dial() does. The one change I wish we could make to 9P is to extend stat and wstat with a version field, so I could pass domain specific information over 9P. As a stupid example, combining that with some sort of translator, I could define a DECnet service that let me manipulate all the VMS and TOPS-20 specific fields and extended file attributes from those worlds, but from Plan 9. All of a sudden, I have access to a versioned filesystem living under VMS on Itanium. Not that anyone would WANT to do such a thing, but it was a simple example that just popped into my head. Perhaps a more realistic idea would be assuming the functionality of the 9P2000.u protocol (which I don't know much about; the Marines have been keeping me away from Plan 9 for quite some time now, but as I understand it, it mainly extends 9P to deal with symlinks for Unix support). I can't really think of anything you couldn't do with that change and an appropriately designed ctl interface. But then again, I've been out of the game for a little while. - Dan C.