aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2011-01-14 14:10:03 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2011-01-15 20:07:48 -0500
commitea5b778a8b98c85a87d66bf844904f9c3802b869 (patch)
treebaa56cbe1a907d76341f2cad53e16569cc1d3288 /Documentation
parentab90911ff90cdab59b31c045c3f0ae480d14f29d (diff)
Unexport do_add_mount() and add in follow_automount(), not ->d_automount()
Unexport do_add_mount() and make ->d_automount() return the vfsmount to be added rather than calling do_add_mount() itself. follow_automount() will then do the addition. This slightly complicates things as ->d_automount() normally wants to add the new vfsmount to an expiration list and start an expiration timer. The problem with that is that the vfsmount will be deleted if it has a refcount of 1 and the timer will not repeat if the expiration list is empty. To this end, we require the vfsmount to be returned from d_automount() with a refcount of (at least) 2. One of these refs will be dropped unconditionally. In addition, follow_automount() must get a 3rd ref around the call to do_add_mount() lest it eat a ref and return an error, leaving the mount we have open to being expired as we would otherwise have only 1 ref on it. d_automount() should also add the the vfsmount to the expiration list (by calling mnt_set_expiry()) and start the expiration timer before returning, if this mechanism is to be used. The vfsmount will be unlinked from the expiration list by follow_automount() if do_add_mount() fails. This patch also fixes the call to do_add_mount() for AFS to propagate the mount flags from the parent vfsmount. Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/filesystems/vfs.txt23
1 files changed, 14 insertions, 9 deletions
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt
index 3c4b2f1b64d0..94cf97b901d7 100644
--- a/Documentation/filesystems/vfs.txt
+++ b/Documentation/filesystems/vfs.txt
@@ -933,15 +933,20 @@ struct dentry_operations {
933 dynamic_dname() helper function is provided to take care of this. 933 dynamic_dname() helper function is provided to take care of this.
934 934
935 d_automount: called when an automount dentry is to be traversed (optional). 935 d_automount: called when an automount dentry is to be traversed (optional).
936 This should create a new VFS mount record, mount it on the directory 936 This should create a new VFS mount record and return the record to the
937 and return the record to the caller. The caller is supplied with a 937 caller. The caller is supplied with a path parameter giving the
938 path parameter giving the automount directory to describe the automount 938 automount directory to describe the automount target and the parent
939 target and the parent VFS mount record to provide inheritable mount 939 VFS mount record to provide inheritable mount parameters. NULL should
940 parameters. NULL should be returned if someone else managed to make 940 be returned if someone else managed to make the automount first. If
941 the automount first. If the automount failed, then an error code 941 the vfsmount creation failed, then an error code should be returned.
942 should be returned. If -EISDIR is returned, then the directory will 942 If -EISDIR is returned, then the directory will be treated as an
943 be treated as an ordinary directory and returned to pathwalk to 943 ordinary directory and returned to pathwalk to continue walking.
944 continue walking. 944
945 If a vfsmount is returned, the caller will attempt to mount it on the
946 mountpoint and will remove the vfsmount from its expiration list in
947 the case of failure. The vfsmount should be returned with 2 refs on
948 it to prevent automatic expiration - the caller will clean up the
949 additional ref.
945 950
946 This function is only used if DCACHE_NEED_AUTOMOUNT is set on the 951 This function is only used if DCACHE_NEED_AUTOMOUNT is set on the
947 dentry. This is set by __d_instantiate() if S_AUTOMOUNT is set on the 952 dentry. This is set by __d_instantiate() if S_AUTOMOUNT is set on the