forked from Minki/linux
2ab4bd8ea3
A process may exit, leaving an orphan lock in the lockspace. This adds the capability for another process to acquire the orphan lock. Acquiring the orphan just moves the lock from the orphan list onto the acquiring process's list of locks. An adopting process must specify the resource name and mode of the lock it wants to adopt. If a matching lock is found, the lock is moved to the caller's 's list of locks, and the lkid of the lock is returned like the lkid of a new lock. If an orphan with a different mode is found, then -EAGAIN is returned. If no orphan lock is found on the resource, then -ENOENT is returned. No async completion is used because the result is immediately available. Also, when orphans are purged, allow a zero nodeid to refer to the local nodeid so the caller does not need to look up the local nodeid. Signed-off-by: David Teigland <teigland@redhat.com>
164 lines
4.9 KiB
C
164 lines
4.9 KiB
C
/******************************************************************************
|
|
*******************************************************************************
|
|
**
|
|
** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
|
|
** Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
|
|
**
|
|
** This copyrighted material is made available to anyone wishing to use,
|
|
** modify, copy, or redistribute it subject to the terms and conditions
|
|
** of the GNU General Public License v.2.
|
|
**
|
|
*******************************************************************************
|
|
******************************************************************************/
|
|
|
|
#ifndef __DLMCONSTANTS_DOT_H__
|
|
#define __DLMCONSTANTS_DOT_H__
|
|
|
|
/*
|
|
* Constants used by DLM interface.
|
|
*/
|
|
|
|
#define DLM_LOCKSPACE_LEN 64
|
|
#define DLM_RESNAME_MAXLEN 64
|
|
|
|
|
|
/*
|
|
* Lock Modes
|
|
*/
|
|
|
|
#define DLM_LOCK_IV (-1) /* invalid */
|
|
#define DLM_LOCK_NL 0 /* null */
|
|
#define DLM_LOCK_CR 1 /* concurrent read */
|
|
#define DLM_LOCK_CW 2 /* concurrent write */
|
|
#define DLM_LOCK_PR 3 /* protected read */
|
|
#define DLM_LOCK_PW 4 /* protected write */
|
|
#define DLM_LOCK_EX 5 /* exclusive */
|
|
|
|
|
|
/*
|
|
* Flags to dlm_lock
|
|
*
|
|
* DLM_LKF_NOQUEUE
|
|
*
|
|
* Do not queue the lock request on the wait queue if it cannot be granted
|
|
* immediately. If the lock cannot be granted because of this flag, DLM will
|
|
* either return -EAGAIN from the dlm_lock call or will return 0 from
|
|
* dlm_lock and -EAGAIN in the lock status block when the AST is executed.
|
|
*
|
|
* DLM_LKF_CANCEL
|
|
*
|
|
* Used to cancel a pending lock request or conversion. A converting lock is
|
|
* returned to its previously granted mode.
|
|
*
|
|
* DLM_LKF_CONVERT
|
|
*
|
|
* Indicates a lock conversion request. For conversions the name and namelen
|
|
* are ignored and the lock ID in the LKSB is used to identify the lock.
|
|
*
|
|
* DLM_LKF_VALBLK
|
|
*
|
|
* Requests DLM to return the current contents of the lock value block in the
|
|
* lock status block. When this flag is set in a lock conversion from PW or EX
|
|
* modes, DLM assigns the value specified in the lock status block to the lock
|
|
* value block of the lock resource. The LVB is a DLM_LVB_LEN size array
|
|
* containing application-specific information.
|
|
*
|
|
* DLM_LKF_QUECVT
|
|
*
|
|
* Force a conversion request to be queued, even if it is compatible with
|
|
* the granted modes of other locks on the same resource.
|
|
*
|
|
* DLM_LKF_IVVALBLK
|
|
*
|
|
* Invalidate the lock value block.
|
|
*
|
|
* DLM_LKF_CONVDEADLK
|
|
*
|
|
* Allows the dlm to resolve conversion deadlocks internally by demoting the
|
|
* granted mode of a converting lock to NL. The DLM_SBF_DEMOTED flag is
|
|
* returned for a conversion that's been effected by this.
|
|
*
|
|
* DLM_LKF_PERSISTENT
|
|
*
|
|
* Only relevant to locks originating in userspace. A persistent lock will not
|
|
* be removed if the process holding the lock exits.
|
|
*
|
|
* DLM_LKF_NODLCKWT
|
|
*
|
|
* Do not cancel the lock if it gets into conversion deadlock.
|
|
* Exclude this lock from being monitored due to DLM_LSFL_TIMEWARN.
|
|
*
|
|
* DLM_LKF_NODLCKBLK
|
|
*
|
|
* net yet implemented
|
|
*
|
|
* DLM_LKF_EXPEDITE
|
|
*
|
|
* Used only with new requests for NL mode locks. Tells the lock manager
|
|
* to grant the lock, ignoring other locks in convert and wait queues.
|
|
*
|
|
* DLM_LKF_NOQUEUEBAST
|
|
*
|
|
* Send blocking AST's before returning -EAGAIN to the caller. It is only
|
|
* used along with the NOQUEUE flag. Blocking AST's are not sent for failed
|
|
* NOQUEUE requests otherwise.
|
|
*
|
|
* DLM_LKF_HEADQUE
|
|
*
|
|
* Add a lock to the head of the convert or wait queue rather than the tail.
|
|
*
|
|
* DLM_LKF_NOORDER
|
|
*
|
|
* Disregard the standard grant order rules and grant a lock as soon as it
|
|
* is compatible with other granted locks.
|
|
*
|
|
* DLM_LKF_ORPHAN
|
|
*
|
|
* Acquire an orphan lock.
|
|
*
|
|
* DLM_LKF_ALTPR
|
|
*
|
|
* If the requested mode cannot be granted immediately, try to grant the lock
|
|
* in PR mode instead. If this alternate mode is granted instead of the
|
|
* requested mode, DLM_SBF_ALTMODE is returned in the lksb.
|
|
*
|
|
* DLM_LKF_ALTCW
|
|
*
|
|
* The same as ALTPR, but the alternate mode is CW.
|
|
*
|
|
* DLM_LKF_FORCEUNLOCK
|
|
*
|
|
* Unlock the lock even if it is converting or waiting or has sublocks.
|
|
* Only really for use by the userland device.c code.
|
|
*
|
|
*/
|
|
|
|
#define DLM_LKF_NOQUEUE 0x00000001
|
|
#define DLM_LKF_CANCEL 0x00000002
|
|
#define DLM_LKF_CONVERT 0x00000004
|
|
#define DLM_LKF_VALBLK 0x00000008
|
|
#define DLM_LKF_QUECVT 0x00000010
|
|
#define DLM_LKF_IVVALBLK 0x00000020
|
|
#define DLM_LKF_CONVDEADLK 0x00000040
|
|
#define DLM_LKF_PERSISTENT 0x00000080
|
|
#define DLM_LKF_NODLCKWT 0x00000100
|
|
#define DLM_LKF_NODLCKBLK 0x00000200
|
|
#define DLM_LKF_EXPEDITE 0x00000400
|
|
#define DLM_LKF_NOQUEUEBAST 0x00000800
|
|
#define DLM_LKF_HEADQUE 0x00001000
|
|
#define DLM_LKF_NOORDER 0x00002000
|
|
#define DLM_LKF_ORPHAN 0x00004000
|
|
#define DLM_LKF_ALTPR 0x00008000
|
|
#define DLM_LKF_ALTCW 0x00010000
|
|
#define DLM_LKF_FORCEUNLOCK 0x00020000
|
|
#define DLM_LKF_TIMEOUT 0x00040000
|
|
|
|
/*
|
|
* Some return codes that are not in errno.h
|
|
*/
|
|
|
|
#define DLM_ECANCEL 0x10001
|
|
#define DLM_EUNLOCK 0x10002
|
|
|
|
#endif /* __DLMCONSTANTS_DOT_H__ */
|