Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 373523
b: refs/heads/master
c: 200a6a8
h: refs/heads/master
i:
  373521: faf13b1
  373519: bdf2b26
v: v3
  • Loading branch information
Alex Elder authored and Sage Weil committed May 2, 2013
1 parent 70dffc4 commit e2ccaaa
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 16 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 79ab7558aac7622109e9d9b089cac2c5f06aca20
refs/heads/master: 200a6a8be5dba96df121f3d2363964dd77ee7e1b
41 changes: 26 additions & 15 deletions trunk/drivers/block/rbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ static int rbd_img_request_submit(struct rbd_img_request *img_request);

static int rbd_dev_snaps_update(struct rbd_device *rbd_dev);

static void rbd_dev_release(struct device *dev);
static void rbd_dev_device_release(struct device *dev);
static void rbd_snap_destroy(struct rbd_snap *snap);

static ssize_t rbd_add(struct bus_type *bus, const char *buf,
Expand Down Expand Up @@ -893,6 +893,13 @@ static void rbd_dev_mapping_clear(struct rbd_device *rbd_dev)
rbd_dev->mapping.read_only = true;
}

static void rbd_dev_clear_mapping(struct rbd_device *rbd_dev)
{
rbd_dev->mapping.size = 0;
rbd_dev->mapping.features = 0;
rbd_dev->mapping.read_only = true;
}

static void rbd_header_free(struct rbd_image_header *header)
{
kfree(header->object_prefix);
Expand Down Expand Up @@ -4182,7 +4189,7 @@ static int rbd_bus_add_dev(struct rbd_device *rbd_dev)
dev->bus = &rbd_bus_type;
dev->type = &rbd_device_type;
dev->parent = &rbd_root_dev;
dev->release = rbd_dev_release;
dev->release = rbd_dev_device_release;
dev_set_name(dev, "%d", rbd_dev->dev_id);
ret = device_register(dev);

Expand Down Expand Up @@ -4718,7 +4725,7 @@ static int rbd_dev_probe_parent(struct rbd_device *rbd_dev)
return ret;
}

static int rbd_dev_probe_finish(struct rbd_device *rbd_dev)
static int rbd_dev_device_setup(struct rbd_device *rbd_dev)
{
int ret;

Expand Down Expand Up @@ -4800,6 +4807,15 @@ static int rbd_dev_header_name(struct rbd_device *rbd_dev)
return 0;
}

static void rbd_dev_image_release(struct rbd_device *rbd_dev)
{
rbd_header_free(&rbd_dev->header);
rbd_assert(rbd_dev->rbd_client != NULL);
rbd_spec_put(rbd_dev->parent_spec);
kfree(rbd_dev->header_name);
rbd_dev_destroy(rbd_dev);
}

/*
* Probe for the existence of the header object for the given rbd
* device. For format 2 images this includes determining the image
Expand Down Expand Up @@ -4848,7 +4864,7 @@ static int rbd_dev_image_probe(struct rbd_device *rbd_dev)
if (ret)
goto err_out_snaps;

ret = rbd_dev_probe_finish(rbd_dev);
ret = rbd_dev_device_setup(rbd_dev);
if (ret)
goto err_out_parent;

Expand Down Expand Up @@ -4968,24 +4984,19 @@ static struct rbd_device *__rbd_get_dev(unsigned long dev_id)
return NULL;
}

static void rbd_dev_release(struct device *dev)
static void rbd_dev_device_release(struct device *dev)
{
struct rbd_device *rbd_dev = dev_to_rbd_dev(dev);

/* clean up and free blkdev */
rbd_free_disk(rbd_dev);
clear_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags);
rbd_dev_clear_mapping(rbd_dev);
unregister_blkdev(rbd_dev->major, rbd_dev->name);

/* release allocated disk header fields */
rbd_header_free(&rbd_dev->header);

/* done with the id, and with the rbd_dev */
rbd_dev->major = 0;
rbd_dev_id_put(rbd_dev);
rbd_dev_mapping_clear(rbd_dev);
rbd_assert(rbd_dev->rbd_client != NULL);
rbd_spec_put(rbd_dev->parent_spec);
kfree(rbd_dev->header_name);
rbd_dev_destroy(rbd_dev);

rbd_dev_image_release(rbd_dev);
}

static void rbd_dev_remove_parent(struct rbd_device *rbd_dev)
Expand Down

0 comments on commit e2ccaaa

Please sign in to comment.