dlm_unlock(3)
NAME
dlm_unlock - unlock a DLM lock
SYNOPSIS
#include <libdlm.h> int dlm_unlock(uint32_t lkid, uint32_t flags, struct dlm_lksb *lksb, void *astarg); int dlm_unlock_wait(uint32_t lkid, uint32_t flags, struct dlm_lksb *lksb);
DESCRIPTION
dlm_unlock() unlocks a lock previously acquired by dlm_lock and its
variants.
Unless dlm_unlock_wait() is used unlocks are also asynchronous. The AST
routine is called when the resource is successfully unlocked (see
below).
lkid Lock ID as returned in the lksb
- flags flags affecting the unlock operation:
- LKF_CANCEL Cancel a pending lock or conversion.
This returns the lock to it's previously
granted mode (in case of a conversion) or
unlocks it (in case of a waiting lock). - LKF_IVVALBLK Invalidate value block
LKF_FORCEUNLOCK Unlock the lock even if it's waiting. - lksb LKSB to return status and value block information.
- astarg New parameter to be passed to the completion AST. The completion AST routine is the last completion AST routine specified in a dlm_lock call. If dlm_lock_wait() was the last routine to issue a lock, dlm_unlock_wait() must be used to release the lock. If dlm_lock() was the last routine to issue a lock then either dlm_unlock() or dlm_unlock_wait() may be called.
- Return values
- 0 is returned if the call completed successfully. If not, -1 is returned and errno is set to one of the following:
- EINVAL An invalid parameter was passed to the call (eg bad
lock mode or flag)
- EINPROGRESS The lock is already being unlocked
EBUSY The lock is currently being locked or converted
ENOTEMPTY An attempt to made to unlock a parent lock that still haschild locks. - ECANCEL A lock conversion was successfully cancelled
EUNLOCK An unlock operation completed successfully(sb_status only) - EFAULT The userland buffer could not be read/written by the
kernel
- If an error is returned in the AST, then lksb.sb_status is set to the one of the above numbers instead of zero.
EXAMPLE
int status;
struct dlm_lksb lksb;
- status = dlm_lock_wait(LKM_EXMODE,
- &lksb,
LKF_NOQUEUE,
"MyLock",
strlen("MyLock"),
0, // Parent,
NULL, // bast arg
NULL, // bast routine,
NULL); // Range - if (status == 0)
- dlm_unlock_wait(lksb.sb_lkid, 0, &lksb);