On 08/29/2013 07:57 PM, Josh Durgin wrote:
> To ensure rbd_dev is not used after it's released, flush all pending
> notify callbacks before calling rbd_dev_image_release(). No new
> notifies can be added to the queue at this point because the watch has
> already be unregistered with the osd_client.
> 
> Signed-off-by: Josh Durgin <josh.dur...@inktank.com>

Looks good.

Reviewed-by: Alex Elder <el...@linaro.org>

> ---
>  drivers/block/rbd.c |    7 +++++++
>  1 files changed, 7 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
> index 8ab3362b..2223617 100644
> --- a/drivers/block/rbd.c
> +++ b/drivers/block/rbd.c
> @@ -5190,6 +5190,13 @@ static ssize_t rbd_remove(struct bus_type *bus,
>       ret = rbd_dev_header_watch_sync(rbd_dev, false);
>       if (ret)
>               rbd_warn(rbd_dev, "failed to cancel watch event (%d)\n", ret);
> +
> +     /*
> +      * flush remaining watch callbacks - these must be complete
> +      * before the osd_client is shutdown
> +      */
> +     dout("%s: flushing notifies", __func__);
> +     ceph_osdc_flush_notifies(&rbd_dev->rbd_client->client->osdc);
>       rbd_dev_image_release(rbd_dev);
>       module_put(THIS_MODULE);
>  
> 

--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to