Reviewed-by:

On Thu, 22 May 2014, Ilya Dryomov wrote:

> Add ceph_monc_wait_osdmap(), which will block until the osdmap with the
> specified epoch is received or timeout occurs.
> 
> Export both of these as they are going to be needed by rbd.
> 
> Signed-off-by: Ilya Dryomov <[email protected]>
> ---
>  include/linux/ceph/mon_client.h |    2 ++
>  net/ceph/mon_client.c           |   27 +++++++++++++++++++++++++++
>  2 files changed, 29 insertions(+)
> 
> diff --git a/include/linux/ceph/mon_client.h b/include/linux/ceph/mon_client.h
> index 585ef9450e9d..deb47e45ac7c 100644
> --- a/include/linux/ceph/mon_client.h
> +++ b/include/linux/ceph/mon_client.h
> @@ -104,6 +104,8 @@ extern int ceph_monc_got_mdsmap(struct ceph_mon_client 
> *monc, u32 have);
>  extern int ceph_monc_got_osdmap(struct ceph_mon_client *monc, u32 have);
>  
>  extern void ceph_monc_request_next_osdmap(struct ceph_mon_client *monc);
> +extern int ceph_monc_wait_osdmap(struct ceph_mon_client *monc, u32 epoch,
> +                              unsigned long timeout);
>  
>  extern int ceph_monc_do_statfs(struct ceph_mon_client *monc,
>                              struct ceph_statfs *buf);
> diff --git a/net/ceph/mon_client.c b/net/ceph/mon_client.c
> index 6b46f1205ceb..ecfd65c05f49 100644
> --- a/net/ceph/mon_client.c
> +++ b/net/ceph/mon_client.c
> @@ -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);
>  
>  /*
>   *
> -- 
> 1.7.10.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to