Author: jhb
Date: Tue Nov  4 18:56:12 2008
New Revision: 184651
URL: http://svn.freebsd.org/changeset/base/184651

Log:
  Quiet a WITNESS warning with the dirhash sx locks by setting the DUPOK
  flag.  Specifically, if two threads race to create a dirhash for a
  directory, then one might already have created a private dirhash
  structure (and locked it) when it realizes the directory now has a
  structure and tries to lock that one.

Modified:
  head/sys/ufs/ufs/ufs_dirhash.c

Modified: head/sys/ufs/ufs/ufs_dirhash.c
==============================================================================
--- head/sys/ufs/ufs/ufs_dirhash.c      Tue Nov  4 18:54:44 2008        
(r184650)
+++ head/sys/ufs/ufs/ufs_dirhash.c      Tue Nov  4 18:56:12 2008        
(r184651)
@@ -181,7 +181,16 @@ ufsdirhash_create(struct inode *ip)
                        if (ndh == NULL)
                                return (NULL);
                        refcount_init(&ndh->dh_refcount, 1);
-                       sx_init(&ndh->dh_lock, "dirhash");
+
+                       /*
+                        * The DUPOK is to prevent warnings from the
+                        * sx_slock() a few lines down which is safe
+                        * since the duplicate lock in that case is
+                        * the one for this dirhash we are creating
+                        * now which has no external references until
+                        * after this function returns.
+                        */
+                       sx_init_flags(&ndh->dh_lock, "dirhash", SX_DUPOK);
                        sx_xlock(&ndh->dh_lock);
                }
                /*
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to