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. -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html