X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fldlm%2Fldlm_request.c;h=c5f8b75332829f07ecc669dc5b3e353da7fda2b1;hb=f79f39bd69d40faea2bd06bd1c342430553e57b8;hp=6e70bf6140c40a277d926c827f4ca18b707acd34;hpb=158a5a2c08a0b5ff1652331915f1d3cd2f41384a;p=fs%2Flustre-release.git diff --git a/lustre/ldlm/ldlm_request.c b/lustre/ldlm/ldlm_request.c index 6e70bf6..c5f8b75 100644 --- a/lustre/ldlm/ldlm_request.c +++ b/lustre/ldlm/ldlm_request.c @@ -1590,7 +1590,7 @@ int ldlm_cancel_lru_local(struct ldlm_namespace *ns, cfs_list_t *cancels, * in a thread and this function will return after the thread has been * asked to call the callback. when called with LDLM_SYNC the blocking * callback will be performed in this function. */ -int ldlm_cancel_lru(struct ldlm_namespace *ns, int nr, ldlm_sync_t sync, +int ldlm_cancel_lru(struct ldlm_namespace *ns, int nr, ldlm_sync_t mode, int flags) { CFS_LIST_HEAD(cancels); @@ -1598,19 +1598,15 @@ int ldlm_cancel_lru(struct ldlm_namespace *ns, int nr, ldlm_sync_t sync, ENTRY; #ifndef __KERNEL__ - sync = LDLM_SYNC; /* force to be sync in user space */ + mode = LDLM_SYNC; /* force to be sync in user space */ #endif count = ldlm_cancel_lru_local(ns, &cancels, nr, 0, 0, flags); - if (sync == LDLM_ASYNC) { - rc = ldlm_bl_to_thread_list(ns, NULL, &cancels, count); - if (rc == 0) - RETURN(count); - } - /* If an error occured in ASYNC mode, or this is SYNC mode, - * cancel the list. */ - ldlm_cli_cancel_list(&cancels, count, NULL, 0); - RETURN(count); + rc = ldlm_bl_to_thread_list(ns, NULL, &cancels, count, mode); + if (rc == 0) + RETURN(count); + + RETURN(0); } /* Find and cancel locally unused locks found on resource, matched to the @@ -1916,12 +1912,17 @@ int ldlm_namespace_foreach_res(struct ldlm_namespace *ns, RETURN(rc); } -/* non-blocking function to manipulate a lock whose cb_data is being put away.*/ -void ldlm_resource_iterate(struct ldlm_namespace *ns, - const struct ldlm_res_id *res_id, - ldlm_iterator_t iter, void *data) +/* non-blocking function to manipulate a lock whose cb_data is being put away. + * return 0: find no resource + * > 0: must be LDLM_ITER_STOP/LDLM_ITER_CONTINUE. + * < 0: errors + */ +int ldlm_resource_iterate(struct ldlm_namespace *ns, + const struct ldlm_res_id *res_id, + ldlm_iterator_t iter, void *data) { struct ldlm_resource *res; + int rc; ENTRY; if (ns == NULL) { @@ -1930,16 +1931,14 @@ void ldlm_resource_iterate(struct ldlm_namespace *ns, } res = ldlm_resource_get(ns, NULL, res_id, 0, 0); - if (res == NULL) { - EXIT; - return; - } + if (res == NULL) + RETURN(0); LDLM_RESOURCE_ADDREF(res); - ldlm_resource_foreach(res, iter, data); + rc = ldlm_resource_foreach(res, iter, data); LDLM_RESOURCE_DELREF(res); ldlm_resource_putref(res); - EXIT; + RETURN(rc); } /* Lock replay */