aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block
diff options
context:
space:
mode:
authorAlex Elder <elder@inktank.com>2013-04-27 10:59:30 -0400
committerSage Weil <sage@inktank.com>2013-05-02 00:19:58 -0400
commit332bb12db9459d52dfcdb278e7607351d2eff6ab (patch)
tree02d9744f73467499cfa30f5685663fd076fd0f04 /drivers/block
parent9bb81c9be90c1ad265547f0a40f543548d263fb4 (diff)
rbd: define rbd_header_name()
Define a new function rbd_header_name(), which allocates and formats the name of the header object for the rbd device. Signed-off-by: Alex Elder <elder@inktank.com> Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
Diffstat (limited to 'drivers/block')
-rw-r--r--drivers/block/rbd.c66
1 files changed, 38 insertions, 28 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index ebf4d470e13f..44739640d94f 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -4592,18 +4592,6 @@ out:
4592static int rbd_dev_v1_probe(struct rbd_device *rbd_dev) 4592static int rbd_dev_v1_probe(struct rbd_device *rbd_dev)
4593{ 4593{
4594 int ret; 4594 int ret;
4595 size_t size;
4596
4597 /* Record the header object name for this rbd image. */
4598
4599 size = strlen(rbd_dev->spec->image_name) + sizeof (RBD_SUFFIX);
4600 rbd_dev->header_name = kmalloc(size, GFP_KERNEL);
4601 if (!rbd_dev->header_name) {
4602 ret = -ENOMEM;
4603 goto out_err;
4604 }
4605 sprintf(rbd_dev->header_name, "%s%s",
4606 rbd_dev->spec->image_name, RBD_SUFFIX);
4607 4595
4608 /* Populate rbd image metadata */ 4596 /* Populate rbd image metadata */
4609 4597
@@ -4632,22 +4620,9 @@ out_err:
4632 4620
4633static int rbd_dev_v2_probe(struct rbd_device *rbd_dev) 4621static int rbd_dev_v2_probe(struct rbd_device *rbd_dev)
4634{ 4622{
4635 size_t size;
4636 int ret; 4623 int ret;
4637 u64 ver = 0; 4624 u64 ver = 0;
4638 4625
4639 /*
4640 * Image id was filled in by the caller. Record the header
4641 * object name for this rbd image.
4642 */
4643 size = sizeof (RBD_HEADER_PREFIX) + strlen(rbd_dev->spec->image_id);
4644 rbd_dev->header_name = kmalloc(size, GFP_KERNEL);
4645 if (!rbd_dev->header_name)
4646 return -ENOMEM;
4647 sprintf(rbd_dev->header_name, "%s%s",
4648 RBD_HEADER_PREFIX, rbd_dev->spec->image_id);
4649
4650 /* Get the size and object order for the image */
4651 ret = rbd_dev_v2_image_size(rbd_dev); 4626 ret = rbd_dev_v2_image_size(rbd_dev);
4652 if (ret) 4627 if (ret)
4653 goto out_err; 4628 goto out_err;
@@ -4810,6 +4785,33 @@ err_out_id:
4810 return ret; 4785 return ret;
4811} 4786}
4812 4787
4788static int rbd_dev_header_name(struct rbd_device *rbd_dev)
4789{
4790 struct rbd_spec *spec = rbd_dev->spec;
4791 size_t size;
4792
4793 /* Record the header object name for this rbd image. */
4794
4795 rbd_assert(rbd_image_format_valid(rbd_dev->image_format));
4796
4797 if (rbd_dev->image_format == 1)
4798 size = strlen(spec->image_name) + sizeof (RBD_SUFFIX);
4799 else
4800 size = sizeof (RBD_HEADER_PREFIX) + strlen(spec->image_id);
4801
4802 rbd_dev->header_name = kmalloc(size, GFP_KERNEL);
4803 if (!rbd_dev->header_name)
4804 return -ENOMEM;
4805
4806 if (rbd_dev->image_format == 1)
4807 sprintf(rbd_dev->header_name, "%s%s",
4808 spec->image_name, RBD_SUFFIX);
4809 else
4810 sprintf(rbd_dev->header_name, "%s%s",
4811 RBD_HEADER_PREFIX, spec->image_id);
4812 return 0;
4813}
4814
4813/* 4815/*
4814 * Probe for the existence of the header object for the given rbd 4816 * Probe for the existence of the header object for the given rbd
4815 * device. For format 2 images this includes determining the image 4817 * device. For format 2 images this includes determining the image
@@ -4830,16 +4832,20 @@ static int rbd_dev_image_probe(struct rbd_device *rbd_dev)
4830 rbd_assert(rbd_dev->spec->image_id); 4832 rbd_assert(rbd_dev->spec->image_id);
4831 rbd_assert(rbd_image_format_valid(rbd_dev->image_format)); 4833 rbd_assert(rbd_image_format_valid(rbd_dev->image_format));
4832 4834
4835 ret = rbd_dev_header_name(rbd_dev);
4836 if (ret)
4837 goto err_out_format;
4838
4833 if (rbd_dev->image_format == 1) 4839 if (rbd_dev->image_format == 1)
4834 ret = rbd_dev_v1_probe(rbd_dev); 4840 ret = rbd_dev_v1_probe(rbd_dev);
4835 else 4841 else
4836 ret = rbd_dev_v2_probe(rbd_dev); 4842 ret = rbd_dev_v2_probe(rbd_dev);
4837 if (ret) 4843 if (ret)
4838 goto out_err; 4844 goto out_header_name;
4839 4845
4840 ret = rbd_dev_snaps_update(rbd_dev); 4846 ret = rbd_dev_snaps_update(rbd_dev);
4841 if (ret) 4847 if (ret)
4842 goto out_err; 4848 goto out_header_name;
4843 4849
4844 ret = rbd_dev_spec_update(rbd_dev); 4850 ret = rbd_dev_spec_update(rbd_dev);
4845 if (ret) 4851 if (ret)
@@ -4859,7 +4865,11 @@ err_out_parent:
4859 rbd_header_free(&rbd_dev->header); 4865 rbd_header_free(&rbd_dev->header);
4860err_out_snaps: 4866err_out_snaps:
4861 rbd_remove_all_snaps(rbd_dev); 4867 rbd_remove_all_snaps(rbd_dev);
4862out_err: 4868out_header_name:
4869 kfree(rbd_dev->header_name);
4870 rbd_dev->header_name = NULL;
4871err_out_format:
4872 rbd_dev->image_format = 0;
4863 kfree(rbd_dev->spec->image_id); 4873 kfree(rbd_dev->spec->image_id);
4864 rbd_dev->spec->image_id = NULL; 4874 rbd_dev->spec->image_id = NULL;
4865 4875