[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