/* process a list of expirable mountpoints with the intent of discarding any submounts of a specific parent mountpoint  */
static void shrink_submounts(struct vfsmount *mnt, struct list_head *umounts)
/* process a list of expirable mountpoints with the intent of discarding any submounts of a specific parent mountpoint  */
static void shrink_submounts(struct vfsmount *mnt, struct list_head *umounts)
{
	LIST_HEAD(graveyard);
	struct vfsmount *m;
	while (select_submounts(mnt, &graveyard)) {
		while (!list_empty(&graveyard)) {
			m = list_first_entry(&graveyard, struct vfsmount,
						mnt_expire);
			touch_mnt_namespace(m->mnt_ns);
			umount_tree(m, 1, umounts);
		}
	}
}