HAMMER and NFS?

Matthew Dillon dillon at apollo.backplane.com
Fri Jul 18 19:19:23 PDT 2008


:Hi.
:Do you have some known limitation(or bugs) related to NFS-exporting of
:HAMMER filesystem?  I've been playing with /etc/exports so as I can
:upgrade my router to 2.0, and found something strange:
:
:- can't NFS-mount an exported directory inside a HAMMER filesystem,
:  only root directory can be NFS-mounted (no errors from mountd though)

    This should work.  Does your /etc/exports line include -alldirs ?

:- can't NFS-mount an exported pseudofs (Permission denied), or
:  NFS-mount a pseudofs inside an exported HAMMER filesystem
:  (again, no errors from mountd)
:..
:- I can mount it read-only, but accessing a pfs gives me `File too large'
:  that is:

    Both of these are the same problem.  Definitely a bug... I think it's
    just that I am not storing the correct value for the st_size field of
    the PFS softlink.  PFS softlinks are special, HAMMER expands them in
    place to a full transaction id + PFS format.  So the readlink()
    returns a string with a different size then stat shows in st_size.
    NFS is probably depending on st_size being correct.

    However there is a secondary issue here which you have to be aware
    of.  Once I do fix this, exporting PFS SLAVES will still require -alldirs
    and it also means that whenever someone does a mount of a slave, they
    will actually be mounting a snapshot.  That snapshot is just that, a
    snapshot.  If the slave is updated, the mount will still depict the
    snapshot as of the original mount.  The NFS client will have to umount
    and re-mount that NFS mount to sync with the latest snapshot.  There is
    no way around that, the snapshot transaction id is actually part of
    the file-handle structure NFS uses to keep track of the mount.

:  lrwxr-xr-x  1 root  wheel  3 Jul 19 09:36 /mnt/symlink -> foo
:  # ls -dlL /mnt/symlink
:  drwxr-xr-x  1 root  wheel  0 Jul 19 09:35 /mnt/symlink
:  # umount /mnt
:  # mount 127.0.0.1:/HAMMER /mnt
:  # ls -l /mnt
:  total 0
:  drwxr-xr-x  1 root  wheel   0 Jul 19 09:35 foo
:
:  ls: /mnt/obj: File too large
:  lrwxr-xr-x  1 root  wheel  10 Jul 18 12:31 obj
:  lrwxr-xr-x  1 root  wheel   3 Jul 19 09:36 symlink -> foo
:
:Thanks.

    Ok, I know what this is.  The mtime of the directory is not being
    updated by file/link creation, so NFS does not know that it must throw
    away its directory cache.  I'll fix this tonight too.

    Nice catches!

					-Matt
					Matthew Dillon 
					<dillon at backplane.com>





More information about the Kernel mailing list