Whamcloud - gitweb
- Fix OBD_IOC_OPEN to return the obdo, so user-space has a file handle,
authoradilger <adilger>
Wed, 30 Oct 2002 20:56:32 +0000 (20:56 +0000)
committeradilger <adilger>
Wed, 30 Oct 2002 20:56:32 +0000 (20:56 +0000)
  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
lustre/tests/runregression-brw.sh
lustre/tests/runregression-mds.sh
lustre/tests/runregression-net.sh
lustre/utils/obd.c

index 97d503f..9e3d458 100644 (file)
@@ -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);
         }
index 0cf446e..a066c11 100644 (file)
@@ -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
index 3f97979..ecfe0d9 100755 (executable)
@@ -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
index 8feb5be..54e645f 100644 (file)
@@ -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
index 4919992..8beffa9 100644 (file)
@@ -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;