| NFS exporting is supported in Linux kernels 2.6.27 or later. |
| |
| You need to add an fsid=NNN option to /etc/exports to make exporting a |
| FUSE directory work. |
| |
| Filesystem support |
| ------------------ |
| |
| NFS exporting works to some extent on all fuse filesystems, but not |
| perfectly. This is due to the stateless nature of the protocol, the |
| server has no way of knowing whether the client is keeping a reference |
| to a file or not, and hence that file may be removed from the server's |
| cache. In that case there has to be a way to look up that object |
| using the inode number, otherwise an ESTALE error will be returned. |
| |
| 1) low-level interface |
| |
| Filesystems need to set FUSE_CAP_EXPORT_SUPPORT in conn->wants and |
| implement special lookups for the names "." and "..". The former may |
| be requested on any inode, including non-directories, while the latter |
| is only requested for directories. Otherwise these special lookups |
| should behave identically to ordinary lookups. |
| |
| Furthermore, setting FUSE_CAP_EXPORT_SUPPORT requires the file system |
| to handle node-ids (fuse_ino_t) that the file system may does not know |
| about - e.g. a fuse FORGET request might have been received or the node-id |
| was used in a previous instance of the file system daemon. The node-id might |
| not be valid at all when an invalid handle is passed to open_by_handle_at(). |
| This implies that the filesystem *must not* reuse node-ids even if |
| generation numbers are set correctly. This is because generation numbers |
| are not provided by the kernel to e.g. the getattr() handler, so the |
| handler would be unable to tell if the provided node-id refers to the |
| "known" current one, or a previous one that has been forgotten and re-used. |
| |
| 2) high-level interface |
| |
| Because the high-level interface is path based, it is not possible to |
| delegate looking up by inode to the filesystem. |
| |
| To work around this, currently a "noforget" option is provided, which |
| makes the library remember nodes forever. This will make the NFS |
| server happy, but also results in an ever growing memory footprint for |
| the filesystem. For this reason if the filesystem is large (or the |
| memory is small), then this option is not recommended. |