Whamcloud - gitweb
workaround for leak space in ESTALE case.
authorshadow <shadow>
Fri, 23 Jan 2009 14:22:55 +0000 (14:22 +0000)
committershadow <shadow>
Fri, 23 Jan 2009 14:22:55 +0000 (14:22 +0000)
Branch HEAD

lustre/llite/dcache.c
lustre/tests/sanityN.sh

index bafb293..d4e4705 100644 (file)
@@ -496,6 +496,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);
         }
index 4dd8bbd..9008dce 100644 (file)
@@ -882,6 +882,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