|
Lines 105-111
struct filedesc_to_leader {
Link Here
|
| 105 |
(fd)->fd_locked = 2; \ |
105 |
(fd)->fd_locked = 2; \ |
| 106 |
(fd)->fd_wanted--; \ |
106 |
(fd)->fd_wanted--; \ |
| 107 |
mtx_unlock(&(fd)->fd_mtx); \ |
107 |
mtx_unlock(&(fd)->fd_mtx); \ |
| 108 |
} while (0); |
108 |
} while (0) |
| 109 |
|
109 |
|
| 110 |
#define FILEDESC_UNLOCK(fd) \ |
110 |
#define FILEDESC_UNLOCK(fd) \ |
| 111 |
do { \ |
111 |
do { \ |
|
Lines 116-122
struct filedesc_to_leader {
Link Here
|
| 116 |
if ((fd)->fd_wanted) \ |
116 |
if ((fd)->fd_wanted) \ |
| 117 |
wakeup(&(fd)->fd_locked); \ |
117 |
wakeup(&(fd)->fd_locked); \ |
| 118 |
mtx_unlock(&(fd)->fd_mtx); \ |
118 |
mtx_unlock(&(fd)->fd_mtx); \ |
| 119 |
} while (0); |
119 |
} while (0) |
| 120 |
|
120 |
|
| 121 |
#define FILEDESC_LOCK_FAST(fd) \ |
121 |
#define FILEDESC_LOCK_FAST(fd) \ |
| 122 |
do { \ |
122 |
do { \ |
|
Lines 126-132
struct filedesc_to_leader {
Link Here
|
| 126 |
msleep(&(fd)->fd_locked, &(fd)->fd_mtx, PLOCK, "fdesc", 0); \ |
126 |
msleep(&(fd)->fd_locked, &(fd)->fd_mtx, PLOCK, "fdesc", 0); \ |
| 127 |
(fd)->fd_locked = 1; \ |
127 |
(fd)->fd_locked = 1; \ |
| 128 |
(fd)->fd_wanted--; \ |
128 |
(fd)->fd_wanted--; \ |
| 129 |
} while (0); |
129 |
} while (0) |
| 130 |
|
130 |
|
| 131 |
#define FILEDESC_UNLOCK_FAST(fd) \ |
131 |
#define FILEDESC_UNLOCK_FAST(fd) \ |
| 132 |
do { \ |
132 |
do { \ |
|
Lines 136-142
struct filedesc_to_leader {
Link Here
|
| 136 |
if ((fd)->fd_wanted) \ |
136 |
if ((fd)->fd_wanted) \ |
| 137 |
wakeup(&(fd)->fd_locked); \ |
137 |
wakeup(&(fd)->fd_locked); \ |
| 138 |
mtx_unlock(&(fd)->fd_mtx); \ |
138 |
mtx_unlock(&(fd)->fd_mtx); \ |
| 139 |
} while (0); |
139 |
} while (0) |
| 140 |
|
140 |
|
| 141 |
#ifdef INVARIANT_SUPPORT |
141 |
#ifdef INVARIANT_SUPPORT |
| 142 |
#define FILEDESC_LOCK_ASSERT(fd, arg) \ |
142 |
#define FILEDESC_LOCK_ASSERT(fd, arg) \ |
|
Lines 145-151
struct filedesc_to_leader {
Link Here
|
| 145 |
KASSERT((fd)->fd_locked != 0, ("fdesc locking mistake")); \ |
145 |
KASSERT((fd)->fd_locked != 0, ("fdesc locking mistake")); \ |
| 146 |
else \ |
146 |
else \ |
| 147 |
KASSERT((fd)->fd_locked == 0, ("fdesc locking mistake")); \ |
147 |
KASSERT((fd)->fd_locked == 0, ("fdesc locking mistake")); \ |
| 148 |
} while (0); |
148 |
} while (0) |
| 149 |
#else |
149 |
#else |
| 150 |
#define FILEDESC_LOCK_ASSERT(fd, arg) |
150 |
#define FILEDESC_LOCK_ASSERT(fd, arg) |
| 151 |
#endif |
151 |
#endif |