#!/usr/bin/bash
# Copyright (c) 2017, Parallels International GmbH. All rights reserved.
# Copyright (c) 2017-2021 Virtuozzo International GmbH. All rights reserved.
#
ctid=
SYSFSDEV=/sys/fs/cgroup/devices/machine.slice

eval $(. /etc/vz/vz.conf && echo ON_VE_FSERROR="${ON_VE_FSERROR}")

[ "$ON_VE_FSERROR" = "stop" ] || exit

read -r DEV < /sys/class/block/$ID/dev
[ -z "$DEV" ] && exit 0

if [ -d $SYSFSDEV ]; then
	# cgroup-v1 case
	for d in `ls -1 $SYSFSDEV`; do
		[ -d "$SYSFSDEV/$d" ] || continue
		if grep "b $DEV r" $SYSFSDEV/$d/devices.list; then
			ctid=$d
			break;
		fi
	done
else
	PLOOP_NAME="$(cat /sys/class/block/$ID/dm/name)"
	PLOOP_NAME="${PLOOP_NAME%p*}"
	DISK_FILE="$(ploop list | awk -v n="$PLOOP_NAME" '$1 == n {print $2}')"
	if [ "$(basename $DISK_FILE)" = "root.hds" ]; then
		# Ploop format - disk inside directory
		PRIV_PATH="$(dirname $(dirname $DISK_FILE))"
	elif [ "$(basename $DISK_FILE)" = "root.hdd" ]; then
		PRIV_PATH="$(dirname $DISK_FILE)"
	else
		exit 0
	fi

	ctid="$(vzlist -Ho private,ctid | awk -v n="$PRIV_PATH" '$1 == n {print $2}')"
fi

echo "`date --iso-8601=seconds` fserror : Container $ctid : fserror on $ID/$DEV" >> /var/log/vzctl.log
[ -z "$ctid" ] && exit 0

/usr/sbin/vzctl stop $ctid --fast >/dev/null 2>&1
