#!/bin/bash

# lookup all mount namespaces and find processes that use them
echo "Looking for mount namespaces in use"
for MOUNT_NS in `readlink /proc/*/ns/mnt | sort | uniq`; do
	PID_LIST=`ls /proc/*/ns/mnt | xargs readlink -f | grep -F $MOUNT_NS | awk -F/ '{ print $3 }'`

	echo "Looking for pids using mount namespace $MOUNT_NS"
	for PID in $PID_LIST; do
		COMMAND=`ps --no-headers p $PID -o args`
		echo "Checking mount namespace for pid $PID ($COMMAND)"

		MOUNTS=`(nsenter -m -t $PID findmnt -l) | awk '{ print $1 }' | grep 'schroot/mount'`
		MOUNTS=`echo $MOUNTS | awk 'BEGIN { RS=" "; } { print length($0) " " $0; }'| sort -r -n | cut -d ' ' -f 2-`
		if  [ -n "$MOUNTS" ]; then
			echo " * found stale schoot mounts in mount namespace $MOUNT_NS"

			for MOUNT in $MOUNTS ; do
				echo " * unmounting $MOUNT"
				nsenter -m -t $PID umount $MOUNT
			done
		else
			# if this process in $MOUNT_NS does not contain stale schroot
			# mounts, next one won't either
			break
		fi
	done

	echo
done

echo "Removing all schroot sessions"
for SESSION in `schroot -l --all-sessions`; do
	echo " * removing session $SESSION"
	schroot -e -c $SESSION
done
