Description of problem: In order to detect deadlocks, it might be a good thing to be able to query the underlying cluster locking system for the holder of an exclusive lock so that we can detect deadlock easily. This should not break existing application APIs on RHEL4 or STABLE branches, and newer applications which understand the extension *must* be able to function without it. Given the above requirements, and the fact that node IDs are 64 bit in magma (thus, simply casting the return pointer is not going to work on 32-bit architectures), the easiest way to do this is to: (a) Provide a new flag to clu_lock / cp_lock APIs which gets passed down to the plugin. (b) Failure code from the lock functions, and store the node ID in the first 64 bits of the return pointer block (which the plugin will allocate). (c) The caller will be expected to free this, as the caller should be expecting it if it is using the new flag in (a). NOTE: In future (e.g. HEAD) branches, the locking API should be changed to have a uint64_t * pointer parameter (possibly with a new lock function call - which need not necessarily be implemented by the plugin(s)) instead of the above hack.
Fixes in CVS - RHEL4, head, STABLE
An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on the solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHBA-2006-0239.html