From c86179ce2040279789fb3e999ef359baccfec8d6 Mon Sep 17 00:00:00 2001 From: adilger Date: Wed, 30 Oct 2002 20:56:32 +0000 Subject: [PATCH] - Fix OBD_IOC_OPEN to return the obdo, so user-space has a file handle, and runregression-brw.sh can run against obdfilter again. - Destroy the IPC shmem segment so we can run more than 160 runtests in a row. - Allow COUNT to be specified, so you can run smaller runregression-brw.sh against obdfilter or BA OSTs and not run out of disk space. --- lustre/obdclass/class_obd.c | 27 +++++++---------- lustre/tests/runregression-brw.sh | 62 ++++++++++++++++++++++----------------- lustre/tests/runregression-mds.sh | 7 +++-- lustre/tests/runregression-net.sh | 35 ++++++++++++++-------- lustre/utils/obd.c | 43 ++++++++++++++------------- 5 files changed, 94 insertions(+), 80 deletions(-) diff --git a/lustre/obdclass/class_obd.c b/lustre/obdclass/class_obd.c index 97d503f..9e3d458 100644 --- a/lustre/obdclass/class_obd.c +++ b/lustre/obdclass/class_obd.c @@ -884,10 +884,8 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp, #warning FIXME: save lsm into file handle for other ops, release on close err = obd_create(&conn, &data->ioc_obdo1, &lsm); - if (err) - GOTO(out, err); - - err = copy_to_user((void *)arg, data, sizeof(*data)); + if (!err) + err = copy_to_user((void *)arg, data, sizeof(*data)); GOTO(out, err); } @@ -895,20 +893,16 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp, obd_data2conn(&conn, data); err = obd_getattr(&conn, &data->ioc_obdo1, NULL); - if (err) - GOTO(out, err); - - err = copy_to_user((void *)arg, data, sizeof(*data)); + if (!err) + err = copy_to_user((void *)arg, data, sizeof(*data)); GOTO(out, err); } case OBD_IOC_SETATTR: { obd_data2conn(&conn, data); err = obd_setattr(&conn, &data->ioc_obdo1, NULL); - if (err) - GOTO(out, err); - - err = copy_to_user((void *)arg, data, sizeof(*data)); + if (!err) + err = copy_to_user((void *)arg, data, sizeof(*data)); GOTO(out, err); } @@ -917,10 +911,8 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp, obd_data2conn(&conn, data); err = obd_destroy(&conn, &data->ioc_obdo1, NULL); - if (err) - GOTO(out, err); - - err = copy_to_user((void *)arg, data, sizeof(*data)); + if (!err) + err = copy_to_user((void *)arg, data, sizeof(*data)); GOTO(out, err); } @@ -929,6 +921,8 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp, obd_data2conn(&conn, data); err = obd_open(&conn, &data->ioc_obdo1, lsm); + if (!err) + err = copy_to_user((void *)arg, data, sizeof(*data)); GOTO(out, err); } @@ -936,7 +930,6 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp, struct lov_stripe_md *lsm = NULL; // XXX fill in from create obd_data2conn(&conn, data); - obd_data2conn(&conn, data); err = obd_close(&conn, &data->ioc_obdo1, lsm); GOTO(out, err); } diff --git a/lustre/tests/runregression-brw.sh b/lustre/tests/runregression-brw.sh index 0cf446e..a066c11 100644 --- a/lustre/tests/runregression-brw.sh +++ b/lustre/tests/runregression-brw.sh @@ -4,15 +4,23 @@ export PATH=/sbin:/usr/sbin:$PATH SRCDIR="`dirname $0`/" . $SRCDIR/common.sh +COUNT=${COUNT:-10000000} +COUNT_10=`expr $COUNT / 10` +COUNT_100=`expr $COUNT / 100` + ENDRUN=endrun-`hostname` -OSCNAME="`$OBDCTL device_list 2> /dev/null | awk '/ UP osc / { print $4 }'`" +OSCNAME="`$OBDCTL device_list 2> /dev/null | awk '/ osc | lov / { print $4 }' | tail -1`" if [ -z "$OSCNAME" ]; then echo "$0: needs an OSC set up first" 1>&2 exit 1 fi +cleanup () { + $OBDCTL --device \$$OSCNAME destroy $OID +} + runthreads() { THR=$1 DO=$2 @@ -40,7 +48,7 @@ runthreads() { if [ -e $ENDRUN ]; then rm $ENDRUN echo "exiting because $ENDRUN file was found" - exit 0 + cleanup fi } @@ -65,41 +73,41 @@ while date; do [ "$PGVW" ] && runthreads 1 test_brw_read 1600 -30 $PG [ "$PGVR" ] && runthreads 1 test_brw_read 100 -30 $PGVR - runthreads 1 test_brw_write 10000000 -30 $PG - runthreads 1 test_brw_read 10000000 -30 $PG + runthreads 1 test_brw_write $COUNT -30 $PG + runthreads 1 test_brw_read $COUNT -30 $PG - [ "$PGVW" ] && runthreads 1 test_brw_write 1000000 -30 $PGVW - [ "$PGVR" ] && runthreads 1 test_brw_read 1000000 -30 $PGVR + [ "$PGVW" ] && runthreads 1 test_brw_write $COUNT_10 -30 $PGVW + [ "$PGVR" ] && runthreads 1 test_brw_read $COUNT_10 -30 $PGVR - runthreads 2 test_brw_write 10000000 -30 $PG - runthreads 2 test_brw_read 10000000 -30 $PG + runthreads 2 test_brw_write $COUNT -30 $PG + runthreads 2 test_brw_read $COUNT -30 $PG - [ "$PGVW" ] && runthreads 2 test_brw_write 1000000 -30 $PGVW - [ "$PGVR" ] && runthreads 2 test_brw_read 1000000 -30 $PGVR + [ "$PGVW" ] && runthreads 2 test_brw_write $COUNT_10 -30 $PGVW + [ "$PGVR" ] && runthreads 2 test_brw_read $COUNT_10 -30 $PGVR - runthreads 10 test_brw_write 1000000 -30 $PG - runthreads 10 test_brw_read 1000000 -30 $PG + runthreads 10 test_brw_write $COUNT_10 -30 $PG + runthreads 10 test_brw_read $COUNT_10 -30 $PG - [ "$PGVW" ] && runthreads 10 test_brw_write 100000 -60 $PGVW - [ "$PGVR" ] && runthreads 10 test_brw_read 100000 -60 $PGVR + [ "$PGVW" ] && runthreads 10 test_brw_write $COUNT_100 -60 $PGVW + [ "$PGVR" ] && runthreads 10 test_brw_read $COUNT_100 -60 $PGVR - runthreads 32 test_brw_write 1000000 -30 $PG - runthreads 32 test_brw_read 1000000 -30 $PG + runthreads 32 test_brw_write $COUNT_10 -30 $PG + runthreads 32 test_brw_read $COUNT_10 -30 $PG - [ "$PGVW" ] && runthreads 32 test_brw_write 100000 -60 $PGVW - [ "$PGVR" ] && runthreads 32 test_brw_read 100000 -60 $PGVR + [ "$PGVW" ] && runthreads 32 test_brw_write $COUNT_100 -60 $PGVW + [ "$PGVR" ] && runthreads 32 test_brw_read $COUNT_100 -60 $PGVR - runthreads 64 test_brw_write 1000000 -30 $PG - runthreads 64 test_brw_read 1000000 -30 $PG + runthreads 64 test_brw_write $COUNT_10 -30 $PG + runthreads 64 test_brw_read $COUNT_10 -30 $PG - [ "$PGVW" ] && runthreads 64 test_brw_write 100000 -60 $PGVW - [ "$PGVR" ] && runthreads 64 test_brw_read 100000 -60 $PGVR + [ "$PGVW" ] && runthreads 64 test_brw_write $COUNT_100 -60 $PGVW + [ "$PGVR" ] && runthreads 64 test_brw_read $COUNT_100 -60 $PGVR - runthreads 100 test_brw_write 100000 -60 $PG - runthreads 100 test_brw_read 100000 -60 $PG + runthreads 100 test_brw_write $COUNT_100 -60 $PG + runthreads 100 test_brw_read $COUNT_100 -60 $PG - [ "$PGVW" ] && runthreads 100 test_brw_write 100000 -60 $PGVW - [ "$PGVR" ] && runthreads 100 test_brw_read 100000 -60 $PGVR + [ "$PGVW" ] && runthreads 100 test_brw_write $COUNT_100 -60 $PGVW + [ "$PGVR" ] && runthreads 100 test_brw_read $COUNT_100 -60 $PGVR done -$OBDCTL --device \$$OSCNAME destroy $OID +cleanup diff --git a/lustre/tests/runregression-mds.sh b/lustre/tests/runregression-mds.sh index 3f97979..ecfe0d9 100755 --- a/lustre/tests/runregression-mds.sh +++ b/lustre/tests/runregression-mds.sh @@ -31,9 +31,10 @@ if [ -z "$OSCMT" ]; then [ -z "$OSCMT" ] && fail "no lustre filesystem mounted" 1 fi +V="-10" while [ "$1" ]; do case $1 in - -v|--verbose) V=-v;; + -v|--verbose) V="1";; --reformat) : ;; *) OPTS="$OPTS $1" ;; esac @@ -47,8 +48,8 @@ USED=`expr $USED + 16` # Some space for the status file THREADS=1 while [ $THREADS -lt 196 ]; do echo "starting $THREADS threads at `date`" - echo 0 > /proc/sys/portals/debug - $SRCDIR/createdestroy /mnt/lustre/file-$$ $COUNT -10 $THREADS + [ $V -gt 0 ] || echo 0 > /proc/sys/portals/debug + $SRCDIR/createdestroy /mnt/lustre/file-$$ $COUNT $V $THREADS $SRCDIR/openclose /mnt/lustre/file-$$ $COUNT $THREADS THREADS=`expr $THREADS + 5` $LCONF --cleanup $OPTS || fail 10 diff --git a/lustre/tests/runregression-net.sh b/lustre/tests/runregression-net.sh index 8feb5be..54e645f 100644 --- a/lustre/tests/runregression-net.sh +++ b/lustre/tests/runregression-net.sh @@ -4,6 +4,13 @@ export PATH=/sbin:/usr/sbin:$PATH SRCDIR="`dirname $0`/" . $SRCDIR/common.sh +COUNT=${COUNT:-10000000} +COUNT_10=`expr $COUNT / 10` +COUNT_100=`expr $COUNT / 100` +COUNT_1000=`expr $COUNT / 1000` + +ENDRUN=endrun-`hostname` + OSCNAME="`$OBDCTL device_list 2> /dev/null | awk '/ osc | lov / { print $4 }' | tail -1`" if [ -z "$OSCNAME" ]; then @@ -42,7 +49,8 @@ runthreads() { fi } -OID=`$OBDCTL --device \\$$OSCNAME create 1 | awk '/is object id/ { print $6 }'` +[ -z "$OID" ] && OID=`$OBDCTL --device \\$$OSCNAME create 1 | awk '/is object id/ { print $6 }'` +[ -z "$OID" ] && echo "error creating object" 1>&2 && exit 1 # TODO: obdctl needs to check on the progress of each forked thread # (IPC SHM, sockets?) to see if it hangs. @@ -73,24 +81,25 @@ for CMD in test_getattr test_brw_write test_brw_read; do debug_server_off debug_client_off - runthreads 1 $CMD 10000 100 $PG - [ "$PGV" ] && runthreads 1 $CMD 1000 100 $PGV + runthreads 1 $CMD $COUNT_100 -10 $PG + [ "$PGV" ] && runthreads 1 $CMD $COUNT_1000 -10 $PGV - runthreads 1 $CMD 1000000 -30 $PG - [ "$PGV" ] && runthreads 1 $CMD 100000 -30 $PGV + runthreads 1 $CMD $COUNT -30 $PG + [ "$PGV" ] && runthreads 1 $CMD $COUNT_10 -30 $PGV - runthreads 1 $CMD 100 1 $PG + runthreads 1 $CMD 100 -10 $PG - runthreads 2 $CMD 10000 100 $PG - [ "$PGV" ] && runthreads 2 $CMD 1000 100 $PGV + runthreads 2 $CMD $COUNT_100 -30 $PG + [ "$PGV" ] && runthreads 2 $CMD $COUNT_1000 -30 $PGV - runthreads 2 $CMD 1000000 -30 $PG - [ "$PGV" ] && runthreads 2 $CMD 100000 -30 $PGV + runthreads 2 $CMD $COUNT -30 $PG + [ "$PGV" ] && runthreads 2 $CMD $COUNT_10 -30 $PGV - runthreads 10 $CMD 10000 1000 $PG - [ "$PGV" ] && runthreads 10 $CMD 1000 1000 $PGV + runthreads 10 $CMD $COUNT_10 -30 $PG + [ "$PGV" ] && runthreads 10 $CMD $COUNT_100 -30 $PGV - runthreads 100 $CMD 10000 -30 $PG + runthreads 100 $CMD $COUNT_100 -30 $PG + [ "$PGV" ] && runthreads 100 $CMD $COUNT_1000 -30 $PGV done $OBDCTL --device \$$OSCNAME destroy $OID diff --git a/lustre/utils/obd.c b/lustre/utils/obd.c index 4919992..8beffa9 100644 --- a/lustre/utils/obd.c +++ b/lustre/utils/obd.c @@ -100,21 +100,14 @@ char *obdo_print(struct obdo *obd) { char buf[1024]; - sprintf(buf, "id: %Ld\ngrp: %Ld\natime: %Ld\nmtime: %Ld\nctime: %Ld\n" - "size: %Ld\nblocks: %Ld\nblksize: %d\nmode: %o\nuid: %d\n" - "gid: %d\nflags: %x\nobdflags: %x\nnlink: %d,\nvalid %x\n", - obd->o_id, - obd->o_gr, - obd->o_atime, - obd->o_mtime, - obd->o_ctime, - obd->o_size, - obd->o_blocks, - obd->o_blksize, - obd->o_mode, - obd->o_uid, - obd->o_gid, - obd->o_flags, obd->o_obdflags, obd->o_nlink, obd->o_valid); + sprintf(buf, "id: "LPX64"\ngrp: "LPX64"\natime: "LPU64"\nmtime: "LPU64 + "\nctime: "LPU64"\nsize: "LPU64"\nblocks: "LPU64 + "\nblksize: %u\nmode: %o\nuid: %d\ngid: %d\nflags: %x\n" + "obdflags: %x\nnlink: %d,\nvalid %x\n", + obd->o_id, obd->o_gr, obd->o_atime, obd->o_mtime, obd->o_ctime, + obd->o_size, obd->o_blocks, obd->o_blksize, obd->o_mode, + obd->o_uid, obd->o_gid, obd->o_flags, obd->o_obdflags, + obd->o_nlink, obd->o_valid); return strdup(buf); } @@ -286,7 +279,7 @@ int do_disconnect(char *func, int verbose) OBD_IOC_DISCONNECT, strerror(errno)); } else { if (verbose) - printf("%s: disconnected conn %Lx\n", cmdname(func), + printf("%s: disconnected conn "LPX64"\n", cmdname(func), conn_addr); conn_addr = -1; } @@ -297,6 +290,7 @@ int do_disconnect(char *func, int verbose) #if SHMEM_STATS static void shmem_setup(void) { + /* Create new segment */ int shmid = shmget(IPC_PRIVATE, sizeof(counter_snapshot[0]), 0600); if (shmid == -1) { @@ -305,6 +299,7 @@ static void shmem_setup(void) return; } + /* Attatch to new segment */ shared_counters = (long long *)shmat(shmid, NULL, 0); if (shared_counters == (long long *)(-1)) { @@ -313,6 +308,14 @@ static void shmem_setup(void) shared_counters = NULL; return; } + + /* Mark segment as destroyed, so it will disappear when we exit. + * Forks will inherit attached segments, so we should be OK. + */ + if (shmctl(shmid, IPC_RMID, NULL) == -1) { + fprintf(stderr, "Can't destroy shared memory counters: %s\n", + strerror(errno)); + } } static inline void shmem_reset(void) @@ -837,8 +840,8 @@ int jt_obd_create(int argc, char **argv) } if (be_verbose(verbose, &next_time, i, &next_count, count)) - printf("%s: #%d is object id 0x%Lx\n", cmdname(argv[0]), - i, (long long)data.ioc_obdo1.o_id); + printf("%s: #%d is object id "LPX64"\n", + cmdname(argv[0]), i, data.ioc_obdo1.o_id); } return rc; } @@ -954,14 +957,14 @@ int jt_obd_getattr(int argc, char **argv) /* to help obd filter */ data.ioc_obdo1.o_mode = 0100644; data.ioc_obdo1.o_valid = 0xffffffff; - printf("%s: object id %Ld\n", cmdname(argv[0]), data.ioc_obdo1.o_id); + printf("%s: object id "LPX64"\n", cmdname(argv[0]),data.ioc_obdo1.o_id); rc = ioctl(fd, OBD_IOC_GETATTR, &data); if (rc) { fprintf(stderr, "error: %s: %s\n", cmdname(argv[0]), strerror(rc = errno)); } else { - printf("%s: object id %Ld, mode %o\n", cmdname(argv[0]), + printf("%s: object id "LPX64", mode %o\n", cmdname(argv[0]), data.ioc_obdo1.o_id, data.ioc_obdo1.o_mode); } return rc; -- 1.8.3.1