|
@@ -296,6 +296,33 @@ void ceph_monc_request_next_osdmap(struct ceph_mon_client *monc)
|
|
|
__send_subscribe(monc);
|
|
|
mutex_unlock(&monc->mutex);
|
|
|
}
|
|
|
+EXPORT_SYMBOL(ceph_monc_request_next_osdmap);
|
|
|
+
|
|
|
+int ceph_monc_wait_osdmap(struct ceph_mon_client *monc, u32 epoch,
|
|
|
+ unsigned long timeout)
|
|
|
+{
|
|
|
+ unsigned long started = jiffies;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ mutex_lock(&monc->mutex);
|
|
|
+ while (monc->have_osdmap < epoch) {
|
|
|
+ mutex_unlock(&monc->mutex);
|
|
|
+
|
|
|
+ if (timeout != 0 && time_after_eq(jiffies, started + timeout))
|
|
|
+ return -ETIMEDOUT;
|
|
|
+
|
|
|
+ ret = wait_event_interruptible_timeout(monc->client->auth_wq,
|
|
|
+ monc->have_osdmap >= epoch, timeout);
|
|
|
+ if (ret < 0)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ mutex_lock(&monc->mutex);
|
|
|
+ }
|
|
|
+
|
|
|
+ mutex_unlock(&monc->mutex);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(ceph_monc_wait_osdmap);
|
|
|
|
|
|
/*
|
|
|
*
|