diff options
| -rw-r--r-- | drivers/block/rbd.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index 5f64ba77bc7f..3a897a531e9c 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c | |||
| @@ -4700,8 +4700,10 @@ out: | |||
| 4700 | return ret; | 4700 | return ret; |
| 4701 | } | 4701 | } |
| 4702 | 4702 | ||
| 4703 | /* Undo whatever state changes are made by v1 or v2 image probe */ | 4703 | /* |
| 4704 | 4704 | * Undo whatever state changes are made by v1 or v2 header info | |
| 4705 | * call. | ||
| 4706 | */ | ||
| 4705 | static void rbd_dev_unprobe(struct rbd_device *rbd_dev) | 4707 | static void rbd_dev_unprobe(struct rbd_device *rbd_dev) |
| 4706 | { | 4708 | { |
| 4707 | struct rbd_image_header *header; | 4709 | struct rbd_image_header *header; |
| @@ -4905,9 +4907,10 @@ static int rbd_dev_image_probe(struct rbd_device *rbd_dev, bool mapping) | |||
| 4905 | int tmp; | 4907 | int tmp; |
| 4906 | 4908 | ||
| 4907 | /* | 4909 | /* |
| 4908 | * Get the id from the image id object. If it's not a | 4910 | * Get the id from the image id object. Unless there's an |
| 4909 | * format 2 image, we'll get ENOENT back, and we'll assume | 4911 | * error, rbd_dev->spec->image_id will be filled in with |
| 4910 | * it's a format 1 image. | 4912 | * a dynamically-allocated string, and rbd_dev->image_format |
| 4913 | * will be set to either 1 or 2. | ||
| 4911 | */ | 4914 | */ |
| 4912 | ret = rbd_dev_image_id(rbd_dev); | 4915 | ret = rbd_dev_image_id(rbd_dev); |
| 4913 | if (ret) | 4916 | if (ret) |
| @@ -5029,16 +5032,18 @@ static ssize_t rbd_add(struct bus_type *bus, | |||
| 5029 | rbd_dev->mapping.read_only = read_only; | 5032 | rbd_dev->mapping.read_only = read_only; |
| 5030 | 5033 | ||
| 5031 | rc = rbd_dev_device_setup(rbd_dev); | 5034 | rc = rbd_dev_device_setup(rbd_dev); |
| 5032 | if (!rc) | 5035 | if (rc) { |
| 5033 | return count; | 5036 | rbd_dev_image_release(rbd_dev); |
| 5037 | goto err_out_module; | ||
| 5038 | } | ||
| 5039 | |||
| 5040 | return count; | ||
| 5034 | 5041 | ||
| 5035 | rbd_dev_image_release(rbd_dev); | ||
| 5036 | err_out_rbd_dev: | 5042 | err_out_rbd_dev: |
| 5037 | rbd_dev_destroy(rbd_dev); | 5043 | rbd_dev_destroy(rbd_dev); |
| 5038 | err_out_client: | 5044 | err_out_client: |
| 5039 | rbd_put_client(rbdc); | 5045 | rbd_put_client(rbdc); |
| 5040 | err_out_args: | 5046 | err_out_args: |
| 5041 | kfree(rbd_opts); | ||
| 5042 | rbd_spec_put(spec); | 5047 | rbd_spec_put(spec); |
| 5043 | err_out_module: | 5048 | err_out_module: |
| 5044 | module_put(THIS_MODULE); | 5049 | module_put(THIS_MODULE); |
