提交 263423f8 编写于 作者: I Ilya Dryomov

rbd: introduce rbd_init_layout()

Rather than initializing layout fields with some made up values in
__rbd_dev_create(), move the initialization into rbd_init_layout() and
call it after the header is actually populated.
Signed-off-by: NIlya Dryomov <idryomov@gmail.com>
Reviewed-by: NJason Dillaman <dillaman@redhat.com>
上级 5bc3fb17
...@@ -978,6 +978,21 @@ static u32 rbd_obj_bytes(struct rbd_image_header *header) ...@@ -978,6 +978,21 @@ static u32 rbd_obj_bytes(struct rbd_image_header *header)
return 1U << header->obj_order; return 1U << header->obj_order;
} }
static void rbd_init_layout(struct rbd_device *rbd_dev)
{
if (rbd_dev->header.stripe_unit == 0 ||
rbd_dev->header.stripe_count == 0) {
rbd_dev->header.stripe_unit = rbd_obj_bytes(&rbd_dev->header);
rbd_dev->header.stripe_count = 1;
}
rbd_dev->layout.stripe_unit = rbd_dev->header.stripe_unit;
rbd_dev->layout.stripe_count = rbd_dev->header.stripe_count;
rbd_dev->layout.object_size = rbd_obj_bytes(&rbd_dev->header);
rbd_dev->layout.pool_id = rbd_dev->spec->pool_id;
RCU_INIT_POINTER(rbd_dev->layout.pool_ns, NULL);
}
/* /*
* Fill an rbd image header with information from the given format 1 * Fill an rbd image header with information from the given format 1
* on-disk header. * on-disk header.
...@@ -1053,6 +1068,7 @@ static int rbd_header_from_disk(struct rbd_device *rbd_dev, ...@@ -1053,6 +1068,7 @@ static int rbd_header_from_disk(struct rbd_device *rbd_dev,
if (first_time) { if (first_time) {
header->object_prefix = object_prefix; header->object_prefix = object_prefix;
header->obj_order = ondisk->options.order; header->obj_order = ondisk->options.order;
rbd_init_layout(rbd_dev);
} else { } else {
ceph_put_snap_context(header->snapc); ceph_put_snap_context(header->snapc);
kfree(header->snap_names); kfree(header->snap_names);
...@@ -4804,12 +4820,6 @@ static struct rbd_device *__rbd_dev_create(struct rbd_client *rbdc, ...@@ -4804,12 +4820,6 @@ static struct rbd_device *__rbd_dev_create(struct rbd_client *rbdc,
rbd_dev->rbd_client = rbdc; rbd_dev->rbd_client = rbdc;
rbd_dev->spec = spec; rbd_dev->spec = spec;
rbd_dev->layout.stripe_unit = 1 << RBD_MAX_OBJ_ORDER;
rbd_dev->layout.stripe_count = 1;
rbd_dev->layout.object_size = 1 << RBD_MAX_OBJ_ORDER;
rbd_dev->layout.pool_id = spec->pool_id;
RCU_INIT_POINTER(rbd_dev->layout.pool_ns, NULL);
return rbd_dev; return rbd_dev;
} }
...@@ -5848,12 +5858,13 @@ static int rbd_dev_v2_header_onetime(struct rbd_device *rbd_dev) ...@@ -5848,12 +5858,13 @@ static int rbd_dev_v2_header_onetime(struct rbd_device *rbd_dev)
goto out_err; goto out_err;
} }
rbd_init_layout(rbd_dev);
return 0; return 0;
out_err: out_err:
rbd_dev->header.features = 0; rbd_dev->header.features = 0;
kfree(rbd_dev->header.object_prefix); kfree(rbd_dev->header.object_prefix);
rbd_dev->header.object_prefix = NULL; rbd_dev->header.object_prefix = NULL;
return ret; return ret;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册