Message ID | 20190625144111.11270-19-idryomov@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | rbd: support for object-map and fast-diff | expand |
On 06/25/2019 10:41 PM, Ilya Dryomov wrote: > Snapshot object map will be loaded in rbd_dev_image_probe(), so we need > to know snapshot's size (as opposed to HEAD's size) sooner. > > Signed-off-by: Ilya Dryomov <idryomov@gmail.com> Reviewed-by: Dongsheng Yang <dongsheng.yang@easystack.cn> > --- > drivers/block/rbd.c | 14 ++++++-------- > 1 file changed, 6 insertions(+), 8 deletions(-) > > diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c > index c9f88b0cb730..671041b67957 100644 > --- a/drivers/block/rbd.c > +++ b/drivers/block/rbd.c > @@ -6014,6 +6014,7 @@ static void rbd_dev_unprobe(struct rbd_device *rbd_dev) > struct rbd_image_header *header; > > rbd_dev_parent_put(rbd_dev); > + rbd_dev_mapping_clear(rbd_dev); > > /* Free dynamic fields from the header, then zero it out */ > > @@ -6114,7 +6115,6 @@ static int rbd_dev_probe_parent(struct rbd_device *rbd_dev, int depth) > static void rbd_dev_device_release(struct rbd_device *rbd_dev) > { > clear_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags); > - rbd_dev_mapping_clear(rbd_dev); > rbd_free_disk(rbd_dev); > if (!single_major) > unregister_blkdev(rbd_dev->major, rbd_dev->name); > @@ -6148,23 +6148,17 @@ static int rbd_dev_device_setup(struct rbd_device *rbd_dev) > if (ret) > goto err_out_blkdev; > > - ret = rbd_dev_mapping_set(rbd_dev); > - if (ret) > - goto err_out_disk; > - > set_capacity(rbd_dev->disk, rbd_dev->mapping.size / SECTOR_SIZE); > set_disk_ro(rbd_dev->disk, rbd_dev->opts->read_only); > > ret = dev_set_name(&rbd_dev->dev, "%d", rbd_dev->dev_id); > if (ret) > - goto err_out_mapping; > + goto err_out_disk; > > set_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags); > up_write(&rbd_dev->header_rwsem); > return 0; > > -err_out_mapping: > - rbd_dev_mapping_clear(rbd_dev); > err_out_disk: > rbd_free_disk(rbd_dev); > err_out_blkdev: > @@ -6265,6 +6259,10 @@ static int rbd_dev_image_probe(struct rbd_device *rbd_dev, int depth) > goto err_out_probe; > } > > + ret = rbd_dev_mapping_set(rbd_dev); > + if (ret) > + goto err_out_probe; > + > if (rbd_dev->header.features & RBD_FEATURE_LAYERING) { > ret = rbd_dev_v2_parent_info(rbd_dev); > if (ret)
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index c9f88b0cb730..671041b67957 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c @@ -6014,6 +6014,7 @@ static void rbd_dev_unprobe(struct rbd_device *rbd_dev) struct rbd_image_header *header; rbd_dev_parent_put(rbd_dev); + rbd_dev_mapping_clear(rbd_dev); /* Free dynamic fields from the header, then zero it out */ @@ -6114,7 +6115,6 @@ static int rbd_dev_probe_parent(struct rbd_device *rbd_dev, int depth) static void rbd_dev_device_release(struct rbd_device *rbd_dev) { clear_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags); - rbd_dev_mapping_clear(rbd_dev); rbd_free_disk(rbd_dev); if (!single_major) unregister_blkdev(rbd_dev->major, rbd_dev->name); @@ -6148,23 +6148,17 @@ static int rbd_dev_device_setup(struct rbd_device *rbd_dev) if (ret) goto err_out_blkdev; - ret = rbd_dev_mapping_set(rbd_dev); - if (ret) - goto err_out_disk; - set_capacity(rbd_dev->disk, rbd_dev->mapping.size / SECTOR_SIZE); set_disk_ro(rbd_dev->disk, rbd_dev->opts->read_only); ret = dev_set_name(&rbd_dev->dev, "%d", rbd_dev->dev_id); if (ret) - goto err_out_mapping; + goto err_out_disk; set_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags); up_write(&rbd_dev->header_rwsem); return 0; -err_out_mapping: - rbd_dev_mapping_clear(rbd_dev); err_out_disk: rbd_free_disk(rbd_dev); err_out_blkdev: @@ -6265,6 +6259,10 @@ static int rbd_dev_image_probe(struct rbd_device *rbd_dev, int depth) goto err_out_probe; } + ret = rbd_dev_mapping_set(rbd_dev); + if (ret) + goto err_out_probe; + if (rbd_dev->header.features & RBD_FEATURE_LAYERING) { ret = rbd_dev_v2_parent_info(rbd_dev); if (ret)
Snapshot object map will be loaded in rbd_dev_image_probe(), so we need to know snapshot's size (as opposed to HEAD's size) sooner. Signed-off-by: Ilya Dryomov <idryomov@gmail.com> --- drivers/block/rbd.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-)