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.
This commit is contained in:
parent
5af731a4af
commit
9f264a6a75
@ -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);
|
||||
}
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user