From d30539de2cd267c1a28fa84608f947171d5f0910 Mon Sep 17 00:00:00 2001 From: Alex Elder Date: Wed, 29 Aug 2012 17:11:07 -0500 Subject: [PATCH] --- yaml --- r: 331669 b: refs/heads/master c: 05fd6f6f8c7b07e746d513e4cf862675b70aac59 h: refs/heads/master i: 331667: 2ef40f19fa2986de90aab0dfbb92f469f3166161 v: v3 --- [refs] | 2 +- trunk/drivers/block/rbd.c | 33 ++++++++++++++++++--------------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/[refs] b/[refs] index bb1e7f2b1714..2871f1d40639 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5ed1617731a1e9201c3541a9c05ce3ec73975589 +refs/heads/master: 05fd6f6f8c7b07e746d513e4cf862675b70aac59 diff --git a/trunk/drivers/block/rbd.c b/trunk/drivers/block/rbd.c index a9f5de2706ec..aa4752d9d9fa 100644 --- a/trunk/drivers/block/rbd.c +++ b/trunk/drivers/block/rbd.c @@ -2601,10 +2601,25 @@ static ssize_t rbd_add(struct bus_type *bus, goto err_out_client; sprintf(rbd_dev->header_name, "%s%s", rbd_dev->image_name, RBD_SUFFIX); + /* Get information about the image being mapped */ + + rc = rbd_read_header(rbd_dev, &rbd_dev->header); + if (rc) + goto err_out_client; + + /* no need to lock here, as rbd_dev is not registered yet */ + rc = rbd_dev_snaps_update(rbd_dev); + if (rc) + goto err_out_header; + + rc = rbd_dev_set_mapping(rbd_dev, snap_name); + if (rc) + goto err_out_header; + /* register our block device */ rc = register_blkdev(0, rbd_dev->name); if (rc < 0) - goto err_out_client; + goto err_out_header; rbd_dev->major = rc; rc = rbd_bus_add_dev(rbd_dev); @@ -2616,20 +2631,6 @@ static ssize_t rbd_add(struct bus_type *bus, * of the sysfs code (initiated by rbd_bus_del_dev()). */ - /* contact OSD, request size info about the object being mapped */ - rc = rbd_read_header(rbd_dev, &rbd_dev->header); - if (rc) - goto err_out_bus; - - /* no need to lock here, as rbd_dev is not registered yet */ - rc = rbd_dev_snaps_update(rbd_dev); - if (rc) - goto err_out_bus; - - rc = rbd_dev_set_mapping(rbd_dev, snap_name); - if (rc) - goto err_out_bus; - down_write(&rbd_dev->header_rwsem); rc = rbd_dev_snaps_register(rbd_dev); up_write(&rbd_dev->header_rwsem); @@ -2664,6 +2665,8 @@ static ssize_t rbd_add(struct bus_type *bus, err_out_blkdev: unregister_blkdev(rbd_dev->major, rbd_dev->name); +err_out_header: + rbd_header_free(&rbd_dev->header); err_out_client: kfree(rbd_dev->header_name); rbd_put_client(rbd_dev);