/* get the next mount in the propagation tree. @m: the mount seen last @origin: the original mount from where the tree walk initiated  */
static struct vfsmount* propagation_next(struct vfsmount *m, struct vfsmount *origin)
/* get the next mount in the propagation tree. @m: the mount seen last @origin: the original mount from where the tree walk initiated  */
static struct vfsmount* propagation_next(struct vfsmount *m, struct vfsmount *origin)
{
	if (!IS_MNT_NEW(m) && !list_empty(&m->mnt_slave_list))
		return first_slave(m);
	while (1) {
		struct vfsmount *next;
		struct vfsmount *master = m->mnt_master;
		if (master == origin->mnt_master) {
			next = next_peer(m);
			return ((next == origin) ? NULL : next);
		} else if (m->mnt_slave.next != &master->mnt_slave_list)
			return next_slave(m);
		m = master;
	}
}