Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F153561805
D21039.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D21039.id.diff
View Options
Index: head/sys/kern/subr_witness.c
===================================================================
--- head/sys/kern/subr_witness.c
+++ head/sys/kern/subr_witness.c
@@ -132,9 +132,6 @@
#define LI_EXCLUSIVE 0x00010000 /* Exclusive lock instance. */
#define LI_NORELEASE 0x00020000 /* Lock not allowed to be released. */
-/* Define this to check for blessed mutexes */
-#undef BLESSING
-
#ifndef WITNESS_COUNT
#define WITNESS_COUNT 1536
#endif
@@ -278,12 +275,10 @@
u_int wloh_count;
};
-#ifdef BLESSING
struct witness_blessed {
const char *b_lock1;
const char *b_lock2;
};
-#endif
struct witness_pendhelp {
const char *wh_type;
@@ -318,9 +313,7 @@
static int _isitmyx(struct witness *w1, struct witness *w2, int rmask,
const char *fname);
static void adopt(struct witness *parent, struct witness *child);
-#ifdef BLESSING
static int blessed(struct witness *, struct witness *);
-#endif
static void depart(struct witness *w);
static struct witness *enroll(const char *description,
struct lock_class *lock_class);
@@ -726,14 +719,25 @@
{ NULL, NULL }
};
-#ifdef BLESSING
/*
- * Pairs of locks which have been blessed
- * Don't complain about order problems with blessed locks
+ * Pairs of locks which have been blessed. Witness does not complain about
+ * order problems with blessed lock pairs. Please do not add an entry to the
+ * table without an explanatory comment.
*/
static struct witness_blessed blessed_list[] = {
+ /*
+ * See the comment in ufs_dirhash.c. Basically, a vnode lock serializes
+ * both lock orders, so a deadlock cannot happen as a result of this
+ * LOR.
+ */
+ { "dirhash", "bufwait" },
+
+ /*
+ * A UFS vnode may be locked in vget() while a buffer belonging to the
+ * parent directory vnode is locked.
+ */
+ { "ufs", "bufwait" },
};
-#endif
/*
* This global is set to 0 once it becomes safe to use the witness code.
@@ -1339,7 +1343,6 @@
* We have a lock order violation, check to see if it
* is allowed or has already been yelled about.
*/
-#ifdef BLESSING
/*
* If the lock order is blessed, just bail. We don't
@@ -1348,7 +1351,6 @@
*/
if (blessed(w, w1))
goto out;
-#endif
/* Bail if this violation is known */
if (w_rmatrix[w1->w_index][w->w_index] & WITNESS_REVERSAL)
@@ -2084,7 +2086,6 @@
__func__));
}
-#ifdef BLESSING
static int
blessed(struct witness *w1, struct witness *w2)
{
@@ -2104,7 +2105,6 @@
}
return (0);
}
-#endif
static struct witness *
witness_get(void)
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Apr 22, 10:30 PM (11 h, 58 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
32001612
Default Alt Text
D21039.id.diff (2 KB)
Attached To
Mode
D21039: Enable witness blessings.
Attached
Detach File
Event Timeline
Log In to Comment