Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/pseudofs/pseudofs_internal.h
Show First 20 Lines • Show All 88 Lines • ▼ Show 20 Lines | #define PFS_RETURN(err) \ | ||||
} while (0) | } while (0) | ||||
#else | #else | ||||
#define PFS_TRACE(foo) \ | #define PFS_TRACE(foo) \ | ||||
do { /* nothing */ } while (0) | do { /* nothing */ } while (0) | ||||
#define PFS_RETURN(err) \ | #define PFS_RETURN(err) \ | ||||
return (err) | return (err) | ||||
#endif | #endif | ||||
#define PFS_VISIBILITY(x) (x->pn_flags & PFS_ZOMBIE) | |||||
#define PFS_PROC_ASSERT_HELD(pn, p) \ | |||||
do { \ | |||||
if (PFS_VISIBILITY(pn)) \ | |||||
KASSERT((p)->p_lockreap > 0, \ | |||||
("process %p not held", p)); \ | |||||
else \ | |||||
PROC_ASSERT_HELD(p); \ | |||||
} while (0) | |||||
#define _PFS_PHOLD(pn, p) \ | |||||
do { \ | |||||
if (PFS_VISIBILITY(pn)) { \ | |||||
PROC_LOCK_ASSERT((p), MA_OWNED); \ | |||||
(p)->p_lockreap++; \ | |||||
} else \ | |||||
_PHOLD(p); \ | |||||
} while (0) | |||||
#define _PFS_PRELE(pn, p) \ | |||||
do { \ | |||||
if (PFS_VISIBILITY(pn)) { \ | |||||
PROC_LOCK_ASSERT((p), MA_OWNED); \ | |||||
PFS_PROC_ASSERT_HELD(pn, p); \ | |||||
(--(p)->p_lockreap); \ | |||||
if ((p)->p_lockreap == 0) \ | |||||
wakeup(&(p)->p_lockreap); \ | |||||
} else \ | |||||
_PRELE(p); \ | |||||
} while (0) | |||||
#define PFS_PRELE(pn, p) \ | |||||
do { \ | |||||
if (PFS_VISIBILITY(pn)) { \ | |||||
PROC_LOCK(p); \ | |||||
_PFS_PRELE(pn, p); \ | |||||
PROC_UNLOCK(p); \ | |||||
} else \ | |||||
PRELE(p); \ | |||||
} while (0) | |||||
/* | /* | ||||
* Inline helpers for locking | * Inline helpers for locking | ||||
*/ | */ | ||||
static inline void | static inline void | ||||
pfs_lock(struct pfs_node *pn) | pfs_lock(struct pfs_node *pn) | ||||
{ | { | ||||
mtx_lock(&pn->pn_mutex); | mtx_lock(&pn->pn_mutex); | ||||
Show All 23 Lines | |||||
static inline int | static inline int | ||||
pn_fill(PFS_FILL_ARGS) | pn_fill(PFS_FILL_ARGS) | ||||
{ | { | ||||
PFS_TRACE(("%s", pn->pn_name)); | PFS_TRACE(("%s", pn->pn_name)); | ||||
KASSERT(pn->pn_fill != NULL, ("%s(): no callback", __func__)); | KASSERT(pn->pn_fill != NULL, ("%s(): no callback", __func__)); | ||||
if (p != NULL) { | if (p != NULL) { | ||||
PROC_LOCK_ASSERT(p, MA_NOTOWNED); | PROC_LOCK_ASSERT(p, MA_NOTOWNED); | ||||
PROC_ASSERT_HELD(p); | PFS_PROC_ASSERT_HELD(pn, p); | ||||
} | } | ||||
pfs_assert_not_owned(pn); | pfs_assert_not_owned(pn); | ||||
return ((pn->pn_fill)(PFS_FILL_ARGNAMES)); | return ((pn->pn_fill)(PFS_FILL_ARGNAMES)); | ||||
} | } | ||||
static inline int | static inline int | ||||
pn_attr(PFS_ATTR_ARGS) | pn_attr(PFS_ATTR_ARGS) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 68 Lines • Show Last 20 Lines |