Re: silent semantic changes with reiser4

Jamie Lokier
2004-09-01T16:14:56Z

Pavel Machek wrote:
> > It's not about the kernel, it's about the interface. And see my other mail:
> > cat foo.zip/README
> > less foo.zip/contents/bar.c
> > is a lot easier than
> > lynx http://google.com/search?q=zip
> > emerge zip
> > man zip
> > unzip foo.zip
> > cat bar.c
> > which already assumes quite a lot of expertise.
>
> If you only want nice user interface, you can have that today. Its
> done using coda, and hosted at uservfs.sf.net.

Can I do these already using uservfs?

cd
less foo.zip/contents/bar.c
less /usr/portage/distfiles/perl-5.8.5.tar.gz/contents/toke.c
grep -R obscure_label ~/RPMS

No I can't.

Even using the right "#" names for uservfs ('foo.zip#zip' etc.), I can
only do the above with convenient paths, completion etc. if I mount my
home directory and distfiles over uservfs, so that all I/O in those
directories including ordinary accesses is through uservfs, and have
the _real_ storage elsewhere. That's quite illogical, cumbersome to
set up, and slows down normal I/O significantly.

I can do some of those things in a similar way if I do them inside
Midnight Commander, Gnome, KDE, or Emacs -- but even then a path that
works in one of those doesn't work in another, and the extensions
don't even work in all programs, plugins or scripts for those systems.

As we're adding file-as-directories to VFS, I propose it would be good
to have *hooks* in place, and non-metadata namespace reserved inside
the directories, so that uservfs-like userspace filesystems can
be auto-mounted at those places and synchronised with the file.

In other words, something that makes the next version of uservfs a
whole lot more useful.

The good news is that a lot of the hooks are falling into place already.

Kernel support is needed to handle the interface, cacheing to trigger
deletions, page cacheing so that I/O is a normal speed and mmap()
works, moveable mounts so that renames work and the cached data
followed them, and coherency so that if the underlying archive is
changed, it invalidates cached data with the appropriate degree of
synchronisation. Note that the current dnotify cannot provide the
latter with any strength; it's too weak an interface (so is inotify).
(You can omit a lot of these things, but then you get a flaky interface).

The FUSE project looks like it will provide an efficient interface to
the page cache, avoiding round trips where possible and supporting
mmap. If it doesn't, it should. (Similar VFS facilities are useful
for distributed filesystems). The presently discussed file-as-directory
semantics will provide a nice view, and force the necessary minimal
tool changes, so _all_ tools will be fine with the new uservfs.

So all I am asking for is a facility to auto-mount with
file-as-directory, and the ability for a userspace daemon to be
notified of regular file modifications synchronously. Both can be
added later, once file-as-directory and moveable mounts are
established. (fcntl leases and dnotify _almost_ provide this, but
they don't. Looks like incoherent hacks keep getting added all over
the place for Samba... :).

That's all. Kernel space needs to provide very little that it doesn't
already provide, for this rather nice and universally usable feature to work.

-- Jamie