+
+
+/* completion */
+struct completion {
+ unsigned int done;
+ wait_queue_head_t wait;
+};
+
+#define COMPLETION_INITIALIZER(work) \
+ { 0, __WAIT_QUEUE_HEAD_INITIALIZER((work).wait) }
+
+#define DECLARE_COMPLETION(work) \
+ struct completion work = COMPLETION_INITIALIZER(work)
+
+#define INIT_COMPLETION(x) ((x).done = 0)
+
+static inline void init_completion(struct completion *x)
+{
+ x->done = 0;
+ init_waitqueue_head(&x->wait);
+}
+
+struct liblustre_wait_callback {
+ struct list_head llwc_list;
+ int (*llwc_fn)(void *arg);
+ void *llwc_arg;
+};
+
+void *liblustre_register_wait_callback(int (*fn)(void *arg), void *arg);
+void liblustre_deregister_wait_callback(void *notifier);
+int liblustre_wait_event(int timeout);
+