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.
#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);
}
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);
}
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);
}
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);
}
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);
}
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
if [ -e $ENDRUN ]; then
rm $ENDRUN
echo "exiting because $ENDRUN file was found"
- exit 0
+ cleanup
fi
}
[ "$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
[ -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
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
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
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.
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
{
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);
}
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;
}
#if SHMEM_STATS
static void shmem_setup(void)
{
+ /* Create new segment */
int shmid = shmget(IPC_PRIVATE, sizeof(counter_snapshot[0]), 0600);
if (shmid == -1) {
return;
}
+ /* Attatch to new segment */
shared_counters = (long long *)shmat(shmid, NULL, 0);
if (shared_counters == (long long *)(-1)) {
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)
}
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;
}
/* 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;