#!/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

lvi=$(lvdisplay -c $dev)
vg=${lvi#*:}
vg=${vg%%:*}
vgsz_le=${lvi#*:*:*:*:*:*:*:*:}
vgsz_le=${vgsz_le%%:*}

vgi=$(vgdisplay -c $vg)
pesz_blk=${vgi#*:*:*:*:*:*:*:*:*:*:*:*:}
pesz_blk=${pesz_blk%%:*}

pesz_by=$(( $pesz_blk * 512 ))

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

if [ $(( $pesz_by % $blksz_by )) != 0 ]; then
	fail "extent size ${pesz}by does not divide block size ${blksz_by}by"
fi

pesz_blk=$(( $pesz_by / $blksz_by ))
vgsz_blk=$(( $vgsz_le * $pesz_blk ))

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