From: shadow Date: Fri, 23 Jan 2009 14:29:22 +0000 (+0000) Subject: add workaround for leak space in ESTALE case X-Git-Tag: GIT_EPOCH_B1_6~2^5~229 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=238f3cb9e90f51098bec8dc8b55bbe7bd210c576;p=fs%2Flustre-release.git add workaround for leak space in ESTALE case Branch b1_6 --- diff --git a/lustre/llite/dcache.c b/lustre/llite/dcache.c index c0989f2..931213d 100644 --- a/lustre/llite/dcache.c +++ b/lustre/llite/dcache.c @@ -472,6 +472,13 @@ do_lock: if (rc != -ESTALE) { CDEBUG(D_INFO, "ll_intent_lock: rc %d : it->it_status " "%d\n", rc, it->d.lustre.it_status); + } else { +#ifndef HAVE_VFS_INTENT_PATCHES + if (it_disposition(it, DISP_OPEN_OPEN) && + !it_open_error(DISP_OPEN_OPEN, it)) + /* server have valid open - close file first*/ + ll_release_openhandle(de, it); +#endif } GOTO(out, rc = 0); } diff --git a/lustre/tests/sanityN.sh b/lustre/tests/sanityN.sh index a1d3f1a..2980ff6 100644 --- a/lustre/tests/sanityN.sh +++ b/lustre/tests/sanityN.sh @@ -792,6 +792,32 @@ test_35() { # bug 17645 } run_test 35 "-EINTR cp_ast vs. bl_ast race does not evict client" +test_36() { #bug 16417 + local SIZE + mkdir -p $MOUNT1/$tdir + lfs setstripe -c -1 $MOUNT1/$tdir + i=0 + SIZE=100 + + while [ $i -le 10 ]; do + lctl mark "start test" + before=$($LFS df | awk '{if ($1 ~/^filesystem/) {print $5; exit} }') + dd if=/dev/zero of=$MOUNT1/$tdir/file000 bs=1M count=$SIZE + dd if=$MOUNT2/$tdir/file000 of=/dev/null bs=1M count=$SIZE & + read_pid=$! + sleep 0.1 + rm -f $MOUNT1/$tdir/file000 + wait $read_pid + after=$($LFS df | awk '{if ($1 ~/^filesystem/) {print $5; exit} }') + if [ $before -gt $after ]; then + error "space leaked" + exit; + fi + let i=i+1 + done +} +run_test 36 "handle ESTALE/open-unlink corectly" + log "cleanup: ======================================================" check_and_cleanup_lustre