RETURN(0);
}
+EXPORT_SYMBOL(ldlm_expired_completion_wait);
/* We use the same basis for both server side and client side functions
from a single node. */
ldlm_reprocess_all(lock->l_resource);
RETURN(0);
}
+EXPORT_SYMBOL(ldlm_completion_ast_async);
/**
* Client side LDLM "completion" AST. This is called in several cases:
RETURN(ldlm_completion_tail(lock));
}
+EXPORT_SYMBOL(ldlm_completion_ast);
/**
* A helper to build a blocking ast function
}
RETURN(0);
}
+EXPORT_SYMBOL(ldlm_blocking_ast_nocheck);
/**
* Server blocking AST
}
RETURN(ldlm_blocking_ast_nocheck(lock));
}
+EXPORT_SYMBOL(ldlm_blocking_ast);
/*
* ->l_glimpse_ast() for DLM extent locks acquired on the server-side. See
*/
return -ELDLM_NO_LOCK_DATA;
}
+EXPORT_SYMBOL(ldlm_glimpse_ast);
int ldlm_cli_enqueue_local(struct ldlm_namespace *ns,
const struct ldlm_res_id *res_id,
out_nolock:
return err;
}
+EXPORT_SYMBOL(ldlm_cli_enqueue_local);
static void failed_lock_cleanup(struct ldlm_namespace *ns,
struct ldlm_lock *lock, int mode)
LDLM_LOCK_RELEASE(lock);
return rc;
}
+EXPORT_SYMBOL(ldlm_cli_enqueue_fini);
/* PAGE_SIZE-512 is to allow TCP/IP and LNET headers to fit into
* a single page on the send/receive side. XXX: 512 should be changed
}
RETURN(0);
}
+EXPORT_SYMBOL(ldlm_prep_elc_req);
int ldlm_prep_enqueue_req(struct obd_export *exp, struct ptlrpc_request *req,
cfs_list_t *cancels, int count)
return ldlm_prep_elc_req(exp, req, LUSTRE_DLM_VERSION, LDLM_ENQUEUE,
LDLM_ENQUEUE_CANCEL_OFF, cancels, count);
}
+EXPORT_SYMBOL(ldlm_prep_enqueue_req);
/* If a request has some specific initialisation it is passed in @reqp,
* otherwise it is created in ldlm_cli_enqueue.
RETURN(rc);
}
+EXPORT_SYMBOL(ldlm_cli_enqueue);
static int ldlm_cli_convert_local(struct ldlm_lock *lock, int new_mode,
__u32 *flags)
ptlrpc_req_finished(req);
return rc;
}
+EXPORT_SYMBOL(ldlm_cli_convert);
/* Cancel locks locally.
* Returns:
out:
return sent ? sent : rc;
}
+EXPORT_SYMBOL(ldlm_cli_cancel_req);
static inline struct ldlm_pool *ldlm_imp2pl(struct obd_import *imp)
{
ldlm_cli_cancel_list(&cancels, count, NULL, 0);
RETURN(0);
}
+EXPORT_SYMBOL(ldlm_cli_cancel);
/* XXX until we will have compound requests and can cut cancels from generic rpc
* we need send cancels with LDLM_FL_BL_AST flag as separate rpc */
RETURN(count);
}
+EXPORT_SYMBOL(ldlm_cli_cancel_list_local);
/**
* Cancel as many locks as possible w/o sending any rpcs (e.g. to write back
RETURN(ldlm_cli_cancel_list_local(cancels, count, cancel_flags));
}
+EXPORT_SYMBOL(ldlm_cancel_resource_local);
/* If @req is NULL, send CANCEL request to server with handles of locks
* in the @cancels. If EARLY_CANCEL is not supported, send CANCEL requests
LASSERT(count == 0);
RETURN(0);
}
+EXPORT_SYMBOL(ldlm_cli_cancel_list);
int ldlm_cli_cancel_unused_resource(struct ldlm_namespace *ns,
const struct ldlm_res_id *res_id,
ldlm_resource_putref(res);
RETURN(0);
}
+EXPORT_SYMBOL(ldlm_cli_cancel_unused_resource);
struct ldlm_cli_cancel_arg {
int lc_flags;
RETURN(ELDLM_OK);
}
}
+EXPORT_SYMBOL(ldlm_cli_cancel_unused);
/* Lock iterators. */
unlock_res(res);
RETURN(rc);
}
+EXPORT_SYMBOL(ldlm_resource_foreach);
struct iter_helper_data {
ldlm_iterator_t iter;
ldlm_res_iter_helper, &helper);
}
+EXPORT_SYMBOL(ldlm_namespace_foreach);
/* non-blocking function to manipulate a lock whose cb_data is being put away.
* return 0: find no resource
ldlm_resource_putref(res);
RETURN(rc);
}
+EXPORT_SYMBOL(ldlm_resource_iterate);
/* Lock replay */
RETURN(rc);
}
+EXPORT_SYMBOL(ldlm_replay_locks);