And here are the attachments.  [doh!]

On Fri, Feb 12, 2010 at 06:55:22PM -0800, Mike Mackovitch wrote:
> On Fri, Feb 12, 2010 at 08:36:41PM -0500, Gordon Ross wrote:
> > Thanks for having a look.  Yes, I'll be happy to take your changes.
> > (If I'm not careful, I may end up owning this "pile":)
> 
> Cool, I've attached a small patch... it's mostly minor stuff.
> (Actually two small patches: one against the gate and one against
> your "fixwarn" version.  One of my changes hits an ifdef right next
> to one of your changes.)
> 
> The patch does also include one change to lock test #12 that I needed
> when I was testing running the Mac OS X NFSv4 client against a server
> that was constantly rebooting.  Test #12 has the child take a lock and
> then the parent kills the child and checks that the lock has been
> released after a couple seconds.  The problem I hit was that if the
> server goes down before the child's lock can be released, then the
> parent will mistakenly report that the test failed when it's really
> just waiting on the server to come back up.  To get around that I added
> some calls to the parent to open/close/unlink a separate file before
> it checks that the child's lock has been released.  These operations
> should hold up the parent long enough to allow the child's lock to be
> released even if the server was down at the time.
> 
> Feedback is welcome from any NFS experts.  :-)
> 
> Thanks!
> --macko
> _______________________________________________
> nfs-discuss mailing list
> nfs-discuss at opensolaris.org
-------------- next part --------------
diff -r ba2cc26c2e5f lock/tlock.c
--- a/lock/tlock.c      Tue Feb 24 11:53:55 2009 -0800
+++ b/lock/tlock.c      Fri Feb 12 18:40:14 2010 -0800
@@ -1390,6 +1390,7 @@
 {
        if (who == PARENT) {
                pid_t target;
+               char testfile2[256];
 
                close(pidpipe[1]);
 
@@ -1408,6 +1409,12 @@
                kill(target, SIGINT);
                comment("Killed child process.");
                sleep(wait_time);
+               comment("Opening/closing/unlinking another file.");
+               sprintf(&testfile2[0], "%s/otherfile%d", filepath, parentpid);
+               close(open(testfile2, O_RDWR|O_CREAT, 0666));
+               unlink(testfile2);
+               comment("Waiting a little more.");
+               sleep(wait_time);
                test(12, 1, F_TLOCK, (off_t)0, (off_t)0, PASS, FATAL);
                childfree(0);
                close_testfile(DO_UNLINK);
diff -r ba2cc26c2e5f tests.init
--- a/tests.init        Tue Feb 24 11:53:55 2009 -0800
+++ b/tests.init        Fri Feb 12 18:40:14 2010 -0800
@@ -40,6 +40,7 @@
 #      SVR4
 #      Solaris 2.x
 #      HPUX
+#      Mac OS X 10.5+
 DASHN=
 BLC=\\c
 
@@ -48,7 +49,7 @@
 #      SunOS 4.X
 #      Linux
 #      Tru64 UNIX
-#      Mac OS X
+#      Mac OS X <10.4
 #DASHN=-n
 #BLC=
 
@@ -214,9 +215,9 @@
 #CC=gcc
 
 # Use with Mac OS X
-#CFLAGS=`echo -DMACOSX -DNATIVE64 -DLARGE_LOCKS`
+#CFLAGS=`echo -DMACOSX -DMMAP -DSTDARG -DNATIVE64 -DLARGE_LOCKS 
-DHAVE_SOCKLEN_T`
 #MOUNT=/sbin/mount
 #UMOUNT=/sbin/umount
-#LOCKTESTS=`echo tlock`
+#LOCKTESTS=`echo tlocklfs`
 
 # -----------------------------------------------
diff -r ba2cc26c2e5f tools/dirdmp.c
--- a/tools/dirdmp.c    Tue Feb 24 11:53:55 2009 -0800
+++ b/tools/dirdmp.c    Fri Feb 12 18:40:14 2010 -0800
@@ -35,7 +35,7 @@
        int argc;
        char *argv[];
 {
-#if defined(LINUX) || defined (AIX)
+#if defined(LINUX) || defined (AIX) || defined(MACOSX)
        fprintf(stderr, "dirdmp is not supported on this platform.\n");
        exit(1);
 #else
@@ -44,10 +44,10 @@
        while (argc--) {
                print(*argv++);
        }
-#endif /* LINUX || AIX */
+#endif /* LINUX || AIX || MACOSX */
 }
 
-#if !(defined(LINUX) || defined(AIX))
+#if !(defined(LINUX) || defined(AIX) || defined(MACOSX))
 
 static void
 print(dir)
@@ -217,4 +217,4 @@
        }
 }
 
-#endif /* LINUX || AIX */
+#endif /* LINUX || AIX || MACOSX */
-------------- next part --------------
diff -ur cthon.orig/lock/tlock.c cthon.new/lock/tlock.c
--- cthon.orig/lock/tlock.c     2010-02-10 20:25:59.000000000 -0800
+++ cthon.new/lock/tlock.c      2010-02-12 14:50:35.000000000 -0800
@@ -1390,6 +1390,7 @@
 {
        if (who == PARENT) {
                pid_t target;
+               char testfile2[256];
 
                close(pidpipe[1]);
 
@@ -1408,6 +1409,12 @@
                kill(target, SIGINT);
                comment("Killed child process.");
                sleep(wait_time);
+               comment("Opening/closing/unlinking another file.");
+               sprintf(&testfile2[0], "%s/otherfile%d", filepath, parentpid);
+               close(open(testfile2, O_RDWR|O_CREAT, 0666));
+               unlink(testfile2);
+               comment("Waiting a little more.");
+               sleep(wait_time);
                test(12, 1, F_TLOCK, (off_t)0, (off_t)0, PASS, FATAL);
                childfree(0);
                close_testfile(DO_UNLINK);
diff -ur cthon.orig/tests.init cthon.new/tests.init
--- cthon.orig/tests.init       2009-12-22 12:18:48.000000000 -0800
+++ cthon.new/tests.init        2010-02-11 13:19:22.000000000 -0800
@@ -40,6 +40,7 @@
 #      SVR4
 #      Solaris 2.x
 #      HPUX
+#      Mac OS X 10.5+
 DASHN=
 BLC=\\c
 
@@ -48,7 +49,7 @@
 #      SunOS 4.X
 #      Linux
 #      Tru64 UNIX
-#      Mac OS X
+#      Mac OS X <10.4
 #DASHN=-n
 #BLC=
 
@@ -214,9 +215,9 @@
 #CC=gcc
 
 # Use with Mac OS X
-#CFLAGS=`echo -DMACOSX -DNATIVE64 -DLARGE_LOCKS`
+#CFLAGS=`echo -DMACOSX -DMMAP -DSTDARG -DNATIVE64 -DLARGE_LOCKS 
-DHAVE_SOCKLEN_T`
 #MOUNT=/sbin/mount
 #UMOUNT=/sbin/umount
-#LOCKTESTS=`echo tlock`
+#LOCKTESTS=`echo tlocklfs`
 
 # -----------------------------------------------
diff -ur cthon.orig/tools/dirdmp.c cthon.new/tools/dirdmp.c
--- cthon.orig/tools/dirdmp.c   2010-02-10 20:25:59.000000000 -0800
+++ cthon.new/tools/dirdmp.c    2010-02-11 15:02:45.000000000 -0800
@@ -34,7 +34,7 @@
 int
 main(int argc, char *argv[])
 {
-#if defined(LINUX) || defined (AIX)
+#if defined(LINUX) || defined (AIX) || defined(MACOSX)
        fprintf(stderr, "dirdmp is not supported on this platform.\n");
        return 1;
 #else
@@ -44,10 +44,10 @@
                print(*argv++);
        }
        return 0;
-#endif /* LINUX || AIX */
+#endif /* LINUX || AIX || MACOSX */
 }
 
-#if !(defined(LINUX) || defined(AIX))
+#if !(defined(LINUX) || defined(AIX) || defined(MACOSX))
 
 static void
 print(dir)
@@ -217,4 +217,4 @@
        }
 }
 
-#endif /* LINUX || AIX */
+#endif /* LINUX || AIX || MACOSX */

Reply via email to