mirror of https://gitee.com/openkylin/linux.git
rbd: store rbd_options in rbd_device
Signed-off-by: Ilya Dryomov <idryomov@gmail.com> Reviewed-by: Alex Elder <elder@linaro.org>
This commit is contained in:
parent
210c104c54
commit
d147543d79
|
@ -346,6 +346,7 @@ struct rbd_device {
|
|||
struct rbd_image_header header;
|
||||
unsigned long flags; /* possibly lock protected */
|
||||
struct rbd_spec *spec;
|
||||
struct rbd_options *opts;
|
||||
|
||||
char *header_name;
|
||||
|
||||
|
@ -4055,7 +4056,8 @@ static void rbd_spec_free(struct kref *kref)
|
|||
}
|
||||
|
||||
static struct rbd_device *rbd_dev_create(struct rbd_client *rbdc,
|
||||
struct rbd_spec *spec)
|
||||
struct rbd_spec *spec,
|
||||
struct rbd_options *opts)
|
||||
{
|
||||
struct rbd_device *rbd_dev;
|
||||
|
||||
|
@ -4069,8 +4071,9 @@ static struct rbd_device *rbd_dev_create(struct rbd_client *rbdc,
|
|||
INIT_LIST_HEAD(&rbd_dev->node);
|
||||
init_rwsem(&rbd_dev->header_rwsem);
|
||||
|
||||
rbd_dev->spec = spec;
|
||||
rbd_dev->rbd_client = rbdc;
|
||||
rbd_dev->spec = spec;
|
||||
rbd_dev->opts = opts;
|
||||
|
||||
/* Initialize the layout used for all rbd requests */
|
||||
|
||||
|
@ -4086,6 +4089,7 @@ static void rbd_dev_destroy(struct rbd_device *rbd_dev)
|
|||
{
|
||||
rbd_put_client(rbd_dev->rbd_client);
|
||||
rbd_spec_put(rbd_dev->spec);
|
||||
kfree(rbd_dev->opts);
|
||||
kfree(rbd_dev);
|
||||
}
|
||||
|
||||
|
@ -5160,7 +5164,7 @@ static int rbd_dev_probe_parent(struct rbd_device *rbd_dev)
|
|||
rbdc = __rbd_get_client(rbd_dev->rbd_client);
|
||||
|
||||
ret = -ENOMEM;
|
||||
parent = rbd_dev_create(rbdc, parent_spec);
|
||||
parent = rbd_dev_create(rbdc, parent_spec, NULL);
|
||||
if (!parent)
|
||||
goto out_err;
|
||||
|
||||
|
@ -5406,9 +5410,6 @@ static ssize_t do_rbd_add(struct bus_type *bus,
|
|||
rc = rbd_add_parse_args(buf, &ceph_opts, &rbd_opts, &spec);
|
||||
if (rc < 0)
|
||||
goto err_out_module;
|
||||
read_only = rbd_opts->read_only;
|
||||
kfree(rbd_opts);
|
||||
rbd_opts = NULL; /* done with this */
|
||||
|
||||
rbdc = rbd_get_client(ceph_opts);
|
||||
if (IS_ERR(rbdc)) {
|
||||
|
@ -5434,11 +5435,12 @@ static ssize_t do_rbd_add(struct bus_type *bus,
|
|||
goto err_out_client;
|
||||
}
|
||||
|
||||
rbd_dev = rbd_dev_create(rbdc, spec);
|
||||
rbd_dev = rbd_dev_create(rbdc, spec, rbd_opts);
|
||||
if (!rbd_dev)
|
||||
goto err_out_client;
|
||||
rbdc = NULL; /* rbd_dev now owns this */
|
||||
spec = NULL; /* rbd_dev now owns this */
|
||||
rbd_opts = NULL; /* rbd_dev now owns this */
|
||||
|
||||
rc = rbd_dev_image_probe(rbd_dev, true);
|
||||
if (rc < 0)
|
||||
|
@ -5446,6 +5448,7 @@ static ssize_t do_rbd_add(struct bus_type *bus,
|
|||
|
||||
/* If we are mapping a snapshot it must be marked read-only */
|
||||
|
||||
read_only = rbd_dev->opts->read_only;
|
||||
if (rbd_dev->spec->snap_id != CEPH_NOSNAP)
|
||||
read_only = true;
|
||||
rbd_dev->mapping.read_only = read_only;
|
||||
|
@ -5470,6 +5473,7 @@ static ssize_t do_rbd_add(struct bus_type *bus,
|
|||
rbd_put_client(rbdc);
|
||||
err_out_args:
|
||||
rbd_spec_put(spec);
|
||||
kfree(rbd_opts);
|
||||
err_out_module:
|
||||
module_put(THIS_MODULE);
|
||||
|
||||
|
|
Loading…
Reference in New Issue