On Fri, Jan 14, 2011 at 05:26:09PM +0000, David Howells wrote:
> 
> 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.

Yechh...  I'd rather take mntput_long() (yuck) out into callers (all two
of them) and lose the extra mntget/mntput in follow_automount().

> This patch also fixes the call to do_add_mount() for AFS and CIFS to propagate
> the mount flags from the parent vfsmount.

CIFS actually used to be OK; that breakage was introduced earlier in the
series.  AFS was broken wrt flags.  I'll fix the CIFS patch and adjust
that one accordingly.

_______________________________________________
autofs mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/autofs

Reply via email to