public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: Subrata Modak <tosubrata@gmail.com>
To: Andreas Dilger <adilger@sun.com>
Cc: LTP <ltp-list@lists.sourceforge.net>,
	linux-ext4@vger.kernel.org, Eric Sandeen <esandeen@redhat.com>
Subject: Re: [LTP] Lustre basic tests script
Date: Sat, 23 May 2009 16:33:47 +0530	[thread overview]
Message-ID: <bb33bcf20905230403n2e959d8fg1f463539b7cdb445@mail.gmail.com> (raw)
In-Reply-To: <20090522213639.GC13578@webber.adilger.int>


[-- Attachment #1.1: Type: text/plain, Size: 76069 bytes --]

Hi Andreas,

On Sat, May 23, 2009 at 3:06 AM, Andreas Dilger <adilger@sun.com> wrote:

> Below are included some of the tests from the Lustre "sanity.sh" script,
> which tests filesystem behaviour in a variety of ways.  Some of them are
> very simple and might concievably be removed, but are not necessarily bad.
> I've removed the tests that depend on Lustre-specific behaviour.
>
> It probably isn't useful to use this test script directly, since it
> depends on a number of helper functions, but it is definitely useful
> as a starting point for adding new tests to xfstests.
>
> Unfortunately, a bunch of tests had to be removed since they depend on
> Lustre's fault-injection code, but they would be useful for testing
> generic filesystem behaviour (e.g. ENOMEM or ENOSPC handling).  There
> is also a helper program we use "multiop" which is a toolbox program
> that I could supply separately, if you want.


How about understanding these and find out if they can be made part of LTP
as well  ? Any objection(s) ?

Regards--
Subrata


>
>
> Cheers, Andreas
> --
> Andreas Dilger
> Sr. Staff Engineer, Lustre Group
> Sun Microsystems of Canada, Inc.
>
>
> ============================================================================
>
> TMP=${TMP:-/tmp}
>
> [ -f $DIR/d52a/foo ] && chattr -a $DIR/d52a/foo
> [ -f $DIR/d52b/foo ] && chattr -i $DIR/d52b/foo
> rm -rf $DIR/[Rdfs][0-9]*
>
> # $RUNAS_ID may get set incorrectly somewhere else
> [ $UID -eq 0 -a $RUNAS_ID -eq 0 ] && error "\$RUNAS_ID set to 0, but \$UID
> is also 0!"
>
>
> echo "preparing for tests involving mounts"
> EXT2_DEV=${EXT2_DEV:-$TMP/SANITY.LOOP}
> touch $EXT2_DEV
> mke2fs -j -F $EXT2_DEV 8000 > /dev/null
> echo # add a newline after mke2fs.
>
> umask 077
>
> test_0() {
>        touch $DIR/$tfile
>        $CHECKSTAT -t file $DIR/$tfile || error
>        rm $DIR/$tfile
>        $CHECKSTAT -a $DIR/$tfile || error
> }
> run_test 0 "touch .../$tfile ; rm .../$tfile"
>
> test_0b() {
>        chmod 0755 $DIR || error
>        $CHECKSTAT -p 0755 $DIR || error
> }
> run_test 0b "chmod 0755 $DIR"
>
> test_1a() {
>        mkdir $DIR/d1
>        mkdir $DIR/d1/d2
>        mkdir $DIR/d1/d2 && error "we expect EEXIST, but not returned"
>        $CHECKSTAT -t dir $DIR/d1/d2 || error
> }
> run_test 1a "mkdir .../d1; mkdir .../d1/d2"
>
> test_1b() {
>        rmdir $DIR/d1/d2
>        rmdir $DIR/d1
>        $CHECKSTAT -a $DIR/d1 || error
> }
> run_test 1b "rmdir .../d1/d2; rmdir .../d1"
>
> test_2a() {
>        mkdir $DIR/d2
>        touch $DIR/d2/f
>        $CHECKSTAT -t file $DIR/d2/f || error
> }
> run_test 2a "mkdir .../d2; touch .../d2/f"
>
> test_2b() {
>        rm -r $DIR/d2
>        $CHECKSTAT -a $DIR/d2 || error
> }
> run_test 2b "rm -r .../d2; checkstat .../d2/f"
>
> test_3a() {
>        mkdir $DIR/d3
>        $CHECKSTAT -t dir $DIR/d3 || error
> }
> run_test 3a "mkdir .../d3"
>
> test_3b() {
>        if [ ! -d $DIR/d3 ]; then
>                mkdir $DIR/d3
>        fi
>        touch $DIR/d3/f
>        $CHECKSTAT -t file $DIR/d3/f || error
> }
> run_test 3b "touch .../d3/f"
>
> test_3c() {
>        rm -r $DIR/d3
>        $CHECKSTAT -a $DIR/d3 || error
> }
> run_test 3c "rm -r .../d3"
>
> test_4a() {
>        mkdir $DIR/d4
>        $CHECKSTAT -t dir $DIR/d4 || error
> }
> run_test 4a "mkdir .../d4"
>
> test_4b() {
>        if [ ! -d $DIR/d4 ]; then
>                mkdir $DIR/d4
>        fi
>        mkdir $DIR/d4/d2
>        $CHECKSTAT -t dir $DIR/d4/d2 || error
> }
> run_test 4b "mkdir .../d4/d2"
>
> test_5() {
>        mkdir $DIR/d5
>        mkdir $DIR/d5/d2
>        chmod 0707 $DIR/d5/d2
>        $CHECKSTAT -t dir -p 0707 $DIR/d5/d2 || error
> }
> run_test 5 "mkdir .../d5 .../d5/d2; chmod .../d5/d2"
>
> test_6a() {
>        touch $DIR/f6a
>        chmod 0666 $DIR/f6a || error
>        $CHECKSTAT -t file -p 0666 -u \#$UID $DIR/f6a || error
> }
> run_test 6a "touch .../f6a; chmod .../f6a"
>
> test_6b() {
>        [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID" UID = $UID -- skipping" &&
> return
>        if [ ! -f $DIR/f6a ]; then
>                touch $DIR/f6a
>                chmod 0666 $DIR/f6a
>        fi
>        $RUNAS chmod 0444 $DIR/f6a && error
>        $CHECKSTAT -t file -p 0666 -u \#$UID $DIR/f6a || error
> }
> run_test 6b "$RUNAS chmod .../f6a (should return error)""
>
> test_6c() {
>        [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID" UID = $UID -- skipping" &&
> return
>        touch $DIR/f6c
>        chown $RUNAS_ID $DIR/f6c || error
>        $CHECKSTAT -t file -u \#$RUNAS_ID $DIR/f6c || error
> }
> run_test 6c "touch .../f6c; chown .../f6c"
>
> test_6d() {
>        [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID" UID = $UID -- skipping" &&
> return
>        if [ ! -f $DIR/f6c ]; then
>                touch $DIR/f6c
>                chown $RUNAS_ID $DIR/f6c
>        fi
>        $RUNAS chown $UID $DIR/f6c && error
>        $CHECKSTAT -t file -u \#$RUNAS_ID $DIR/f6c || error
> }
> run_test 6d "$RUNAS chown .../f6c (should return error)""
>
> test_6e() {
>        [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID" UID = $UID -- skipping" &&
> return
>        touch $DIR/f6e
>        chgrp $RUNAS_ID $DIR/f6e || error
>        $CHECKSTAT -t file -u \#$UID -g \#$RUNAS_ID $DIR/f6e || error
> }
> run_test 6e "touch .../f6e; chgrp .../f6e"
>
> test_6f() {
>        [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID" UID = $UID -- skipping" &&
> return
>        if [ ! -f $DIR/f6e ]; then
>                touch $DIR/f6e
>                chgrp $RUNAS_ID $DIR/f6e
>        fi
>        $RUNAS chgrp $UID $DIR/f6e && error
>        $CHECKSTAT -t file -u \#$UID -g \#$RUNAS_ID $DIR/f6e || error
> }
> run_test 6f "$RUNAS chgrp .../f6e (should return error)""
>
> test_6g() {
>        [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID" UID = $UID -- skipping" &&
> return
>        mkdir $DIR/d6g || error
>        chmod 777 $DIR/d6g || error
>        $RUNAS mkdir $DIR/d6g/d || error
>        chmod g+s $DIR/d6g/d || error
>        mkdir $DIR/d6g/d/subdir
>        $CHECKSTAT -g \#$RUNAS_ID $DIR/d6g/d/subdir || error
> }
> run_test 6g "Is new dir in sgid dir inheriting group?"
>
> test_6h() { # bug 7331
>        [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID" UID = $UID -- skipping" &&
> return
>        touch $DIR/f6h || error "touch failed"
>        chown $RUNAS_ID:$RUNAS_ID $DIR/f6h || error "initial chown failed"
>        $RUNAS -G$RUNAS_ID chown $RUNAS_ID:0 $DIR/f6h && error "chown
> worked"
>        $CHECKSTAT -t file -u \#$RUNAS_ID -g \#$RUNAS_ID $DIR/f6h || error
> }
> run_test 6h "$RUNAS chown RUNAS_ID.0 .../f6h (should return error)"
>
> test_7a() {
>        mkdir $DIR/d7
>        $MCREATE $DIR/d7/f
>        chmod 0666 $DIR/d7/f
>        $CHECKSTAT -t file -p 0666 $DIR/d7/f || error
> }
> run_test 7a "mkdir .../d7; mcreate .../d7/f; chmod .../d7/f""
>
> test_7b() {
>        if [ ! -d $DIR/d7 ]; then
>                mkdir $DIR/d7
>        fi
>        $MCREATE $DIR/d7/f2
>        echo -n foo > $DIR/d7/f2
>        [ "`cat $DIR/d7/f2`"" "foo" ] || error
>        $CHECKSTAT -t file -s 3 $DIR/d7/f2 || error
> }
> run_test 7b "mkdir .../d7; mcreate d7/f2; echo foo > d7/f2"
>
> test_8() {
>        mkdir $DIR/d8
>        touch $DIR/d8/f
>        chmod 0666 $DIR/d8/f
>        $CHECKSTAT -t file -p 0666 $DIR/d8/f || error
> }
> run_test 8 "mkdir .../d8; touch .../d8/f; chmod .../d8/f"
>
> test_9() {
>        mkdir $DIR/d9
>        mkdir $DIR/d9/d2
>        mkdir $DIR/d9/d2/d3
>        $CHECKSTAT -t dir $DIR/d9/d2/d3 || error
> }
> run_test 9 "mkdir .../d9 .../d9/d2 .../d9/d2/d3"
>
> test_10() {
>        mkdir $DIR/d10
>        mkdir $DIR/d10/d2
>        touch $DIR/d10/d2/f
>        $CHECKSTAT -t file $DIR/d10/d2/f || error
> }
> run_test 10 "mkdir .../d10 .../d10/d2; touch .../d10/d2/f"
>
> test_11() {
>        mkdir $DIR/d11
>        mkdir $DIR/d11/d2
>        chmod 0666 $DIR/d11/d2
>        chmod 0705 $DIR/d11/d2
>        $CHECKSTAT -t dir -p 0705 $DIR/d11/d2 || error
> }
> run_test 11 "mkdir .../d11 d11/d2; chmod .../d11/d2"
>
> test_12() {
>        mkdir $DIR/d12
>        touch $DIR/d12/f
>        chmod 0666 $DIR/d12/f
>        chmod 0654 $DIR/d12/f
>        $CHECKSTAT -t file -p 0654 $DIR/d12/f || error
> }
> run_test 12 "touch .../d12/f; chmod .../d12/f .../d12/f"
>
> test_13() {
>        mkdir $DIR/d13
>        dd if=/dev/zero of=$DIR/d13/f count=10
>        >  $DIR/d13/f
>        $CHECKSTAT -t file -s 0 $DIR/d13/f || error
> }
> run_test 13 "creat .../d13/f; dd .../d13/f; > .../d13/f"
>
> test_14() {
>        mkdir $DIR/d14
>        touch $DIR/d14/f
>        rm $DIR/d14/f
>        $CHECKSTAT -a $DIR/d14/f || error
> }
> run_test 14 "touch .../d14/f; rm .../d14/f; rm .../d14/f"
>
> test_15() {
>        mkdir $DIR/d15
>        touch $DIR/d15/f
>        mv $DIR/d15/f $DIR/d15/f2
>        $CHECKSTAT -t file $DIR/d15/f2 || error
> }
> run_test 15 "touch .../d15/f; mv .../d15/f .../d15/f2"
>
> test_16() {
>        mkdir $DIR/d16
>        touch $DIR/d16/f
>        rm -rf $DIR/d16/f
>        $CHECKSTAT -a $DIR/d16/f || error
> }
> run_test 16 "touch .../d16/f; rm -rf .../d16/f"
>
> test_17a() {
>        mkdir -p $DIR/d17
>        touch $DIR/d17/f
>        ln -s $DIR/d17/f $DIR/d17/l-exist
>        ls -l $DIR/d17
>        $CHECKSTAT -l $DIR/d17/f $DIR/d17/l-exist || error
>        $CHECKSTAT -f -t f $DIR/d17/l-exist || error
>        rm -f $DIR/d17/l-exist
>        $CHECKSTAT -a $DIR/d17/l-exist || error
> }
> run_test 17a "symlinks: create, remove (real)"
>
> test_17b() {
>        mkdir -p $DIR/d17
>        ln -s no-such-file $DIR/d17/l-dangle
>        ls -l $DIR/d17
>        $CHECKSTAT -l no-such-file $DIR/d17/l-dangle || error
>        $CHECKSTAT -fa $DIR/d17/l-dangle || error
>        rm -f $DIR/d17/l-dangle
>        $CHECKSTAT -a $DIR/d17/l-dangle || error
> }
> run_test 17b "symlinks: create, remove (dangling)"
>
> test_17c() { # bug 3440 - don't save failed open RPC for replay
>        mkdir -p $DIR/d17
>        ln -s foo $DIR/d17/f17c
>        cat $DIR/d17/f17c && error "opened non-existent symlink" || true
> }
> run_test 17c "symlinks: open dangling (should return error)""
>
> test_17d() {
>        mkdir -p $DIR/d17
>        ln -s foo $DIR/d17/f17d
>        touch $DIR/d17/f17d || error "creating to new symlink"
> }
> run_test 17d "symlinks: create dangling"
>
> test_17e() {
>        mkdir -p $DIR/$tdir
>        local foo=$DIR/$tdir/$tfile
>        ln -s $foo $foo || error "create symlink failed"
>        ls -l $foo || error "ls -l failed"
>        ls $foo && error "ls not failed" || true
> }
> run_test 17e "symlinks: create recursive symlink (should return error)""
>
> test_17f() {
>        mkdir -p $DIR/d17f
>        ln -s 1234567890/2234567890/3234567890/4234567890 $DIR/d17f/111
>        ln -s
> 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890
> $DIR/d17f/222
>        ln -s
> 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890
> $DIR/d17f/333
>        ln -s
> 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890
> $DIR/d17f/444
>        ln -s
> 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890/c234567890/d234567890/f234567890
> $DIR/d17f/555
>        ln -s
> 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890/c234567890/d234567890/f234567890/aaaaaaaaaa/bbbbbbbbbb/cccccccccc/dddddddddd/eeeeeeeeee/ffffffffff/
> $DIR/d17f/666
>        ls -l  $DIR/d17f
> }
> run_test 17f "symlinks: long and very long symlink name"
>
> test_17g() {
>        mkdir -p $DIR/$tdir
>        LONGSYMLINK="$(dd if=/dev/zero bs=4095 count=1 | tr '\0' 'x')"
>        ln -s $LONGSYMLINK $DIR/$tdir/$tfile
>        ls -l $DIR/$tdir
> }
> run_test 17g "symlinks: really long symlink name"
>
> test_17h() { #bug 17378
>        mkdir -p $DIR/$tdir
>        $SETSTRIPE $DIR/$tdir -c -1
> #define OBD_FAIL_MDS_LOV_PREP_CREATE 0x141
>        do_facet mds lctl set_param fail_loc=0x80000141
>        touch $DIR/$tdir/$tfile || true
> }
> run_test 17h "create objects: lov_free_memmd() doesn't lbug"
>
> test_18() {
>        touch $DIR/f
>        ls $DIR || error
> }
> run_test 18 "touch .../f ; ls ..."
>
> test_19a() {
>        touch $DIR/f19
>        ls -l $DIR
>        rm $DIR/f19
>        $CHECKSTAT -a $DIR/f19 || error
> }
> run_test 19a "touch .../f19 ; ls -l ... ; rm .../f19"
>
> test_19b() {
>        ls -l $DIR/f19 && error || true
> }
> run_test 19b "ls -l .../f19 (should return error)"
>
> test_19c() {
>        [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID" UID = $UID -- skipping" &&
> return
>        $RUNAS touch $DIR/f19 && error || true
> }
> run_test 19c "$RUNAS touch .../f19 (should return error)""
>
> test_19d() {
>        cat $DIR/f19 && error || true
> }
> run_test 19d "cat .../f19 (should return error)"
>
> test_20() {
>        touch $DIR/f
>        rm $DIR/f
>        log "1 done"
>        touch $DIR/f
>        rm $DIR/f
>        log "2 done"
>        touch $DIR/f
>        rm $DIR/f
>        log "3 done"
>        $CHECKSTAT -a $DIR/f || error
> }
> run_test 20 "touch .../f ; ls -l ..."
>
> test_21() {
>        mkdir $DIR/d21
>        [ -f $DIR/d21/dangle ] && rm -f $DIR/d21/dangle
>        ln -s dangle $DIR/d21/link
>        echo foo >> $DIR/d21/link
>        cat $DIR/d21/dangle
>        $CHECKSTAT -t link $DIR/d21/link || error
>        $CHECKSTAT -f -t file $DIR/d21/link || error
> }
> run_test 21 "write to dangling link"
>
> test_22() {
>        WDIR=$DIR/$tdir
>        mkdir -p $WDIR
>        chown $RUNAS_ID $WDIR
>        (cd $WDIR || error "cd $WDIR failed";
>        $RUNAS tar cf - /etc/hosts /etc/sysconfig/network | \
>        $RUNAS tar xf -)
>        ls -lR $WDIR/etc || error "ls -lR $WDIR/etc failed"
>        $CHECKSTAT -t dir $WDIR/etc || error "checkstat -t dir failed"
>        $CHECKSTAT -u \#$RUNAS_ID $WDIR/etc || error "checkstat -u failed"
> }
> run_test 22 "unpack tar archive as non-root user"
>
> test_23() {
>        mkdir -p $DIR/$tdir
>        local file=$DIR/$tdir/$tfile
>
>        openfile -f O_CREAT:O_EXCL $file || error "$file create failed"
>        openfile -f O_CREAT:O_EXCL $file &&
>                error "$file recreate succeeded" || true
> }
> run_test 23 "O_CREAT|O_EXCL in subdir"
>
> test_24a() {
>        echo '== rename sanity"
>        echo '-- same directory rename'
>        mkdir $DIR/R1
>        touch $DIR/R1/f
>        mv $DIR/R1/f $DIR/R1/g
>        $CHECKSTAT -t file $DIR/R1/g || error
> }
> run_test 24a "touch .../R1/f; rename .../R1/f .../R1/g"
>
> test_24b() {
>        mkdir $DIR/R2
>        touch $DIR/R2/{f,g}
>        mv $DIR/R2/f $DIR/R2/g
>        $CHECKSTAT -a $DIR/R2/f || error
>        $CHECKSTAT -t file $DIR/R2/g || error
> }
> run_test 24b "touch .../R2/{f,g}; rename .../R2/f .../R2/g"
>
> test_24c() {
>        mkdir $DIR/R3
>        mkdir $DIR/R3/f
>        mv $DIR/R3/f $DIR/R3/g
>        $CHECKSTAT -a $DIR/R3/f || error
>        $CHECKSTAT -t dir $DIR/R3/g || error
> }
> run_test 24c "mkdir .../R3/f; rename .../R3/f .../R3/g"
>
> test_24d() {
>        mkdir $DIR/R4
>        mkdir $DIR/R4/{f,g}
>        mrename $DIR/R4/f $DIR/R4/g
>        $CHECKSTAT -a $DIR/R4/f || error
>        $CHECKSTAT -t dir $DIR/R4/g || error
> }
> run_test 24d "mkdir .../R4/{f,g}; rename .../R4/f .../R4/g"
>
> test_24e() {
>        echo '-- cross directory renames --'
>        mkdir $DIR/R5{a,b}
>        touch $DIR/R5a/f
>        mv $DIR/R5a/f $DIR/R5b/g
>        $CHECKSTAT -a $DIR/R5a/f || error
>        $CHECKSTAT -t file $DIR/R5b/g || error
> }
> run_test 24e "touch .../R5a/f; rename .../R5a/f .../R5b/g"
>
> test_24f() {
>        mkdir $DIR/R6{a,b}
>        touch $DIR/R6a/f $DIR/R6b/g
>        mv $DIR/R6a/f $DIR/R6b/g
>        $CHECKSTAT -a $DIR/R6a/f || error
>        $CHECKSTAT -t file $DIR/R6b/g || error
> }
> run_test 24f "touch .../R6a/f R6b/g; mv .../R6a/f .../R6b/g""
>
> test_24g() {
>        mkdir $DIR/R7{a,b}
>        mkdir $DIR/R7a/d
>        mv $DIR/R7a/d $DIR/R7b/e
>        $CHECKSTAT -a $DIR/R7a/d || error
>        $CHECKSTAT -t dir $DIR/R7b/e || error
> }
> run_test 24g "mkdir .../R7{a,b}/d; mv .../R7a/d .../R7b/e"
>
> test_24h() {
>        mkdir $DIR/R8{a,b}
>        mkdir $DIR/R8a/d $DIR/R8b/e
>        mrename $DIR/R8a/d $DIR/R8b/e
>        $CHECKSTAT -a $DIR/R8a/d || error
>        $CHECKSTAT -t dir $DIR/R8b/e || error
> }
> run_test 24h "mkdir .../R8{a,b}/{d,e}; rename .../R8a/d .../R8b/e"
>
> test_24i() {
>        echo "-- rename error cases"
>        mkdir $DIR/R9
>        mkdir $DIR/R9/a
>        touch $DIR/R9/f
>        mrename $DIR/R9/f $DIR/R9/a
>        $CHECKSTAT -t file $DIR/R9/f || error
>        $CHECKSTAT -t dir  $DIR/R9/a || error
>        $CHECKSTAT -a $DIR/R9/a/f || error
> }
> run_test 24i "rename file to dir error: touch f ; mkdir a ; rename f a"
>
> test_24j() {
>        mkdir $DIR/R10
>        mrename $DIR/R10/f $DIR/R10/g
>        $CHECKSTAT -t dir $DIR/R10 || error
>        $CHECKSTAT -a $DIR/R10/f || error
>        $CHECKSTAT -a $DIR/R10/g || error
> }
> run_test 24j "source does not exist"
>
> test_24k() {
>        mkdir $DIR/R11a $DIR/R11a/d
>        touch $DIR/R11a/f
>        mv $DIR/R11a/f $DIR/R11a/d
>        $CHECKSTAT -a $DIR/R11a/f || error
>        $CHECKSTAT -t file $DIR/R11a/d/f || error
> }
> run_test 24k "touch .../R11a/f; mv .../R11a/f .../R11a/d"
>
> # bug 2429 - rename foo foo foo creates invalid file
> test_24l() {
>        f="$DIR/f24l"
>        multiop $f OcNs || error
> }
> run_test 24l "Renaming a file to itself"
>
> test_24m() {
>        f="$DIR/f24m"
>        multiop $f OcLN ${f}2 ${f}2 || error "link ${f}2 ${f}2 failed"
>        # on ext3 this does not remove either the source or target files
>        # though the "expected" operation would be to remove the source
>        $CHECKSTAT -t file ${f} || error "${f} missing"
>        $CHECKSTAT -t file ${f}2 || error "${f}2 missing"
> }
> run_test 24m "Renaming a file to a hard link to itself"
>
> test_24n() {
>    f="$DIR/f24n"
>    # this stats the old file after it was renamed, so it should fail
>    touch ${f}
>    $CHECKSTAT ${f}
>    mv ${f} ${f}.rename
>    $CHECKSTAT ${f}.rename
>    $CHECKSTAT -a ${f}
> }
> run_test 24n "Statting the old file after renaming (Posix rename 2)"
>
> test_24o() {
>        check_kernel_version 37 || return 0
>        mkdir -p $DIR/d24o
>        rename_many -s random -v -n 10 $DIR/d24o
> }
> run_test 24o "rename of files during htree split"
>
> test_24p() {
>        mkdir $DIR/R12{a,b}
>        DIRINO=`ls -lid $DIR/R12a | awk '{ print $1 }'`
>        mrename $DIR/R12a $DIR/R12b
>        $CHECKSTAT -a $DIR/R12a || error
>        $CHECKSTAT -t dir $DIR/R12b || error
>        DIRINO2=`ls -lid $DIR/R12b | awk '{ print $1 }'`
>        [ "$DIRINO"" "$DIRINO2" ] || error "R12a $DIRINO != R12b $DIRINO2"
> }
> run_test 24p "mkdir .../R12{a,b}; rename .../R12a .../R12b"
>
> test_24q() {
>        mkdir $DIR/R13{a,b}
>        DIRINO=`ls -lid $DIR/R13a | awk '{ print $1 }'`
>        multiop_bg_pause $DIR/R13b D_c || return 1
>        MULTIPID=$!
>
>        mrename $DIR/R13a $DIR/R13b
>        $CHECKSTAT -a $DIR/R13a || error
>        $CHECKSTAT -t dir $DIR/R13b || error
>        DIRINO2=`ls -lid $DIR/R13b | awk '{ print $1 }'`
>        [ "$DIRINO"" "$DIRINO2" ] || error "R13a $DIRINO != R13b $DIRINO2"
>        kill -USR1 $MULTIPID
>        wait $MULTIPID || error "multiop close failed"
> }
> run_test 24q "mkdir .../R13{a,b}; open R13b rename R13a R13b""
>
> test_24r() { #bug 3789
>        mkdir $DIR/R14a $DIR/R14a/b
>        mrename $DIR/R14a $DIR/R14a/b && error "rename to subdir worked!"
>        $CHECKSTAT -t dir $DIR/R14a || error "$DIR/R14a missing"
>        $CHECKSTAT -t dir $DIR/R14a/b || error "$DIR/R14a/b missing"
> }
> run_test 24r "mkdir .../R14a/b; rename .../R14a .../R14a/b"
>
> test_24s() {
>        mkdir $DIR/R15a $DIR/R15a/b $DIR/R15a/b/c
>        mrename $DIR/R15a $DIR/R15a/b/c && error "rename to sub-subdir
> worked!"
>        $CHECKSTAT -t dir $DIR/R15a || error "$DIR/R15a missing"
>        $CHECKSTAT -t dir $DIR/R15a/b/c || error "$DIR/R15a/b/c missing"
> }
> run_test 24s "mkdir .../R15a/b/c; rename .../R15a .../R15a/b/c""
> test_24t() {
>        mkdir $DIR/R16a $DIR/R16a/b $DIR/R16a/b/c
>        mrename $DIR/R16a/b/c $DIR/R16a && error "rename to sub-subdir
> worked!"
>        $CHECKSTAT -t dir $DIR/R16a || error "$DIR/R16a missing"
>        $CHECKSTAT -t dir $DIR/R16a/b/c || error "$DIR/R16a/b/c missing"
> }
> run_test 24t "mkdir .../R16a/b/c; rename .../R16a/b/c .../R16a""
>
> test_24u() { # bug12192
>        multiop $DIR/$tfile C2w$((2048 * 1024))c || error
>        $CHECKSTAT -s $((2048 * 1024)) $DIR/$tfile || error "wrong file
> size"
> }
> run_test 24u "create stripe file"
>
> test_25a() {
>        echo '== symlink sanity"
>
>        mkdir $DIR/d25
>        ln -s d25 $DIR/s25
>        touch $DIR/s25/foo || error
> }
> run_test 25a "create file in symlinked directory"
>
> test_25b() {
>        [ ! -d $DIR/d25 ] && test_25a
>        $CHECKSTAT -t file $DIR/s25/foo || error
> }
> run_test 25b "lookup file in symlinked directory""
>
> test_26a() {
>        mkdir $DIR/d26
>        mkdir $DIR/d26/d26-2
>        ln -s d26/d26-2 $DIR/s26
>        touch $DIR/s26/foo || error
> }
> run_test 26a "multiple component symlink""
>
> test_26b() {
>        mkdir -p $DIR/d26b/d26-2
>        ln -s d26b/d26-2/foo $DIR/s26-2
>        touch $DIR/s26-2 || error
> }
> run_test 26b "multiple component symlink at end of lookup""
>
> test_26c() {
>        mkdir $DIR/d26.2
>        touch $DIR/d26.2/foo
>        ln -s d26.2 $DIR/s26.2-1
>        ln -s s26.2-1 $DIR/s26.2-2
>        ln -s s26.2-2 $DIR/s26.2-3
>        chmod 0666 $DIR/s26.2-3/foo
> }
> run_test 26c "chain of symlinks""
>
> # recursive symlinks (bug 439)
> test_26d() {
>        ln -s d26-3/foo $DIR/d26-3
> }
> run_test 26d "create multiple component recursive symlink""
>
> test_26e() {
>        [ ! -h $DIR/d26-3 ] && test_26d
>        rm $DIR/d26-3
> }
> run_test 26e "unlink multiple component recursive symlink""
>
> # recursive symlinks (bug 7022)
> test_26f() {
>        mkdir -p $DIR/$tdir
>        mkdir $DIR/$tdir/$tfile        || error "mkdir $DIR/$tdir/$tfile
> failed"
>        cd $DIR/$tdir/$tfile           || error "cd $DIR/$tdir/$tfile
> failed"
>        mkdir -p lndir/bar1      || error "mkdir lndir/bar1 failed"
>        mkdir $tfile             || error "mkdir $tfile failed"
>        cd $tfile                || error "cd $tfile failed"
>        ln -s .. dotdot          || error "ln dotdot failed"
>        ln -s dotdot/lndir lndir || error "ln lndir failed"
>        cd $DIR/$tdir                 || error "cd $DIR/$tdir failed"
>        output=`ls $tfile/$tfile/lndir/bar1`
>        [ "$output"" bar1 ] && error "unexpected output"
>        rm -r $tfile             || error "rm $tfile failed"
>        $CHECKSTAT -a $DIR/$tfile || error "$tfile not gone"
> }
> run_test 26f "rm -r of a directory which has recursive symlink""
>
> # createtest also checks that device nodes are created and
> # then visible correctly (#2091)
> test_28() { # bug 2091
>        mkdir $DIR/d28
>        $CREATETEST $DIR/d28/ct || error
> }
> run_test 28 "create/mknod/mkdir with bad file types""
>
> test_30() {
>        cp `which ls` $DIR || cp /bin/ls $DIR
>        $DIR/ls /
>        rm $DIR/ls
> }
> run_test 30 "run binary from Lustre (execve)""
>
> test_31a() {
>        $OPENUNLINK $DIR/f31 $DIR/f31 || error
>        $CHECKSTAT -a $DIR/f31 || error
> }
> run_test 31a "open-unlink file""
>
> test_31b() {
>        touch $DIR/f31 || error
>        ln $DIR/f31 $DIR/f31b || error
>        multiop $DIR/f31b Ouc || error
>        $CHECKSTAT -t file $DIR/f31 || error
> }
> run_test 31b "unlink file with multiple links while open""
>
> test_31c() {
>        touch $DIR/f31 || error
>        ln $DIR/f31 $DIR/f31c || error
>        multiop_bg_pause $DIR/f31 O_uc || return 1
>        MULTIPID=$!
>        multiop $DIR/f31c Ouc
>        kill -USR1 $MULTIPID
>        wait $MULTIPID
> }
> run_test 31c "open-unlink file with multiple links""
>
> test_31d() {
>        opendirunlink $DIR/d31d $DIR/d31d || error
>        $CHECKSTAT -a $DIR/d31d || error
> }
> run_test 31d "remove of open directory""
>
> test_31e() { # bug 2904
>        check_kernel_version 34 || return 0
>        openfilleddirunlink $DIR/d31e || error
> }
> run_test 31e "remove of open non-empty directory""
>
> test_31f() { # bug 4554
>        set -vx
>        mkdir $DIR/d31f
>        $SETSTRIPE $DIR/d31f -s 1048576 -c 1
>        cp /etc/hosts $DIR/d31f
>        ls -l $DIR/d31f
>        multiop_bg_pause $DIR/d31f D_c || return 1
>        MULTIPID=$!
>
>        rm -rv $DIR/d31f || error "first of $DIR/d31f"
>        mkdir $DIR/d31f
>        $SETSTRIPE $DIR/d31f -s 1048576 -c 1
>        cp /etc/hosts $DIR/d31f
>        ls -l $DIR/d31f
>        $DIR/d31f/hosts
>        multiop_bg_pause $DIR/d31f D_c || return 1
>        MULTIPID2=$!
>
>        kill -USR1 $MULTIPID || error "first opendir $MULTIPID not running"
>        wait $MULTIPID || error "first opendir $MULTIPID failed"
>
>        sleep 6
>
>        kill -USR1 $MULTIPID2 || error "second opendir $MULTIPID not
> running"
>        wait $MULTIPID2 || error "second opendir $MULTIPID2 failed"
>        set +vx
> }
> run_test 31f "remove of open directory with open-unlink file""
>
> test_31g() {
>        echo "-- cross directory link --"
>        mkdir $DIR/d31g{a,b}
>        touch $DIR/d31ga/f
>        ln $DIR/d31ga/f $DIR/d31gb/g
>        $CHECKSTAT -t file $DIR/d31ga/f || error "source"
>        [ `stat -c%h $DIR/d31ga/f`" '2' ] || error "source nlink"
>        $CHECKSTAT -t file $DIR/d31gb/g || error "target"
>        [ `stat -c%h $DIR/d31gb/g`" '2' ] || error "target nlink"
> }
> run_test 31g "cross directory link==============="
>
> test_31h() {
>        echo "-- cross directory link --"
>        mkdir $DIR/d31h
>        mkdir $DIR/d31h/dir
>        touch $DIR/d31h/f
>        ln $DIR/d31h/f $DIR/d31h/dir/g
>        $CHECKSTAT -t file $DIR/d31h/f || error "source"
>        [ `stat -c%h $DIR/d31h/f`" '2' ] || error "source nlink"
>        $CHECKSTAT -t file $DIR/d31h/dir/g || error "target"
>        [ `stat -c%h $DIR/d31h/dir/g`" '2' ] || error "target nlink"
> }
> run_test 31h "cross directory link under child==============="
>
> test_31i() {
>        echo "-- cross directory link --"
>        mkdir $DIR/d31i
>        mkdir $DIR/d31i/dir
>        touch $DIR/d31i/dir/f
>        ln $DIR/d31i/dir/f $DIR/d31i/g
>        $CHECKSTAT -t file $DIR/d31i/dir/f || error "source"
>        [ `stat -c%h $DIR/d31i/dir/f`" '2' ] || error "source nlink"
>        $CHECKSTAT -t file $DIR/d31i/g || error "target"
>        [ `stat -c%h $DIR/d31i/g`" '2' ] || error "target nlink"
> }
> run_test 31i "cross directory link under parent==============="
>
>
> test_31j() {
>        mkdir $DIR/d31j
>        mkdir $DIR/d31j/dir1
>        ln $DIR/d31j/dir1 $DIR/d31j/dir2 && error "ln for dir"
>        link $DIR/d31j/dir1 $DIR/d31j/dir3 && error "link for dir"
>        mlink $DIR/d31j/dir1 $DIR/d31j/dir4 && error "mlink for dir"
>        mlink $DIR/d31j/dir1 $DIR/d31j/dir1 && error "mlink to the same dir"
>        return 0
> }
> run_test 31j "link for directory==============="
>
>
> test_31k() {
>        mkdir $DIR/d31k
>        touch $DIR/d31k/s
>        touch $DIR/d31k/exist
>        mlink $DIR/d31k/s $DIR/d31k/t || error "mlink"
>        mlink $DIR/d31k/s $DIR/d31k/exist && error "mlink to exist file"
>        mlink $DIR/d31k/s $DIR/d31k/s && error "mlink to the same file"
>        mlink $DIR/d31k/s $DIR/d31k && error "mlink to parent dir"
>        mlink $DIR/d31k $DIR/d31k/s && error "mlink parent dir to target"
>        mlink $DIR/d31k/not-exist $DIR/d31k/foo && error "mlink non-existing
> to new"
>        mlink $DIR/d31k/not-exist $DIR/d31k/s && error "mlink non-existing
> to exist"
>        return 0
> }
> run_test 31k "link to file: the same, non-existing, dir==============="
>
> test_31m() {
>        mkdir $DIR/d31m
>        touch $DIR/d31m/s
>        mkdir $DIR/d31m2
>        touch $DIR/d31m2/exist
>        mlink $DIR/d31m/s $DIR/d31m2/t || error "mlink"
>        mlink $DIR/d31m/s $DIR/d31m2/exist && error "mlink to exist file"
>        mlink $DIR/d31m/s $DIR/d31m2 && error "mlink to parent dir"
>        mlink $DIR/d31m2 $DIR/d31m/s && error "mlink parent dir to target"
>        mlink $DIR/d31m/not-exist $DIR/d31m2/foo && error "mlink
> non-existing to new"
>        mlink $DIR/d31m/not-exist $DIR/d31m2/s && error "mlink non-existing
> to exist"
>        return 0
> }
> run_test 31m "link to file: the same, non-existing, dir==============="
>
> test_32a() {
>        echo "== more mountpoints and symlinks""
>        [ -e $DIR/d32a ] && rm -fr $DIR/d32a
>        mkdir -p $DIR/d32a/ext2-mountpoint
>        mount -t ext2 -o loop $EXT2_DEV $DIR/d32a/ext2-mountpoint || error
>        $CHECKSTAT -t dir $DIR/d32a/ext2-mountpoint/.. || error
>        $UMOUNT $DIR/d32a/ext2-mountpoint || error
> }
> run_test 32a "stat d32a/ext2-mountpoint/..""
>
> test_32b() {
>        [ -e $DIR/d32b ] && rm -fr $DIR/d32b
>        mkdir -p $DIR/d32b/ext2-mountpoint
>        mount -t ext2 -o loop $EXT2_DEV $DIR/d32b/ext2-mountpoint || error
>        ls -al $DIR/d32b/ext2-mountpoint/.. || error
>        $UMOUNT $DIR/d32b/ext2-mountpoint || error
> }
> run_test 32b "open d32b/ext2-mountpoint/..""
>
> test_32c() {
>        [ -e $DIR/d32c ] && rm -fr $DIR/d32c
>        mkdir -p $DIR/d32c/ext2-mountpoint
>        mount -t ext2 -o loop $EXT2_DEV $DIR/d32c/ext2-mountpoint || error
>        mkdir -p $DIR/d32c/d2/test_dir
>        $CHECKSTAT -t dir $DIR/d32c/ext2-mountpoint/../d2/test_dir || error
>        $UMOUNT $DIR/d32c/ext2-mountpoint || error
> }
> run_test 32c "stat d32c/ext2-mountpoint/../d2/test_dir""
>
> test_32d() {
>        [ -e $DIR/d32d ] && rm -fr $DIR/d32d
>        mkdir -p $DIR/d32d/ext2-mountpoint
>        mount -t ext2 -o loop $EXT2_DEV $DIR/d32d/ext2-mountpoint || error
>        mkdir -p $DIR/d32d/d2/test_dir
>        ls -al $DIR/d32d/ext2-mountpoint/../d2/test_dir || error
>        $UMOUNT $DIR/d32d/ext2-mountpoint || error
> }
> run_test 32d "open d32d/ext2-mountpoint/../d2/test_dir""
>
> test_32e() {
>        [ -e $DIR/d32e ] && rm -fr $DIR/d32e
>        mkdir -p $DIR/d32e/tmp
>        TMP_DIR=$DIR/d32e/tmp
>        ln -s $DIR/d32e $TMP_DIR/symlink11
>        ln -s $TMP_DIR/symlink11 $TMP_DIR/../symlink01
>        $CHECKSTAT -t link $DIR/d32e/tmp/symlink11 || error
>        $CHECKSTAT -t link $DIR/d32e/symlink01 || error
> }
> run_test 32e "stat d32e/symlink->tmp/symlink->lustre-subdir""
>
> test_32f() {
>        [ -e $DIR/d32f ] && rm -fr $DIR/d32f
>        mkdir -p $DIR/d32f/tmp
>        TMP_DIR=$DIR/d32f/tmp
>        ln -s $DIR/d32f $TMP_DIR/symlink11
>        ln -s $TMP_DIR/symlink11 $TMP_DIR/../symlink01
>        ls $DIR/d32f/tmp/symlink11  || error
>        ls $DIR/d32f/symlink01 || error
> }
> run_test 32f "open d32f/symlink->tmp/symlink->lustre-subdir""
>
> test_32g() {
>        TMP_DIR=$DIR/$tdir/tmp
>        mkdir -p $TMP_DIR $DIR/${tdir}2
>        ln -s $DIR/${tdir}2 $TMP_DIR/symlink12
>        ln -s $TMP_DIR/symlink12 $TMP_DIR/../symlink02
>        $CHECKSTAT -t link $TMP_DIR/symlink12 || error
>        $CHECKSTAT -t link $DIR/$tdir/symlink02 || error
>        $CHECKSTAT -t dir -f $TMP_DIR/symlink12 || error
>        $CHECKSTAT -t dir -f $DIR/$tdir/symlink02 || error
> }
> run_test 32g "stat d32g/symlink->tmp/symlink->lustre-subdir/${tdir}2"
>
> test_32h() {
>        rm -fr $DIR/$tdir $DIR/${tdir}2
>        TMP_DIR=$DIR/$tdir/tmp
>        mkdir -p $TMP_DIR $DIR/${tdir}2
>        ln -s $DIR/${tdir}2 $TMP_DIR/symlink12
>        ln -s $TMP_DIR/symlink12 $TMP_DIR/../symlink02
>        ls $TMP_DIR/symlink12 || error
>        ls $DIR/$tdir/symlink02  || error
> }
> run_test 32h "open d32h/symlink->tmp/symlink->lustre-subdir/${tdir}2"
>
> test_32i() {
>        [ -e $DIR/d32i ] && rm -fr $DIR/d32i
>        mkdir -p $DIR/d32i/ext2-mountpoint
>        mount -t ext2 -o loop $EXT2_DEV $DIR/d32i/ext2-mountpoint || error
>        touch $DIR/d32i/test_file
>        $CHECKSTAT -t file $DIR/d32i/ext2-mountpoint/../test_file || error
>        $UMOUNT $DIR/d32i/ext2-mountpoint || error
> }
> run_test 32i "stat d32i/ext2-mountpoint/../test_file""
>
> test_32j() {
>        [ -e $DIR/d32j ] && rm -fr $DIR/d32j
>        mkdir -p $DIR/d32j/ext2-mountpoint
>        mount -t ext2 -o loop $EXT2_DEV $DIR/d32j/ext2-mountpoint || error
>        touch $DIR/d32j/test_file
>        cat $DIR/d32j/ext2-mountpoint/../test_file || error
>        $UMOUNT $DIR/d32j/ext2-mountpoint || error
> }
> run_test 32j "open d32j/ext2-mountpoint/../test_file""
>
> test_32k() {
>        rm -fr $DIR/d32k
>        mkdir -p $DIR/d32k/ext2-mountpoint
>        mount -t ext2 -o loop $EXT2_DEV $DIR/d32k/ext2-mountpoint
>        mkdir -p $DIR/d32k/d2
>        touch $DIR/d32k/d2/test_file || error
>        $CHECKSTAT -t file $DIR/d32k/ext2-mountpoint/../d2/test_file ||
> error
>        $UMOUNT $DIR/d32k/ext2-mountpoint || error
> }
> run_test 32k "stat d32k/ext2-mountpoint/../d2/test_file""
>
> test_32l() {
>        rm -fr $DIR/d32l
>        mkdir -p $DIR/d32l/ext2-mountpoint
>        mount -t ext2 -o loop $EXT2_DEV $DIR/d32l/ext2-mountpoint || error
>        mkdir -p $DIR/d32l/d2
>        touch $DIR/d32l/d2/test_file
>        cat  $DIR/d32l/ext2-mountpoint/../d2/test_file || error
>        $UMOUNT $DIR/d32l/ext2-mountpoint || error
> }
> run_test 32l "open d32l/ext2-mountpoint/../d2/test_file""
>
> test_32m() {
>        rm -fr $DIR/d32m
>        mkdir -p $DIR/d32m/tmp
>        TMP_DIR=$DIR/d32m/tmp
>        ln -s $DIR $TMP_DIR/symlink11
>        ln -s $TMP_DIR/symlink11 $TMP_DIR/../symlink01
>        $CHECKSTAT -t link $DIR/d32m/tmp/symlink11 || error
>        $CHECKSTAT -t link $DIR/d32m/symlink01 || error
> }
> run_test 32m "stat d32m/symlink->tmp/symlink->lustre-root""
>
> test_32n() {
>        rm -fr $DIR/d32n
>        mkdir -p $DIR/d32n/tmp
>        TMP_DIR=$DIR/d32n/tmp
>        ln -s $DIR $TMP_DIR/symlink11
>        ln -s $TMP_DIR/symlink11 $TMP_DIR/../symlink01
>        ls -l $DIR/d32n/tmp/symlink11  || error
>        ls -l $DIR/d32n/symlink01 || error
> }
> run_test 32n "open d32n/symlink->tmp/symlink->lustre-root""
>
> test_32o() {
>        rm -fr $DIR/d32o $DIR/$tfile
>        touch $DIR/$tfile
>        mkdir -p $DIR/d32o/tmp
>        TMP_DIR=$DIR/d32o/tmp
>        ln -s $DIR/$tfile $TMP_DIR/symlink12
>        ln -s $TMP_DIR/symlink12 $TMP_DIR/../symlink02
>        $CHECKSTAT -t link $DIR/d32o/tmp/symlink12 || error
>        $CHECKSTAT -t link $DIR/d32o/symlink02 || error
>        $CHECKSTAT -t file -f $DIR/d32o/tmp/symlink12 || error
>        $CHECKSTAT -t file -f $DIR/d32o/symlink02 || error
> }
> run_test 32o "stat d32o/symlink->tmp/symlink->lustre-root/$tfile"
>
> test_32p() {
>    log 32p_1
>        rm -fr $DIR/d32p
>    log 32p_2
>        rm -f $DIR/$tfile
>    log 32p_3
>        touch $DIR/$tfile
>    log 32p_4
>        mkdir -p $DIR/d32p/tmp
>    log 32p_5
>        TMP_DIR=$DIR/d32p/tmp
>    log 32p_6
>        ln -s $DIR/$tfile $TMP_DIR/symlink12
>    log 32p_7
>        ln -s $TMP_DIR/symlink12 $TMP_DIR/../symlink02
>    log 32p_8
>        cat $DIR/d32p/tmp/symlink12 || error
>    log 32p_9
>        cat $DIR/d32p/symlink02 || error
>    log 32p_10
> }
> run_test 32p "open d32p/symlink->tmp/symlink->lustre-root/$tfile"
>
> test_32q() {
>        [ -e $DIR/d32q ] && rm -fr $DIR/d32q
>        mkdir -p $DIR/d32q
>        touch $DIR/d32q/under_the_mount
>        mount -t ext2 -o loop $EXT2_DEV $DIR/d32q
>        ls $DIR/d32q/under_the_mount && error || true
>        $UMOUNT $DIR/d32q || error
> }
> run_test 32q "stat follows mountpoints in Lustre (should return error)"
>
> test_32r() {
>        [ -e $DIR/d32r ] && rm -fr $DIR/d32r
>        mkdir -p $DIR/d32r
>        touch $DIR/d32r/under_the_mount
>        mount -t ext2 -o loop $EXT2_DEV $DIR/d32r
>        ls $DIR/d32r | grep -q under_the_mount && error || true
>        $UMOUNT $DIR/d32r || error
> }
> run_test 32r "opendir follows mountpoints in Lustre (should return error)"
>
> test_33() {
>        rm -f $DIR/$tfile
>        touch $DIR/$tfile
>        chmod 444 $DIR/$tfile
>        chown $RUNAS_ID $DIR/$tfile
>        log 33_1
>        $RUNAS $OPENFILE -f O_RDWR $DIR/$tfile && error || true
>        log 33_2
> }
> run_test 33 "write file with mode 444 (should return error)""
>
> test_33a() {
>        rm -fr $DIR/d33
>        mkdir -p $DIR/d33
>        chown $RUNAS_ID $DIR/d33
>        $RUNAS $OPENFILE -f O_RDWR:O_CREAT -m 0444 $DIR/d33/f33|| error
> "create"
>        $RUNAS $OPENFILE -f O_RDWR:O_CREAT -m 0444 $DIR/d33/f33 && \
>                error "open RDWR" || true
> }
> run_test 33a "test open file(mode=0444) with O_RDWR (should return error)"
>
> test_33b() {
>        rm -fr $DIR/d33
>        mkdir -p $DIR/d33
>        chown $RUNAS_ID $DIR/d33
>        $RUNAS $OPENFILE -f 1286739555 $DIR/d33/f33 && error "create" ||
> true
> }
> run_test 33b "test open file with malformed flags (No panic and return
> error)"
>
> TEST_34_SIZE=${TEST_34_SIZE:-2000000000000}
> test_34a() {
>        rm -f $DIR/f34
>        $MCREATE $DIR/f34 || error
>        $TRUNCATE $DIR/f34 $TEST_34_SIZE || error
>        $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 || error
> }
> run_test 34a "truncate file that has not been opened""
>
> test_34b() {
>        [ ! -f $DIR/f34 ] && test_34a
>        $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 || error
>        $OPENFILE -f O_RDONLY $DIR/f34
>        $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 || error
> }
> run_test 34b "O_RDONLY opening file doesn't create objects""
>
> test_34c() {
>        [ ! -f $DIR/f34 ] && test_34a
>        $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 || error
>        $OPENFILE -f O_RDWR $DIR/f34
>        $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 || error
> }
> run_test 34c "O_RDWR opening file-with-size works""
>
> test_34d() {
>        [ ! -f $DIR/f34 ] && test_34a
>        dd if=/dev/zero of=$DIR/f34 conv=notrunc bs=4k count=1 || error
>        $CHECKSTAT -s $TEST_34_SIZE $DIR/f34 || error
>        rm $DIR/f34
> }
> run_test 34d "write to sparse file""
>
> test_34e() {
>        rm -f $DIR/f34e
>        $MCREATE $DIR/f34e || error
>        $TRUNCATE $DIR/f34e 1000 || error
>        $CHECKSTAT -s 1000 $DIR/f34e || error
>        $OPENFILE -f O_RDWR $DIR/f34e
>        $CHECKSTAT -s 1000 $DIR/f34e || error
> }
> run_test 34e "create objects, some with size and some without""
>
> test_34f() { # bug 6242, 6243
>        SIZE34F=48000
>        rm -f $DIR/f34f
>        $MCREATE $DIR/f34f || error
>        $TRUNCATE $DIR/f34f $SIZE34F || error "truncating $DIR/f3f to
> $SIZE34F"
>        dd if=$DIR/f34f of=$TMP/f34f
>        $CHECKSTAT -s $SIZE34F $TMP/f34f || error "$TMP/f34f not $SIZE34F
> bytes"
>        dd if=/dev/zero of=$TMP/f34fzero bs=$SIZE34F count=1
>        cmp $DIR/f34f $TMP/f34fzero || error "$DIR/f34f not all zero"
>        cmp $TMP/f34f $TMP/f34fzero || error "$TMP/f34f not all zero"
>        rm $TMP/f34f $TMP/f34fzero $DIR/f34f
> }
> run_test 34f "read from a file with no objects until EOF""
>
> test_35a() {
>        cp /bin/sh $DIR/f35a
>        chmod 444 $DIR/f35a
>        chown $RUNAS_ID $DIR/f35a
>        $RUNAS $DIR/f35a && error || true
>        rm $DIR/f35a
> }
> run_test 35a "exec file with mode 444 (should return and not leak)""
>
> test_36a() {
>        rm -f $DIR/f36
>        utime $DIR/f36 || error
> }
> run_test 36a "MDS utime check (mknod, utime)""
>
> test_36b() {
>        echo "" > $DIR/f36
>        utime $DIR/f36 || error
> }
> run_test 36b "OST utime check (open, utime)""
>
> test_36c() {
>        rm -f $DIR/d36/f36
>        mkdir $DIR/d36
>        chown $RUNAS_ID $DIR/d36
>        $RUNAS utime $DIR/d36/f36 || error
> }
> run_test 36c "non-root MDS utime check (mknod, utime)""
>
> test_36d() {
>        [ ! -d $DIR/d36 ] && test_36c
>        echo "" > $DIR/d36/f36
>        $RUNAS utime $DIR/d36/f36 || error
> }
> run_test 36d "non-root OST utime check (open, utime)""
>
> test_36e() {
>        [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID" UID = $UID -- skipping" &&
> return
>        mkdir -p $DIR/$tdir
>        touch $DIR/$tdir/$tfile
>        $RUNAS utime $DIR/$tdir/$tfile && \
>                error "utime worked, expected failure" || true
> }
> run_test 36e "utime on non-owned file (should return error)""
>
> test_37() {
>        mkdir -p $DIR/$tdir
>        echo f > $DIR/$tdir/fbugfile
>        mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir
>        ls $DIR/$tdir | grep "\<fbugfile\>" && error
>        $UMOUNT $DIR/$tdir || error
>        rm -f $DIR/$tdir/fbugfile || error
> }
> run_test 37 "ls a mounted file system to check old content""
>
> test_38() {
>        local file=$DIR/$tfile
>        touch $file
>        openfile -f O_DIRECTORY $file
>        local RC=$?
>        local ENOTDIR=20
>        [ $RC -eq 0 ] && error "opened file $file with O_DIRECTORY" || true
>        [ $RC -eq $ENOTDIR ] || error "error $RC should be ENOTDIR
> ($ENOTDIR)"
> }
> run_test 38 "open a regular file with O_DIRECTORY should return -ENOTDIR""
>
> test_39() {
>        touch $DIR/$tfile
>        touch $DIR/${tfile}2
> #       ls -l  $DIR/$tfile $DIR/${tfile}2
> #       ls -lu  $DIR/$tfile $DIR/${tfile}2
> #       ls -lc  $DIR/$tfile $DIR/${tfile}2
>        sleep 2
>        $OPENFILE -f O_CREAT:O_TRUNC:O_WRONLY $DIR/${tfile}2
>        if [ ! $DIR/${tfile}2 -nt $DIR/$tfile ]; then
>                echo "mtime"
>                ls -l  $DIR/$tfile $DIR/${tfile}2
>                echo "atime"
>                ls -lu  $DIR/$tfile $DIR/${tfile}2
>                echo "ctime"
>                ls -lc  $DIR/$tfile $DIR/${tfile}2
>                error "O_TRUNC didn't change timestamps"
>        fi
> }
> run_test 39 "mtime changed on create""
>
> test_40() {
>        dd if=/dev/zero of=$DIR/f40 bs=4096 count=1
>        $RUNAS $OPENFILE -f O_WRONLY:O_TRUNC $DIR/f40 && error
>        $CHECKSTAT -t file -s 4096 $DIR/f40 || error
> }
> run_test 40 "failed open(O_TRUNC) doesn't truncate""
>
> test_43() {
>        mkdir -p $DIR/$tdir
>        cp -p /bin/ls $DIR/$tdir/$tfile
>        multiop $DIR/$tdir/$tfile Ow_c &
>        pid=$!
>        # give multiop a chance to open
>        sleep 1
>
>        $DIR/$tdir/$tfile && error || true
>        kill -USR1 $pid
> }
> run_test 43 "execution of file opened for write should return -ETXTBSY"
>
> test_43a() {
>        mkdir -p $DIR/d43
>        cp -p `which multiop` $DIR/d43/multiop || cp -p multiop
> $DIR/d43/multiop
>        MULTIOP_PROG=$DIR/d43/multiop multiop_bg_pause $TMP/test43.junk O_c
> || return 1
>        MULTIOP_PID=$!
>        multiop $DIR/d43/multiop Oc && error "expected error, got success"
>        kill -USR1 $MULTIOP_PID || return 2
>        wait $MULTIOP_PID || return 3
>        rm $TMP/test43.junk
> }
> run_test 43a "open(RDWR) of file being executed should return -ETXTBSY"
>
> test_43b() {
>        mkdir -p $DIR/d43
>        cp -p `which multiop` $DIR/d43/multiop || cp -p multiop
> $DIR/d43/multiop
>        MULTIOP_PROG=$DIR/d43/multiop multiop_bg_pause $TMP/test43.junk O_c
> || return 1
>        MULTIOP_PID=$!
>        truncate $DIR/d43/multiop 0 && error "expected error, got success"
>        kill -USR1 $MULTIOP_PID || return 2
>        wait $MULTIOP_PID || return 3
>        rm $TMP/test43.junk
> }
> run_test 43b "truncate of file being executed should return -ETXTBSY"
>
> page_size() {
>        getconf PAGE_SIZE
> }
>
> test_48a() { # bug 2399
>        mkdir -p $DIR/d48a
>        cd $DIR/d48a
>        mv $DIR/d48a $DIR/d48.new || error "move directory failed"
>        mkdir $DIR/d48a || error "recreate directory failed"
>        touch foo || error "'touch foo' failed after recreating cwd"
>        mkdir bar || error "'mkdir foo' failed after recreating cwd"
>        touch .foo || error "'touch .foo' failed after recreating cwd"
>        mkdir .bar || error "'mkdir .foo' failed after recreating cwd"
>        ls . > /dev/null || error "'ls .' failed after recreating cwd"
>        ls .. > /dev/null || error "'ls ..' failed after removing cwd"
>        cd . || error "'cd .' failed after recreating cwd"
>        mkdir . && error "'mkdir .' worked after recreating cwd"
>        rmdir . && error "'rmdir .' worked after recreating cwd"
>        ln -s . baz || error "'ln -s .' failed after recreating cwd"
>        cd .. || error "'cd ..' failed after recreating cwd"
> }
> run_test 48a "Access renamed working dir (should return errors)="
>
> test_48b() { # bug 2399
>        mkdir -p $DIR/d48b
>        cd $DIR/d48b
>        rmdir $DIR/d48b || error "remove cwd $DIR/d48b failed"
>        touch foo && error "'touch foo' worked after removing cwd"
>        mkdir foo && error "'mkdir foo' worked after removing cwd"
>        touch .foo && error "'touch .foo' worked after removing cwd"
>        mkdir .foo && error "'mkdir .foo' worked after removing cwd"
>        ls . > /dev/null && error "'ls .' worked after removing cwd"
>        ls .. > /dev/null || error "'ls ..' failed after removing cwd"
>        mkdir . && error "'mkdir .' worked after removing cwd"
>        rmdir . && error "'rmdir .' worked after removing cwd"
>        ln -s . foo && error "'ln -s .' worked after removing cwd"
>        cd .. || echo "'cd ..' failed after removing cwd `pwd`"  #bug 3517
> }
> run_test 48b "Access removed working dir (should return errors)="
>
> test_48c() { # bug 2350
>        mkdir -p $DIR/d48c/dir
>        cd $DIR/d48c/dir
>        rmdir $DIR/d48c/dir || error "remove cwd $DIR/d48c/dir failed"
>        touch foo && error "'touch foo' worked after removing cwd"
>        mkdir foo && error "'mkdir foo' worked after removing cwd"
>        touch .foo && error "'touch .foo' worked after removing cwd"
>        mkdir .foo && error "'mkdir .foo' worked after removing cwd"
>        ls . && error "'ls .' worked after removing cwd"
>        ls .. || error "'ls ..' failed after removing cwd"
>        mkdir . && error "'mkdir .' worked after removing cwd"
>        rmdir . && error "'rmdir .' worked after removing cwd"
>        ln -s . foo && error "'ln -s .' worked after removing cwd"
>        cd .. || echo "'cd ..' failed after removing cwd `pwd`" #bug 3415
> }
> run_test 48c "Access removed working subdir (should return errors)"
>
> test_48d() { # bug 2350
>        mkdir -p $DIR/d48d/dir
>        cd $DIR/d48d/dir
>        rmdir $DIR/d48d/dir || error "remove cwd $DIR/d48d/dir failed"
>        rmdir $DIR/d48d || error "remove parent $DIR/d48d failed"
>        touch foo && error "'touch foo' worked after removing parent"
>        mkdir foo && error "'mkdir foo' worked after removing parent"
>        touch .foo && error "'touch .foo' worked after removing parent"
>        mkdir .foo && error "'mkdir .foo' worked after removing parent"
>        ls . && error "'ls .' worked after removing parent"
>        ls .. && error "'ls ..' worked after removing parent"
>        mkdir . && error "'mkdir .' worked after removing parent"
>        rmdir . && error "'rmdir .' worked after removing parent"
>        ln -s . foo && error "'ln -s .' worked after removing parent"
> }
> run_test 48d "Access removed parent subdir (should return errors)"
>
> test_48e() { # bug 4134
>        mkdir -p $DIR/d48e/dir
>        cd $DIR/d48e/dir
>        rmdir $DIR/d48e/dir || error "remove cwd $DIR/d48e/dir failed"
>        rmdir $DIR/d48e || error "remove parent $DIR/d48e failed"
>        touch $DIR/d48e || error "'touch $DIR/d48e' failed"
>        chmod +x $DIR/d48e || error "'chmod +x $DIR/d48e' failed"
>        # On a buggy kernel addition of "touch foo" after cd .. will
>        # produce kernel oops in lookup_hash_it
>        touch ../foo && error "'cd ..' worked after recreate parent"
>        cd $DIR
>        rm $DIR/d48e || error "rm '$DIR/d48e' failed"
> }
> run_test 48e "Access to recreated parent subdir (should return errors)"
>
> test_50() {
>        # bug 1485
>        mkdir $DIR/d50
>        cd $DIR/d50
>        ls /proc/$$/cwd || error
> }
> run_test 50 "special situations: /proc symlinks ""
>
> test_51a() {    # was test_51
>        # bug 1516 - create an empty entry right after ".." then split dir
>        mkdir $DIR/d51
>        touch $DIR/d51/foo
>        $MCREATE $DIR/d51/bar
>        rm $DIR/d51/foo
>        createmany -m $DIR/d51/longfile 201
>        FNUM=202
>        while [ `ls -sd $DIR/d51 | awk '{ print $1 }'` -eq 4 ]; do
>                $MCREATE $DIR/d51/longfile$FNUM
>                FNUM=$(($FNUM + 1))
>                echo -n "+"
>        done
>        echo
>        ls -l $DIR/d51 > /dev/null || error
> }
> run_test 51a "special situations: split htree with empty entry""
>
> export NUMTEST=70000
> test_51b() {
>        NUMFREE=`df -i -P $DIR | tail -n 1 | awk '{ print $4 }'`
>        [ $NUMFREE -lt 21000 ] && \
>                skip "not enough free inodes ($NUMFREE)" && \
>                return
>
>        check_kernel_version 40 || NUMTEST=31000
>        [ $NUMFREE -lt $NUMTEST ] && NUMTEST=$(($NUMFREE - 50))
>
>        mkdir -p $DIR/d51b
>        createmany -d $DIR/d51b/t- $NUMTEST
> }
> run_test 51b "mkdir .../t-0 --- .../t-$NUMTEST""
>
> test_51c() {
>        [ ! -d $DIR/d51b ] && skip "$DIR/51b missing" && \
>                return
>
>        unlinkmany -d $DIR/d51b/t- $NUMTEST
> }
> run_test 51c "rmdir .../t-0 --- .../t-$NUMTEST""
>
> test_52a() {
>        [ -f $DIR/d52a/foo ] && chattr -a $DIR/d52a/foo
>        mkdir -p $DIR/d52a
>        touch $DIR/d52a/foo
>        chattr"a $DIR/d52a/foo || error "chattr =a failed"
>        echo bar >> $DIR/d52a/foo || error "append bar failed"
>        cp /etc/hosts $DIR/d52a/foo && error "cp worked"
>        rm -f $DIR/d52a/foo 2>/dev/null && error "rm worked"
>        link $DIR/d52a/foo $DIR/d52a/foo_link 2>/dev/null && error "link
> worked"
>        echo foo >> $DIR/d52a/foo || error "append foo failed"
>        mrename $DIR/d52a/foo $DIR/d52a/foo_ren && error "rename worked"
>        lsattr $DIR/d52a/foo | egrep -q "^-+a-+ $DIR/d52a/foo" || error
> "lsattr"
>        chattr -a $DIR/d52a/foo || error "chattr -a failed"
>
>        rm -fr $DIR/d52a || error "cleanup rm failed"
> }
> run_test 52a "append-only flag test (should return errors)""
>
> test_52b() {
>        [ -f $DIR/d52b/foo ] && chattr -i $DIR/d52b/foo
>        mkdir -p $DIR/d52b
>        touch $DIR/d52b/foo
>        chattr"i $DIR/d52b/foo || error
>        cat test > $DIR/d52b/foo && error
>        cp /etc/hosts $DIR/d52b/foo && error
>        rm -f $DIR/d52b/foo 2>/dev/null && error
>        link $DIR/d52b/foo $DIR/d52b/foo_link 2>/dev/null && error
>        echo foo >> $DIR/d52b/foo && error
>        mrename $DIR/d52b/foo $DIR/d52b/foo_ren && error
>        [ -f $DIR/d52b/foo ] || error
>        [ -f $DIR/d52b/foo_ren ] && error
>        lsattr $DIR/d52b/foo | egrep -q "^-+i-+ $DIR/d52b/foo" || error
>        chattr -i $DIR/d52b/foo || error
>
>        rm -fr $DIR/d52b || error
> }
> run_test 52b "immutable flag test (should return errors)""
>
> test_54b() {
>        f="$DIR/f54b"
>        mknod $f c 1 3
>        chmod 0666 $f
>        dd if=/dev/zero of=$f bs=`page_size` count=1
> }
> run_test 54b "char device works in lustre""
>
> find_loop_dev() {
>        [ -b /dev/loop/0 ] && LOOPBASE=/dev/loop/
>        [ -b /dev/loop0 ] && LOOPBASE=/dev/loop
>        [ -z "$LOOPBASE" ] && echo "/dev/loop/0 and /dev/loop0 gone?" &&
> return
>
>        for i in `seq 3 7`; do
>                losetup $LOOPBASE$i > /dev/null 2>&1 && continue
>                LOOPDEV=$LOOPBASE$i
>                LOOPNUM=$i
>                break
>        done
> }
>
> test_54c() {
>        tfile="$DIR/f54c"
>        tdir="$DIR/d54c"
>        loopdev="$DIR/loop54c"
>
>        find_loop_dev
>        [ -z "$LOOPNUM" ] && echo "couldn't find empty loop device" &&
> return
>        mknod $loopdev b 7 $LOOPNUM
>        echo "make a loop file system with $tfile on $loopdev ($LOOPNUM)..."
>        dd if=/dev/zero of=$tfile bs=`page_size` seek=1024 count=1 >
> /dev/null
>        losetup $loopdev $tfile || error "can't set up $loopdev for $tfile"
>        mkfs.ext2 $loopdev || error "mke2fs on $loopdev"
>        mkdir -p $tdir
>        mount -t ext2 $loopdev $tdir || error "error mounting $loopdev on
> $tdir"
>        dd if=/dev/zero of=$tdir/tmp bs=`page_size` count=30 || error "dd
> write"
>        df $tdir
>        dd if=$tdir/tmp of=/dev/zero bs=`page_size` count=30 || error "dd
> read"
>        $UMOUNT $tdir
>        losetup -d $loopdev
>        rm $loopdev
> }
> run_test 54c "block device works in lustre""
>
> test_54d() {
>        f="$DIR/f54d"
>        string="aaaaaa"
>        mknod $f p
>        [ "$string"" `echo $string > $f | cat $f` ] || error
> }
> run_test 54d "fifo device works in lustre""
>
> test_54e() {
>        check_kernel_version 46 || return 0
>        f="$DIR/f54e"
>        string="aaaaaa"
>        cp -aL /dev/console $f
>        echo $string > $f || error
> }
> run_test 54e "console/tty device works in lustre""
>
> test_61() {
>        f="$DIR/f61"
>        dd if=/dev/zero of=$f bs=`page_size` count=1
>        multiop $f OSMWUc || error
>        sync
> }
> run_test 61 "mmap() writes don't make sync hang""
>
> # bug 2543 - update blocks count on client
> test_66() {
>        COUNT=${COUNT:-8}
>        dd if=/dev/zero of=$DIR/f66 bs=1k count=$COUNT
>        sync; sleep 1; sync
>        BLOCKS=`ls -s $DIR/f66 | awk '{ print $1 }'`
>        [ $BLOCKS -ge $COUNT ] || error "$DIR/f66 blocks $BLOCKS < $COUNT"
> }
> run_test 66 "update inode blocks count on client""
>
> LLOOP=
> cleanup_68() {
>        trap 0
>        if [ ! -z "$LLOOP" ]; then
>                if swapon -s | grep -q $LLOOP; then
>                        swapoff $LLOOP || error "swapoff failed"
>                fi
>
>                losetup -d $LOOPDEV || error "detach failed"
>                unset LOOPDEV
>                unset LLOOP
>        fi
>        rm -f $DIR/f68*
> }
>
> meminfo() {
>        awk '($1" "'$1':") { print $2 }' /proc/meminfo
> }
>
> swap_used() {
>        swapon -s | awk '($1" "'$1'") { print $4 }'
> }
>
> # excercise swapping to lustre by adding a high priority swapfile entry
> # and then consuming memory until it is used.
> test_68b() {  # was test_68
>        [ "$UID" != 0 ] && skip "must run as root" && return
>
>        MEMTOTAL=`meminfo MemTotal`
>        NR_BLOCKS=$((MEMTOTAL>>8))
>        [[ $NR_BLOCKS -le 2048 ]] && NR_BLOCKS=2048
>
>        dd if=/dev/zero of=$DIR/f68b bs=64k seek=$NR_BLOCKS count=1
>        mkswap $DIR/f68b
>
>        trap cleanup_68 EXIT
>
>        swapon -p 32767 $LLOOP || error "swapon $LLOOP failed"
>
>        echo "before: `swapon -s | grep $LLOOP`"
>        $MEMHOG $MEMTOTAL || error "error allocating $MEMTOTAL kB"
>        echo "after: `swapon -s | grep $LLOOP`"
>        SWAPUSED=`swap_used $LLOOP`
>
>        cleanup_68
>
>        [ $SWAPUSED -eq 0 ] && echo "no swap used???" || true
> }
> run_test 68b "support swapping to Lustre""
>
> test_72() { # bug 5695 - Test that on 2.6 remove_suid works properly
>        [ "$RUNAS_ID"" "$UID" ] && skip "RUNAS_ID = UID = $UID -- skipping"
> && return
>
>        # Check that testing environment is properly set up. Skip if not
>        FAIL_ON_ERROR=false check_runas_id_ret $RUNAS_ID $RUNAS_ID $RUNAS ||
> {
>                skip "User $RUNAS_ID does not exist - skipping"
>                return 0
>        }
>        touch $DIR/f72
>        chmod 777 $DIR/f72
>        chmod ug+s $DIR/f72
>        $RUNAS dd if=/dev/zero of=$DIR/f72 bs=512 count=1 || error
>        # See if we are still setuid/sgid
>        test -u $DIR/f72 -o -g $DIR/f72 && error "S/gid is not dropped on
> write"
> }
> run_test 72 "Test that remove suid works properly (bug5695)""
>
> test_78() { # bug 10901
>        NSEQ=5
>        F78SIZE=$(($(awk '/MemFree:/ { print $2 }' /proc/meminfo) / 1024))
>        echo "MemFree: $F78SIZE, Max file size: $MAXFREE"
>        MEMTOTAL=$(($(awk '/MemTotal:/ { print $2 }' /proc/meminfo) / 1024))
>        echo "MemTotal: $MEMTOTAL"
> # reserve 256MB of memory for the kernel and other running processes,
> # and then take 1/2 of the remaining memory for the read/write buffers.
>        if [ $MEMTOTAL -gt 512 ] ;then
>                MEMTOTAL=$(((MEMTOTAL - 256 ) / 2))
>        else
>                # for those poor memory-starved high-end clusters...
>                MEMTOTAL=$((MEMTOTAL / 2))
>        fi
>        echo "Mem to use for directio: $MEMTOTAL"
>        [ $F78SIZE -gt $MEMTOTAL ] && F78SIZE=$MEMTOTAL
>        [ $F78SIZE -gt 512 ] && F78SIZE=512
>        [ $F78SIZE -gt $((MAXFREE / 1024)) ] && F78SIZE=$((MAXFREE / 1024))
>        SMALLEST=`df $DIR | awk '{print $4}' | tail -1`
>        [ $SMALLEST -lt 10240 ] && \
>                skip "too small OSTSIZE, useless to run large O_DIRECT test"
> && return 0
>
>        [ $F78SIZE -gt $((SMALLEST * $OSTCOUNT / 1024 - 80)) ] && \
>                F78SIZE=$((SMALLEST * $OSTCOUNT / 1024 - 80))
>
>        [ "$SLOW"" "no" ] && NSEQ=1 && [ $F78SIZE -gt 32 ] && F78SIZE=32
>        echo "File size: $F78SIZE"
>        $SETSTRIPE $DIR/$tfile -c $OSTCOUNT || error "setstripe failed"
>        for i in `seq 1 $NSEQ`
>        do
>                FSIZE=$(($F78SIZE / ($NSEQ - $i + 1)))
>                echo directIO rdwr round $i of $NSEQ
>                $DIRECTIO rdwr $DIR/$tfile 0 $FSIZE 1048576||error "rdwr
> failed"
>        done
>
>        rm -f $DIR/$tfile
> }
> run_test 78 "handle large O_DIRECT writes correctly""
>
> test_80() { # bug 10718
>        dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 seek=1M
>        sync; sleep 1; sync
>        local BEFORE=`date +%s`
>        cancel_lru_locks osc
>        local AFTER=`date +%s`
>        local DIFF=$((AFTER-BEFORE))
>        if [ $DIFF -gt 1 ] ; then
>                error "elapsed for 1M@1T" $DIFF"
>        fi
>        true
>        rm -f $DIR/$tfile
> }
> run_test 80 "Page eviction is equally fast at high offsets too ""
>
> test_99a() {
>        [ -z "$(which cvs 2>/dev/null)" ] && skip "could not find cvs" && \
>            return
>        mkdir -p $DIR/d99cvsroot
>        chown $RUNAS_ID $DIR/d99cvsroot
>        local oldPWD=$PWD       # bug 13584, use $TMP as working dir
>        cd $TMP
>
>        $RUNAS cvs -d $DIR/d99cvsroot init || error
>        cd $oldPWD
> }
> run_test 99a "cvs init""
>
> test_99b() {
>        [ -z "$(which cvs 2>/dev/null)" ] && skip "could not find cvs" &&
> return
>        [ ! -d $DIR/d99cvsroot ] && test_99a
>        cd /etc/init.d
>        # some versions of cvs import exit(1) when asked to import links or
>        # files they can't read.  ignore those files.
>        TOIGNORE=$(find . -type l -printf '-I %f\n' -o \
>                        ! -perm +4 -printf '-I %f\n')
>        $RUNAS cvs -d $DIR/d99cvsroot import -m "nomesg" $TOIGNORE \
>                d99reposname vtag rtag
> }
> run_test 99b "cvs import""
>
> test_99c() {
>        [ -z "$(which cvs 2>/dev/null)" ] && skip "could not find cvs" &&
> return
>        [ ! -d $DIR/d99cvsroot ] && test_99b
>        cd $DIR
>        mkdir -p $DIR/d99reposname
>        chown $RUNAS_ID $DIR/d99reposname
>        $RUNAS cvs -d $DIR/d99cvsroot co d99reposname
> }
> run_test 99c "cvs checkout""
>
> test_99d() {
>        [ -z "$(which cvs 2>/dev/null)" ] && skip "could not find cvs" &&
> return
>        [ ! -d $DIR/d99cvsroot ] && test_99c
>        cd $DIR/d99reposname
>        $RUNAS touch foo99
>        $RUNAS cvs add -m 'addmsg' foo99
> }
> run_test 99d "cvs add""
>
> test_99e() {
>        [ -z "$(which cvs 2>/dev/null)" ] && skip "could not find cvs" &&
> return
>        [ ! -d $DIR/d99cvsroot ] && test_99c
>        cd $DIR/d99reposname
>        $RUNAS cvs update
> }
> run_test 99e "cvs update""
>
> test_99f() {
>        [ -z "$(which cvs 2>/dev/null)" ] && skip "could not find cvs" &&
> return
>        [ ! -d $DIR/d99cvsroot ] && test_99d
>        cd $DIR/d99reposname
>        $RUNAS cvs commit -m 'nomsg' foo99
>    rm -fr $DIR/d99cvsroot
> }
> run_test 99f "cvs commit""
>
> function get_named_value()
> {
>    local tag
>
>    tag=$1
>    while read ;do
>        line=$REPLY
>        case $line in
>        $tag*)
>            echo $line | sed "s/^$tag//"
>            break
>            ;;
>        esac
>    done
> }
>
> export SETUP_TEST102=no
> setup_test102() {
>        [ "$SETUP_TEST102"" "yes" ] && return
>        mkdir -p $DIR/$tdir
>        chown $RUNAS_ID $DIR/$tdir
>        STRIPE_SIZE=65536
>        STRIPE_OFFSET=1
>        STRIPE_COUNT=$OSTCOUNT
>        [ $OSTCOUNT -gt 4 ] && STRIPE_COUNT=4
>
>        trap cleanup_test102 EXIT
>        cd $DIR
>        $1 $SETSTRIPE $tdir -s $STRIPE_SIZE -i $STRIPE_OFFSET -c
> $STRIPE_COUNT
>        cd $DIR/$tdir
>        for num in 1 2 3 4
>        do
>                for count in `seq 1 $STRIPE_COUNT`
>                do
>                        for offset in `seq 0 $[$STRIPE_COUNT - 1]`
>                        do
>                                local stripe_size=`expr $STRIPE_SIZE \*
> $num`
>                                local file=file"$num-$offset-$count"
>                                $1 $SETSTRIPE $file -s $stripe_size -i
> $offset -c $count
>                        done
>                done
>        done
>
>        cd $DIR
>        $1 $TAR cf $TMP/f102.tar $tdir --xattrs
>        SETUP_TEST102=yes
> }
>
> cleanup_test102() {
>        trap 0
>        [ "$SETUP_TEST102"" "yes" ] || return 0
>        rm -f $TMP/f102.tar
>        SETUP_TEST102=no
> }
>
> test_102a() {
>        local testfile=$DIR/xattr_testfile
>
>        rm -f $testfile
>        touch $testfile
>
>        [ "$UID" != 0 ] && skip "must run as root" && return
>        [ -z "`lctl get_param -n mdc.*-mdc-*.connect_flags | grep xattr`" ]
> && skip "must have user_xattr" && return
>
>        [ -z "$(which setfattr 2>/dev/null)" ] && skip "could not find
> setfattr" && return
>
>        echo "set/get xattr..."
>        setfattr -n trusted.name1 -v value1 $testfile || error
>        [ "`getfattr -n trusted.name1 $testfile 2> /dev/null | \
>        grep "trusted.name1"`"" "trusted.name1=\"value1\"" ] || error
>
>        setfattr -n user.author1 -v author1 $testfile || error
>        [ "`getfattr -n user.author1 $testfile 2> /dev/null | \
>        grep "user.author1"`"" "user.author1=\"author1\"" ] || error
>
>        echo "listxattr..."
>        setfattr -n trusted.name2 -v value2 $testfile || error
>        setfattr -n trusted.name3 -v value3 $testfile || error
>        [ `getfattr -d -m "^trusted" $testfile 2> /dev/null | \
>        grep "trusted.name" | wc -l` -eq 3 ] || error
>
>
>        setfattr -n user.author2 -v author2 $testfile || error
>        setfattr -n user.author3 -v author3 $testfile || error
>        [ `getfattr -d -m "^user" $testfile 2> /dev/null | \
>        grep "user" | wc -l` -eq 3 ] || error
>
>        echo "remove xattr..."
>        setfattr -x trusted.name1 $testfile || error
>        getfattr -d -m trusted $testfile 2> /dev/null | \
>        grep "trusted.name1" && error || true
>
>        setfattr -x user.author1 $testfile || error
>        getfattr -d -m user $testfile 2> /dev/null | \
>        grep "user.author1" && error || true
>
>        # b10667: setting lustre special xattr be silently discarded
>        echo "set lustre special xattr ..."
>        setfattr -n "trusted.lov" -v "invalid value" $testfile || error
>
>        rm -f $testfile
> }
> run_test 102a "user xattr test""
>
> test_106() { #bug 10921
>        mkdir -p $DIR/$tdir
>        $DIR/$tdir && error "exec $DIR/$tdir succeeded"
>        chmod 777 $DIR/$tdir || error "chmod $DIR/$tdir failed"
> }
> run_test 106 "attempt exec of dir followed by chown of that dir"
>
> test_107() {
>        CDIR=`pwd`
>        cd $DIR
>
>        local file=core
>        rm -f $file
>
>        local save_pattern=$(sysctl -n kernel.core_pattern)
>        local save_uses_pid=$(sysctl -n kernel.core_uses_pid)
>        sysctl -w kernel.core_pattern=$file
>        sysctl -w kernel.core_uses_pid=0
>
>        ulimit -c unlimited
>        sleep 60 &
>        SLEEPPID=$!
>
>        sleep 1
>
>        kill -s 11 $SLEEPPID
>        wait $SLEEPPID
>        if [ -e $file ]; then
>                size=`stat -c%s $file`
>                [ $size -eq 0 ] && error "Fail to create core file $file"
>        else
>                error "Fail to create core file $file"
>        fi
>        rm -f $file
>        sysctl -w kernel.core_pattern=$save_pattern
>        sysctl -w kernel.core_uses_pid=$save_uses_pid
>        cd $CDIR
> }
> run_test 107 "Coredump on SIG"
>
> test_110() {
>        mkdir -p $DIR/d110
>        mkdir
> $DIR/d110/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
> || error "mkdir with 255 char fail"
>        mkdir
> $DIR/d110/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
> && error "mkdir with 256 char should fail, but not"
>        touch
> $DIR/d110/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> || error "create with 255 char fail"
>        touch
> $DIR/d110/yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
> && error ""create with 256 char should fail, but not
>
>        ls -l $DIR/d110
>    rm -fr $DIR/d110
> }
> run_test 110 "filename length checking"
>
> test_119a() # bug 11737
> {
>        BSIZE=$((512 * 1024))
>        directio write $DIR/$tfile 0 1 $BSIZE
>        # We ask to read two blocks, which is more than a file size.
>        # directio will indicate an error when requested and actual
>        # sizes aren't equal (a normal situation in this case) and
>        # print actual read amount.
>        NOB=`directio read $DIR/$tfile 0 2 $BSIZE | awk '/error/ {print
> $6}'`
>        if [ "$NOB" != "$BSIZE" ]; then
>                error "read $NOB bytes instead of $BSIZE"
>        fi
>        rm -f $DIR/$tfile
> }
> run_test 119a "Short directIO read must return actual read amount"
>
> test_119b() # bug 11737
> {
>        dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 seek=1 || error "dd
> failed"
>        sync
>        multiop $DIR/$tfile oO_RDONLY:O_DIRECT:r$((2048 * 1024)) || \
>                error "direct read failed"
>        rm -f $DIR/$tfile
> }
> run_test 119b "Sparse directIO read must return actual read amount"
>
> test_119c() # bug 13099
> {
>        BSIZE=1048576
>        directio write $DIR/$tfile 3 1 $BSIZE || error "direct write failed"
>        directio readhole $DIR/$tfile 0 2 $BSIZE || error "reading hole
> failed"
>        rm -f $DIR/$tfile
> }
> run_test 119c "Testing for direct read hitting hole"
>
> test_126() { # bug 12829/13455
>        [ "$UID" != 0 ] && echo "skipping $TESTNAME (must run as root)" &&
> return
>
>        $RUNAS -u 0 -g 1 touch $DIR/$tfile || error "touch failed"
>        gid=`ls -n $DIR/$tfile | awk '{print $4}'`
>        rm -f $DIR/$tfile
>        [ $gid -eq "1" ] || error "gid is set to" $gid "instead of 1"
> }
> run_test 126 "check that the fsgid provided by the client is taken into
> account"
>
> OLDIFS="$IFS"
> cleanup_130() {
>        trap 0
>        IFS="$OLDIFS"
> }
>
> test_130a() {
>        filefrag_op=$(filefrag -e 2>&1 | grep "invalid option")
>        [ -n "$filefrag_op" ] && skip "filefrag does not support FIEMAP" &&
> return
>
>        trap cleanup_130 EXIT RETURN
>
>        local fm_file=$DIR/$tfile
>        dd if=/dev/zero of=$fm_file bs=65536 count=1 || error "dd failed for
> $fm_file"
>
>        filefrag -ves $fm_file || error "filefrag $fm_file failed"
>        filefrag_op=`filefrag -ve $fm_file | grep -A 100 "ext:" | grep -v
> "ext:" | grep -v "found"`
>
>        start_blk=`echo $filefrag_op | cut -d: -f2 | cut -d. -f1`
>        IFS=$'\n'
>        tot_len=0
>        for line in $filefrag_op; do
>                ext_len=`echo $line | cut -d: -f4`
>                (( tot_len += ext_len ))
>        done
>
>        if (( start_blk != 0 || tot_len != 64 )); then
>                cleanup_130
>                error "FIEMAP on 1-stripe file($fm_file) failed;"
>                return
>        fi
>
>        cleanup_130
>
>        echo "FIEMAP on single striped file succeeded"
> }
> run_test 130a "FIEMAP (1-stripe file)"
>
> test_130e() {
>        skip "this test needs cleanup for non-lustre"
>        filefrag_op=$(filefrag -e 2>&1 | grep "invalid option")
>        [ -n "$filefrag_op" ] && skip "filefrag does not support FIEMAP" &&
> return
>
>        trap cleanup_130 EXIT RETURN
>
>        local fm_file=$DIR/$tfile
>        NUM_BLKS=512
>        EXPECTED_LEN=$(( (NUM_BLKS / 2) * 4 ))
>        for ((i" 0; i < $NUM_BLKS; i++))
>        do
>                dd if=/dev/zero of=$fm_file count=1 bs=4096 seek=$((2*$i))
> conv=notrunc > /dev/null 2>&1
>        done
>
>        filefrag -ves $fm_file || error "filefrag $fm_file failed"
>        filefrag_op=`filefrag -ve $fm_file | grep -A 750 "ext:" | grep -v
> "ext:" | grep -v "found"`
>
>        IFS=$'\n'
>        tot_len=0
>        for line in $filefrag_op; do
>                ext_len=`echo $line | cut -d: -f4`
>                (( tot_len += ext_len ))
>        done
>        if (( tot_len != $EXPECTED_LEN )); then
>                cleanup_130
>                error "FIEMAP on $fm_file failed; len $tot_len !=
> $EXPECTED_LEN"
>                return
>        fi
>
>        cleanup_130
>
>        echo "FIEMAP with continuation calls succeeded"
> }
> run_test 130e "FIEMAP (test continuation FIEMAP calls)"
>
> # Test for writev/readv
> test_131a() {
>        rwv -f $DIR/$tfile -w -n 3 524288 1048576 1572864 || \
>        error "writev test failed"
>        rwv -f $DIR/$tfile -r -v -n 2 1572864 1048576 || \
>        error "readv failed"
>        rm -f $DIR/$tfile
> }
> run_test 131a "test iov's crossing stripe boundary for writev/readv"
>
> test_131b() {
>        rwv -f $DIR/$tfile -w -a -n 3 524288 1048576 1572864 || \
>        error "append writev test failed"
>        rwv -f $DIR/$tfile -w -a -n 2 1572864 1048576 || \
>        error "append writev test failed"
>        rm -f $DIR/$tfile
> }
> run_test 131b "test append writev"
>
> test_131c() {
>        rwv -f $DIR/$tfile -w -d -n 1 1048576 || return 0
>        error "NOT PASS"
> }
> run_test 131c "test read/write on file w/o objects"
>
> test_131d() {
>        rwv -f $DIR/$tfile -w -n 1 1572864
>        NOB=`rwv -f $DIR/$tfile -r -n 3 524288 524288 1048576 | awk '/error/
> {print $6}'`
>        if [ "$NOB" != 1572864 ]; then
>                error "Short read filed: read $NOB bytes instead of 1572864"
>        fi
>        rm -f $DIR/$tfile
> }
> run_test 131d "test short read"
>
> test_131e() {
>        rwv -f $DIR/$tfile -w -s 1048576 -n 1 1048576
>        rwv -f $DIR/$tfile -r -z -s 0 -n 1 524288 || \
>        error "read hitting hole failed"
>        rm -f $DIR/$tfile
> }
> run_test 131e "test read hitting hole"
>
> test_140() { #bug-17379
>        mkdir -p $DIR/$tdir || error "Creating dir $DIR/$tdir"
>        cd $DIR/$tdir || error "Changing to $DIR/$tdir"
>        cp /usr/bin/stat . || error "Copying stat to $DIR/$tdir"
>
>        # VFS limits max symlink depth to 8
>        local i=0
>        while i=`expr $i + 1`; do
>                mkdir -p $i || error "Creating dir $i"
>                cd $i || error "Changing to $i"
>                ln -s ../stat stat || error "Creating stat symlink"
>                # Read the symlink until ELOOP present,
>                # not LBUGing the system is considered success,
>                # we didn't overrun the stack.
>                $OPENFILE -f O_RDONLY stat >/dev/null 2>&1; ret=$?
>                [ $ret -ne 0 ] && {
>                        if [ $ret -eq 40 ]; then
>                                break  # -ELOOP
>                        else
>                                error "Open stat symlink"
>                                return
>                        fi
>                }
>        done
>        i=`expr $i - 1`
>        echo "The symlink depth" $i"
>        [ $i -eq 8 ] || error "Invalid symlink depth"
> }
> run_test 140 "Check reasonable stack depth (shouldn't LBUG)""
>
> test_154() {
>        # do directio so as not to populate the page cache
>        log "creating a 10 Mb file"
>        multiop $DIR/$tfile oO_CREAT:O_DIRECT:O_RDWR:w$((10*1048576))c ||
> error "multiop failed while creating a file"
>        log "starting reads"
>        dd if=$DIR/$tfile of=/dev/null bs=4096 &
>        log "truncating the file"
>        multiop $DIR/$tfile oO_TRUNC:c || error "multiop failed while
> truncating the file"
>        log "killing dd"
>        kill %+ || true # reads might have finished
>        echo "wait until dd is finished"
>        wait
>        log "removing the temporary file"
>        rm -rf $DIR/$tfile || error "tmp file removal failed"
> }
> run_test 154 "parallel read and truncate should not deadlock""
>
> echo "$0: completed"
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>



-- 
Regards & Thanks--
Subrata

[-- Attachment #1.2: Type: text/html, Size: 95990 bytes --]

[-- Attachment #2: Type: text/plain, Size: 432 bytes --]

------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, & 
iPhoneDevCamp asthey present alongside digital heavyweights like Barbarian
Group, R/GA, & Big Spaceship. http://www.creativitycat.com 

[-- Attachment #3: Type: text/plain, Size: 155 bytes --]

_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

       reply	other threads:[~2009-05-23 11:03 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20090522213639.GC13578@webber.adilger.int>
2009-05-23 11:03 ` Subrata Modak [this message]
2009-06-21 11:19   ` [LTP] Lustre basic tests script Andreas Dilger
2009-06-23 14:50     ` Subrata Modak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bb33bcf20905230403n2e959d8fg1f463539b7cdb445@mail.gmail.com \
    --to=tosubrata@gmail.com \
    --cc=adilger@sun.com \
    --cc=esandeen@redhat.com \
    --cc=linux-ext4@vger.kernel.org \
    --cc=ltp-list@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox