Lines Matching refs:lock
56 struct lock_descriptor *from_vertex; /* edge emanating from lock */
57 struct lock_descriptor *to_vertex; /* edge pointing to lock */
63 struct lock_descriptor *l_next; /* next active/sleep lock */
64 struct lock_descriptor *l_prev; /* previous active/sleep lock */
73 int l_type; /* type of lock */
79 kcondvar_t l_cv; /* wait condition for lock */
106 * The possible states a lock can be in. These states are stored in the
155 * The LLM design has been modified so that lock states are now stored
160 * to the implementation of the lock manager and should not be used
166 #define IO_LOCK 0x0004 /* is an IO lock */
168 #define QUERY_LOCK 0x0010 /* querying about lock */
169 #define WILLING_TO_SLEEP_LOCK 0x0020 /* lock can be put in sleep queue */
177 #define LOCKMGR_LOCK 0x2000 /* remote lock (server-side) */
179 #define PXFS_LOCK 0x4000 /* lock created by PXFS file system */
200 #define FLK_INIT_GRAPH 1 /* initialize the lock graph */
229 #define SET_LOCK_TO_FIRST_ACTIVE_VP(gp, lock, vp) \
231 (lock) = (lock_descriptor_t *)vp->v_filocks; \
234 #define SET_LOCK_TO_FIRST_SLEEP_VP(gp, lock, vp) \
236 for ((lock) = SLEEPING_HEAD((gp))->l_next; ((lock) != SLEEPING_HEAD((gp)) && \
237 (lock)->l_vnode != (vp)); (lock) = (lock)->l_next) \
239 (lock) = ((lock) == SLEEPING_HEAD((gp))) ? NULL : (lock); \
248 #define IS_INITIAL(lock) ((lock)->l_status == FLK_INITIAL_STATE)
249 #define IS_ACTIVE(lock) ((lock)->l_status == FLK_ACTIVE_STATE)
250 #define IS_SLEEPING(lock) ((lock)->l_status == FLK_SLEEPING_STATE)
251 #define IS_GRANTED(lock) ((lock)->l_status == FLK_GRANTED_STATE)
252 #define IS_INTERRUPTED(lock) ((lock)->l_status == FLK_INTERRUPTED_STATE)
253 #define IS_CANCELLED(lock) ((lock)->l_status == FLK_CANCELLED_STATE)
254 #define IS_DEAD(lock) ((lock)->l_status == FLK_DEAD_STATE)
256 #define IS_QUERY_LOCK(lock) ((lock)->l_state & QUERY_LOCK)
257 #define IS_RECOMPUTE(lock) ((lock)->l_state & RECOMPUTE_LOCK)
258 #define IS_BARRIER(lock) ((lock)->l_state & BARRIER_LOCK)
259 #define IS_DELETED(lock) ((lock)->l_state & DELETED_LOCK)
260 #define IS_REFERENCED(lock) ((lock)->l_state & REFERENCED_LOCK)
261 #define IS_IO_LOCK(lock) ((lock)->l_state & IO_LOCK)
262 #define IS_WILLING_TO_SLEEP(lock) \
263 ((lock)->l_state & WILLING_TO_SLEEP_LOCK)
264 #define IS_LOCKMGR(lock) ((lock)->l_state & LOCKMGR_LOCK)
265 #define IS_NLM_UP(lock) ((lock)->l_nlm_state == FLK_NLM_UP)
267 #define IS_PXFS(lock) ((lock)->l_state & PXFS_LOCK)
270 * "local" requests don't involve the NFS lock manager in any way.
275 * because the NFS lock manager uses local locking for some of its
278 #define IS_LOCAL(lock) (GETSYSID((lock)->l_flock.l_sysid) == 0)
279 #define IS_REMOTE(lock) (! IS_LOCAL(lock))
294 extern void cl_flk_state_transition_notify(lock_descriptor_t *lock,
318 #define NOT_BLOCKED(lock) \
319 ((lock)->l_edge.edge_adj_next == &(lock)->l_edge && !IS_GRANTED(lock))
321 #define GRANT_WAKEUP(lock) \
323 flk_set_state(lock, FLK_GRANTED_STATE); \
324 (lock)->l_state |= GRANTED_LOCK; \
329 if (!IS_PXFS(lock)) { \
330 cv_signal(&(lock)->l_cv); \
334 #define CANCEL_WAKEUP(lock) \
336 flk_set_state(lock, FLK_CANCELLED_STATE); \
337 (lock)->l_state |= CANCELLED_LOCK; \
342 if (!IS_PXFS(lock)) { \
343 cv_signal(&(lock)->l_cv); \
347 #define INTERRUPT_WAKEUP(lock) \
349 flk_set_state(lock, FLK_INTERRUPTED_STATE); \
350 (lock)->l_state |= INTERRUPTED_LOCK; \
355 if (!IS_PXFS(lock)) { \
356 cv_signal(&(lock)->l_cv); \
360 #define REMOVE_SLEEP_QUEUE(lock) \
362 ASSERT(IS_SLEEPING(lock) || IS_GRANTED(lock) || \
363 IS_INTERRUPTED(lock) || IS_CANCELLED(lock)); \
364 (lock)->l_state &= ~SLEEPING_LOCK; \
365 (lock)->l_next->l_prev = (lock)->l_prev; \
366 (lock)->l_prev->l_next = (lock)->l_next; \
367 (lock)->l_next = (lock)->l_prev = (lock_descriptor_t *)NULL; \
370 #define NO_DEPENDENTS(lock) \
371 ((lock)->l_edge.edge_in_next == &(lock)->l_edge)
373 #define GRANT(lock) \
375 (lock)->l_state |= GRANTED_LOCK; \
376 flk_set_state(lock, FLK_GRANTED_STATE); \
379 #define FIRST_IN(lock) ((lock)->l_edge.edge_in_next)
380 #define FIRST_ADJ(lock) ((lock)->l_edge.edge_adj_next)
381 #define HEAD(lock) (&(lock)->l_edge)
384 #define IN_ADJ_INIT(lock) \
386 (lock)->l_edge.edge_adj_next = (lock)->l_edge.edge_adj_prev = &(lock)->l_edge; \
387 (lock)->l_edge.edge_in_next = (lock)->l_edge.edge_in_prev = &(lock)->l_edge; \
406 /* Routines to set and get the NLM state in a lock request */
407 #define SET_NLM_STATE(lock, nlm_state) ((lock)->l_nlm_state = nlm_state)
408 #define GET_NLM_STATE(lock) ((lock)->l_nlm_state)
428 #define FLK_UNLOCK 0x1 /* request unlocks the existing lock */
429 #define FLK_DOWNGRADE 0x2 /* request downgrades the existing lock */
430 #define FLK_UPGRADE 0x3 /* request upgrades the existing lock */
431 #define FLK_STAY_SAME 0x4 /* request type is same as existing lock */
479 #define PROC_SAME_OWNER(lock, pvertex) \
480 (((lock)->l_flock.l_pid == (pvertex)->pid) && \
481 ((lock)->l_flock.l_sysid == (pvertex)->sysid))