#!/bin/bash
# usage:
#   remountresizereiserfs /mountpoint

set -e
fail () { echo >&2 "$*"; exit 1; }
case "$#.$1" in 1.[^-]*);; *) fail 'bad usage';; esac

mp=$1

df=`df -P $mp`
dfl2=`printf "%s" "$df" | sed 1d`

case "$dfl2" in
/dev/*" "[0-9]*" "[0-9]*" "[0-9]*" "[0-9]*"% "/*)
	dev=${dfl2%% *}
	mp2=${dfl2##* }
	if [ "x$mp2" != "x$mp" ]; then fail "mountpoint is $mp2 not $mp"; fi
	;;
*)	fail "could not parse df output" ;;
esac

dm=/dev/mapper
case "$dev" in
$dm/*/*)
	fail "too many path segments in mapper device \`$dev'"
	;;
$dm/*)
	lv=${dev#$dm/}
	lv=${lv//--//}
	case "$lv" in
	*-*)	;;
	*)	fail "no single hyphen in mapper device \`$lv'";;
	esac
	vg=${lv%%-*}
	lv=${lv#*-}
	vg=${vg//\//-}
	lv=${lv//\//-}
	devu=/dev/$vg/$lv
	;;
*)
	devu=$dev
esac

lvi=$(lvdisplay -c $devu)
vg=${lvi#*:}
vg=${vg%%:*}
vgsz_kb=${lvi#*:*:*:*:*:*:}
vgsz_kb=${vgsz_kb%%:*}

dbrfs=$(debugreiserfs $dev)
blksz_by=$(printf "%s" "$dbrfs" | egrep '^Blocksize: ' || fail "blocksize?")
blksz_by=${blksz_by#*: }

vgsz_blk=$(dc -e "$vgsz_kb 1024* $blksz_by /p")

echo mount -o remount,resize=$vgsz_blk $mp
