[Linux-cluster] DLM: dlm_query_wait()
Zelikov_Mikhail at emc.com
Zelikov_Mikhail at emc.com
Mon Aug 21 18:40:54 UTC 2006
While playing with DLM I modified the code in dlmtest.c to use
dlm_query_wait, however it seems to always return EINPROG status. There is a
comment in dlmtest.c:query_lock indicating that the synch version does not
exist. Is this a bug or am I missing something (I can certainly get away
with the async routine, which works)?
Thanks,
Mike
---------------------------------------------------------------
Here is the code with the comment:
---------------------------------------------------------------
"
status = dlm_query(&lksb,
DLM_QUERY_QUEUE_ALL | DLM_QUERY_LOCKS_ALL,
&qinfo,
query_ast_routine,
&lksb);
if (status)
perror("Query failed");
else
sleep(1); /* Just to allow the result to come back. There isn't
a synchronous version of this call */
"
---------------------------------------------------------------
Here is the modified code:
---------------------------------------------------------------
static int query_lock(int lockid)
{
int status;
lksb.sb_lkid = lockid;
qinfo.gqi_resinfo = &resinfo;
qinfo.gqi_lockinfo = malloc(sizeof(struct dlm_lockinfo) *
MAX_QUERY_LOCKS);
qinfo.gqi_locksize = MAX_QUERY_LOCKS;
lksb.sb_lvbptr = (char *)&qinfo;
status = dlm_query_wait(&lksb,
DLM_QUERY_QUEUE_ALL | DLM_QUERY_LOCKS_ALL,
&qinfo);
if (status)
perror("Query failed");
else
{
if (lksb.sb_status)
{
printf("Query failed: sb_status: %d (0x%08x)\n",
lksb.sb_status, lksb.sb_status);
return status;
}
query_ast_routine(&lksb);
}
return status;
}
More information about the Linux-cluster
mailing list