[ -d /r ] && R=/r
PORTALS=$SRCDIR../../portals
-LUSTRE=$SRCDIR../../lustre
+LUSTRE=$SRCDIR..
PTLCTL=$PORTALS/linux/utils/ptlctl
DBGCTL=$PORTALS/linux/utils/debugctl
[ "$MODULE" ] || fail "usage: $0 <module>"
[ -f $MODULE ] || echo "$0: module '$MODULE' not found" 1>&2
lsmod | grep -q "\<$BASE\>" && return 0
- insmod $MODULE
+ insmod $MODULE
+}
+
+do_rmmod() {
+ MODULE=$1
+ [ "$MODULE" ] || fail "usage: $0 <module>"
+ lsmod | grep -q $MODULE || return 0
+ rmmod $MODULE || lsmod | sed "s/^/$MODULE failed: /"
}
# Return the next unused loop device on stdout and in the $LOOPDEV
fi
# Enable hash-indexed directories for extN filesystems
- [ "$1" = "extN" ] && echo "feature FEATURE_C5" | debugfs -w $2
+# [ "$1" = "extN" ] && echo "feature FEATURE_C5" | debugfs -w $2
}
# Set up to use an existing filesystem. We take the same parameters as
[ -z "$OSC_RSH" ] && OSC_RSH="eval"
}
+setup_variables() {
+ [ -z "$OSTNODE" ] && OSTNODE=$SERVER
+ [ -z "$MDSNODE" ] && MDSNODE=$SERVER
+
+ if [ -z "$DLM" ]; then
+ if [ "$LOCALHOST" == "$SERVER" ]; then
+ DLM=localhost
+ else
+ DLM=$SERVER
+ fi
+ fi
+}
+
setup_portals() {
if grep -q portals /proc/modules; then
echo "$0: portals already appears to be set up, skipping"
exit -1
fi
- [ -z "$OSTNODE" ] && OSTNODE=$SERVER
-
- if [ -z "$DLM" ]; then
- if [ "$LOCALHOST" == "$SERVER" ]; then
- DLM=localhost
- else
- DLM=$SERVER
- fi
- fi
+ setup_variables
[ -c /dev/portals ] || mknod /dev/portals c 10 240
$PTLCTL <<- EOF
setup $NETWORK
mynid $LOCALHOST
- connect $SERVER $PORT
- add_uuid self
- add_uuid mds
+ connect $MDSNODE $PORT
+ add_uuid $MDSNODE
connect $OSTNODE $PORT
- add_uuid ost
+ add_uuid $OSTNODE
connect $DLM $PORT
- add_uuid ldlm
+ add_uuid $DLM
+ add_uuid self
quit
EOF
}
do_insmod $LUSTRE/mds/mds_extN.o || \
echo "info: can't load mds_extN.o module, needs extN.o"
do_insmod $LUSTRE/obdecho/obdecho.o || exit -1
- do_insmod $LUSTRE/obdext2/obdext2.o || exit -1
+ #do_insmod $LUSTRE/obdext2/obdext2.o || exit -1
do_insmod $LUSTRE/obdfilter/obdfilter.o || exit -1
do_insmod $LUSTRE/ost/ost.o || exit -1
do_insmod $LUSTRE/osc/osc.o || exit -1
do_insmod $LUSTRE/mdc/mdc.o || exit -1
+ do_insmod $LUSTRE/lov/lov.o || exit -1
do_insmod $LUSTRE/llite/llite.o || exit -1
+ echo "$R/tmp/lustre-log" > /proc/sys/portals/debug_path
list_mods
if $OBDCTL name2dev RPCDEV > /dev/null 2>&1; then
$OBDCTL <<- EOF || return $?
newdev
- attach mds MDSDEV
+ attach mds MDSDEV MDSUUID
setup ${MDS} ${MDSFS}
quit
EOF
}
+setup_mds_lov() {
+
+ [ "$SETUP_MDS" = "y" ] || return 0
+
+ if [ -z "$LOVUUID" ]; then
+ echo "No LOV configured"
+ return
+ fi
+
+ $OBDCTL <<- EOF || return $?
+ name2dev MDSDEV
+ connect
+ lovconfig ${LOVUUID} 1 4096 0 OSCUUID
+ disconnect
+ quit
+ EOF
+}
+
+
setup_ost() {
[ "$SETUP_OST" = "y" ] || return 0
$OBDCTL <<- EOF || return $?
newdev
- attach ${OSTTYPE} OBDDEV
+ attach ${OSTTYPE} OBDDEV OBDUUID
setup ${OBD} ${OBDARG}
quit
EOF
$OBDCTL <<- EOF || return $?
newdev
- attach ost OSTDEV
+ attach ost OSTDEV OSTUUID
setup \$OBDDEV
quit
EOF
}
setup_server() {
- setup_mds $1 && setup_ost $1
+ setup_mds $1 && setup_mds_lov $1 && setup_ost $1
}
setup_osc() {
+ set -vx
[ "$SETUP_OSC" != "y" ] && return 0
+ [ "$OSC_NAMES" ] || OSC_NAMES=OSCDEV
- if $OBDCTL name2dev OSCDEV > /dev/null 2>&1; then
+ for THEOSC in $OSC_NAMES ; do
+ OSCDEVNO=`find_devno $THEOSC`
+ if $OBDCTL name2dev $THEOSC > /dev/null 2>&1; then
echo "$0: OSCDEV is already configured"
return 0
+ fi
+
+ $OBDCTL <<- EOF || return $rc
+ newdev
+ attach osc $THEOSC ${THEOSC}-UUID
+ setup OBDUUID $OSTNODE
+ quit
+ EOF
+ done
+}
+
+setup_mdc() {
+ set -vx
+ [ "$SETUP_MDC" != "y" ] && return 0
+ [ "$MDC_NAMES" ] || MDC_NAMES=MDCDEV
+
+ for THEMDC in $MDC_NAMES ; do
+ MDCDEVNO=`find_devno $THEMDC`
+ if $OBDCTL name2dev $THEMDC > /dev/null 2>&1; then
+ echo "$0: MDCDEV is already configured"
+ return 0
fi
$OBDCTL <<- EOF || return $?
newdev
- attach osc OSCDEV
- setup -1
+ attach mdc $THEMDC ${THEMDC}-UUID
+ setup MDSUUID $MDSNODE
quit
EOF
+ done
}
+setup_lov () {
+ [ "$SETUP_MDC" != "y" ] && return 0
+
+ if [ -z "$LOVUUID" ]; then
+ echo "No LOV configured"
+ return
+ fi
+
+ $OBDCTL <<- EOF || return $?
+ newdev
+ attach lov LOVNAME ${LOVUUID}
+ setup MDCDEV-UUID
+ quit
+ EOF
+}
+
+
setup_mount() {
+ set -vx
[ "$SETUP_MOUNT" != "y" ] && return 0
+ [ "$MDC_NAMES" ] || MDC_NAMES=MDCDEV
+ [ "$OSC_NAMES" ] || OSC_NAMES=OSCDEV
+ [ -z "$MOUNT_LIST" -a "$OSCMT" ] && MOUNT_LIST="MT" && MT="$OSCMT OSCDEV MDCDEV"
- [ "$OSCMT" ] || fail "error: $0: OSCMT unset"
+ [ "$MOUNT_LIST" ] || fail "error: $0: MOUNT_LIST unset"
- if mount | grep -q $OSCMT; then
- echo "$0: $OSCMT is already mounted"
- return 0
- fi
+ for THEMOUNT in $MOUNT_LIST; do
+ eval "echo \$$THEMOUNT" | while read MTPT THEOSC THEMDC; do
+ if mount | grep -q $MTPT; then
+ echo "$0: $MTPT is already mounted"
+ return 0
+ fi
- [ ! -d $OSCMT ] && mkdir $OSCMT
- echo "$0: mounting \$OSCDEV on $OSCMT"
- mount -t lustre_lite -o device=`find_devno OSCDEV` none $OSCMT
+ [ ! -d $MTPT ] && mkdir $MTPT
+ echo mount -t lustre_lite -o ost=`find_devno $THEOSC`,mds=`find_devno $THEMDC` none $MTPT
+ mount -t lustre_lite -o ost=`find_devno $THEOSC`,mds=`find_devno $THEMDC` none $MTPT
+ done
+ done
}
setup_client() {
- setup_osc && setup_mount
+ setup_osc && setup_mdc && setup_lov && setup_mount
}
DEBUG_ON="echo 0xffffffff > /proc/sys/portals/debug"
cleanup_portals() {
[ -z "$NETWORK" ] && NETWORK=tcp
+
+ setup_variables
+
$PTLCTL <<- EOF
setup $NETWORK
disconnect
del_uuid self
- del_uuid mds
- del_uuid ost
- del_uuid ldlm
+ del_uuid $MDSNODE
+ del_uuid $OSTNODE
+ del_uuid $DLM
quit
EOF
- rmmod kqswnal
- rmmod ksocknal
- rmmod portals
+ do_rmmod kqswnal
+ do_rmmod ksocknal
+ do_rmmod portals
}
cleanup_lustre() {
losetup -d ${LOOP}1
losetup -d ${LOOP}2
- rmmod llite
- rmmod mdc
+ do_rmmod llite
+ do_rmmod lov
+ do_rmmod mdc
- rmmod mds_extN
- rmmod mds_ext3
- rmmod mds_ext2
- rmmod mds
- rmmod ost
- rmmod osc
- rmmod obdecho
- rmmod obdfilter
- rmmod obdext2
- rmmod extN
+ do_rmmod mds_extN
+ do_rmmod mds_ext3
+ do_rmmod mds_ext2
+ do_rmmod mds
+ do_rmmod ost
+ do_rmmod osc
+ do_rmmod obdecho
+ do_rmmod obdfilter
+ do_rmmod obdext2
+ do_rmmod extN
- rmmod ldlm
- rmmod ptlrpc
- rmmod obdclass
+ do_rmmod ldlm
+ do_rmmod ptlrpc
+ do_rmmod obdclass
}
cleanup_ldlm() {
[ "$SETUP" -a -z "$SETUP_MOUNT" ] && return 0
[ "$OSCMT" ] || OSCMT=/mnt/lustre
- if [ "`mount | grep $OSCMT`" ]; then
- umount $OSCMT || fail "unable to unmount $OSCMT"
- fi
+ for THEMOUNT in $OSCMT; do
+ if [ "`mount | grep $THEMOUNT`" ]; then
+ umount $THEMOUNT || fail "unable to unmount $THEMOUNT"
+ fi
+ done
}
cleanup_osc() {
[ "$SETUP" -a -z "$SETUP_OSC" ] && return 0
+ [ "$OSC_NAMES" ] || OSC_NAMES=OSCDEV
- OSCDEVNO=`find_devno OSCDEV`
- if [ "$OSCDEVNO" ]; then
+ for THEOSC in $OSC_NAMES ; do
+ OSCDEVNO=`find_devno $THEOSC`
+ if [ "$OSCDEVNO" ]; then
$OBDCTL <<- EOF
device $OSCDEVNO
cleanup
detach
quit
EOF
- fi
+ fi
+ done
+}
+
+cleanup_mdc() {
+ [ "$SETUP" -a -z "$SETUP_MDC" ] && return 0
+ [ "$MDC_NAMES" ] || MDC_NAMES=MDCDEV
+
+ for THEMDC in $MDC_NAMES ; do
+ MDCDEVNO=`find_devno $THEMDC`
+ if [ "$MDCDEVNO" ]; then
+ $OBDCTL <<- EOF
+ device $MDCDEVNO
+ cleanup
+ detach
+ quit
+ EOF
+ fi
+ done
}
cleanup_rpc() {
}
cleanup_client() {
- cleanup_mount && cleanup_osc && cleanup_rpc
+ cleanup_mount && cleanup_osc && cleanup_mdc && cleanup_rpc
}
fail() {