X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fldlm%2Fldlm_lock.c;h=93ccbee37c27b0f4d26b6533e888ae364229345d;hp=bb17c8a97a29b89b4b301acbf93a774dd1b2282d;hb=ae0d69437e35961c257f076da6dcc1842a55456d;hpb=113b7cfe87be903a2398550fb2cd32b77430bcda diff --git a/lustre/ldlm/ldlm_lock.c b/lustre/ldlm/ldlm_lock.c index bb17c8a..93ccbee 100644 --- a/lustre/ldlm/ldlm_lock.c +++ b/lustre/ldlm/ldlm_lock.c @@ -1618,6 +1618,33 @@ ldlm_work_revoke_ast_lock(struct ptlrpc_request_set *rqset, void *opaq) RETURN(rc); } +int ldlm_work_gl_ast_lock(struct ptlrpc_request_set *rqset, void *opaq) +{ + struct ldlm_cb_set_arg *arg = opaq; + struct ldlm_glimpse_work *gl_work; + struct ldlm_lock *lock; + int rc = 0; + ENTRY; + + if (cfs_list_empty(arg->list)) + RETURN(-ENOENT); + + gl_work = cfs_list_entry(arg->list->next, struct ldlm_glimpse_work, + gl_list); + cfs_list_del_init(&gl_work->gl_list); + + lock = gl_work->gl_lock; + if (lock->l_glimpse_ast(lock, (void*)arg) == 0) + rc = 1; + + LDLM_LOCK_RELEASE(lock); + + if ((gl_work->gl_flags & LDLM_GL_WORK_NOFREE) == 0) + OBD_FREE_PTR(gl_work); + + RETURN(rc); +} + int ldlm_run_ast_work(struct ldlm_namespace *ns, cfs_list_t *rpc_list, ldlm_desc_ast_t ast_type) { @@ -1648,6 +1675,10 @@ int ldlm_run_ast_work(struct ldlm_namespace *ns, cfs_list_t *rpc_list, arg->type = LDLM_BL_CALLBACK; work_ast_lock = ldlm_work_revoke_ast_lock; break; + case LDLM_WORK_GL_AST: + arg->type = LDLM_GL_CALLBACK; + work_ast_lock = ldlm_work_gl_ast_lock; + break; default: LBUG(); }