/* check if the mount 'mnt' can be unmounted successfully. @mnt: the mount to be checked for unmount NOTE: unmounting 'mnt' would naturally propagate to all other mounts its parent propagates to. Check if any of these mounts that  */
int propagate_mount_busy(struct vfsmount *mnt, int refcnt)
/* check if the mount 'mnt' can be unmounted successfully. @mnt: the mount to be checked for unmount NOTE: unmounting 'mnt' would naturally propagate to all other mounts its parent propagates to. Check if any of these mounts that  */
int propagate_mount_busy(struct vfsmount *mnt, int refcnt)
{
	struct vfsmount *m, *child;
	struct vfsmount *parent = mnt->mnt_parent;
	int ret = 0;
	if (mnt == parent)
		return do_refcount_check(mnt, refcnt);
	if (!list_empty(&mnt->mnt_mounts) || do_refcount_check(mnt, refcnt))
		return 1;
	for (m = propagation_next(parent, parent); m;
	     		m = propagation_next(m, parent)) {
		child = __lookup_mnt(m, mnt->mnt_mountpoint, 0);
		if (child && list_empty(&child->mnt_mounts) &&
		    (ret = do_refcount_check(child, 1)))
			break;
	}
	return ret;
}