This is from device.c. The intent seems to be that if an argument is specified, then it overrides an existing value. However, a new completion ast address is only loaded if a new blocking ast address is specified. if (kparams->flags & DLM_LKF_CONVERT) { struct dlm_lkb *lkb = dlm_get_lkb(fi->fi_ls->ls_lockspace, kparams->lkid); if (!lkb) { return -EINVAL; } li = (struct lock_info *)lkb->lkb_astparam; /* Only override these if they are provided */ if (li->li_user_lksb) li->li_user_lksb = kparams->lksb; if (li->li_astparam) li->li_astparam = kparams->astparam; if (li->li_bastaddr) li->li_bastaddr = kparams->bastaddr; ---> if (li->li_bastaddr) ---> li->li_astaddr = kparams->astaddr; li->li_flags = 0; }