Lines Matching refs:spec

397 	struct rbd_spec		*spec;
520 return rbd_dev->spec->snap_id != CEPH_NOSNAP;
607 else if (rbd_dev->spec && rbd_dev->spec->image_name)
609 RBD_DRV_NAME, rbd_dev->spec->image_name, &vaf);
610 else if (rbd_dev->spec && rbd_dev->spec->image_id)
612 RBD_DRV_NAME, rbd_dev->spec->image_id, &vaf);
898 struct rbd_spec *spec;
1045 rbd_dev->spec->pool_id : rbd_dev->header.data_pool_id;
1259 u64 snap_id = rbd_dev->spec->snap_id;
1592 static void rbd_spec_put(struct rbd_spec *spec);
1676 img_req->snap_id = rbd_dev->spec->snap_id;
1785 rbd_dev->spec->image_id);
1788 rbd_dev->spec->image_id, snap_id);
1913 rbd_object_map_name(rbd_dev, rbd_dev->spec->snap_id, &oid);
5176 return sprintf(buf, "%s\n", rbd_dev->spec->pool_name);
5185 (unsigned long long) rbd_dev->spec->pool_id);
5193 return sprintf(buf, "%s\n", rbd_dev->spec->pool_ns ?: "");
5201 if (rbd_dev->spec->image_name)
5202 return sprintf(buf, "%s\n", rbd_dev->spec->image_name);
5212 return sprintf(buf, "%s\n", rbd_dev->spec->image_id);
5225 return sprintf(buf, "%s\n", rbd_dev->spec->snap_name);
5233 return sprintf(buf, "%llu\n", rbd_dev->spec->snap_id);
5252 struct rbd_spec *spec = rbd_dev->parent_spec;
5261 spec->pool_id, spec->pool_name,
5262 spec->pool_ns ?: "",
5263 spec->image_id, spec->image_name ?: "(unknown)",
5264 spec->snap_id, spec->snap_name,
5345 static struct rbd_spec *rbd_spec_get(struct rbd_spec *spec)
5347 kref_get(&spec->kref);
5349 return spec;
5353 static void rbd_spec_put(struct rbd_spec *spec)
5355 if (spec)
5356 kref_put(&spec->kref, rbd_spec_free);
5361 struct rbd_spec *spec;
5363 spec = kzalloc(sizeof (*spec), GFP_KERNEL);
5364 if (!spec)
5367 spec->pool_id = CEPH_NOPOOL;
5368 spec->snap_id = CEPH_NOSNAP;
5369 kref_init(&spec->kref);
5371 return spec;
5376 struct rbd_spec *spec = container_of(kref, struct rbd_spec, kref);
5378 kfree(spec->pool_name);
5379 kfree(spec->pool_ns);
5380 kfree(spec->image_id);
5381 kfree(spec->image_name);
5382 kfree(spec->snap_name);
5383 kfree(spec);
5396 rbd_spec_put(rbd_dev->spec);
5422 static struct rbd_device *__rbd_dev_create(struct rbd_spec *spec)
5436 rbd_dev->header_oloc.pool = spec->pool_id;
5437 if (spec->pool_ns) {
5438 WARN_ON(!*spec->pool_ns);
5440 ceph_find_or_create_string(spec->pool_ns,
5441 strlen(spec->pool_ns));
5474 struct rbd_spec *spec,
5479 rbd_dev = __rbd_dev_create(spec);
5500 rbd_dev->spec = spec;
5649 __le64 snapid = cpu_to_le64(rbd_dev->spec->snap_id);
5821 ceph_encode_64(&p, rbd_dev->spec->snap_id);
5860 * so we only need to record the parent image spec once.
5953 rbd_assert(!rbd_dev->spec->image_name);
5955 len = strlen(rbd_dev->spec->image_id);
5963 ceph_encode_string(&p, end, rbd_dev->spec->image_id, (u32)len);
6051 struct rbd_spec *spec = rbd_dev->spec;
6053 rbd_assert(spec->pool_id != CEPH_NOPOOL && spec->pool_name);
6054 rbd_assert(spec->image_id && spec->image_name);
6055 rbd_assert(spec->snap_name);
6057 if (strcmp(spec->snap_name, RBD_SNAP_HEAD_NAME)) {
6060 snap_id = rbd_snap_id_by_name(rbd_dev, spec->snap_name);
6064 spec->snap_id = snap_id;
6066 spec->snap_id = CEPH_NOSNAP;
6075 * All names in an rbd spec are dynamically allocated. It's OK if we
6081 struct rbd_spec *spec = rbd_dev->spec;
6087 rbd_assert(spec->pool_id != CEPH_NOPOOL);
6088 rbd_assert(spec->image_id);
6089 rbd_assert(spec->snap_id != CEPH_NOSNAP);
6093 pool_name = ceph_pg_pool_name_by_id(osdc->osdmap, spec->pool_id);
6095 rbd_warn(rbd_dev, "no pool with id %llu", spec->pool_id);
6110 snap_name = rbd_snap_name(rbd_dev, spec->snap_id);
6116 spec->pool_name = pool_name;
6117 spec->image_name = image_name;
6118 spec->snap_name = snap_name;
6371 kfree(pctx->spec->pool_ns);
6372 pctx->spec->pool_ns = param->string;
6481 * spec
6539 pctx.spec = rbd_spec_alloc();
6540 if (!pctx.spec)
6543 pctx.spec->pool_name = dup_token(&buf, NULL);
6544 if (!pctx.spec->pool_name)
6546 if (!*pctx.spec->pool_name) {
6551 pctx.spec->image_name = dup_token(&buf, NULL);
6552 if (!pctx.spec->image_name)
6554 if (!*pctx.spec->image_name) {
6575 pctx.spec->snap_name = snap_name;
6605 *rbd_spec = pctx.spec;
6614 rbd_spec_put(pctx.spec);
6699 if (rbd_dev->spec->image_id) {
6700 rbd_dev->image_format = *rbd_dev->spec->image_id ? 2 : 1;
6710 rbd_dev->spec->image_name);
6746 rbd_dev->spec->image_id = image_id;
6833 * rbd_client and spec/parent_spec, so bump their refcounts.
6836 parent->spec = rbd_spec_get(rbd_dev->parent_spec);
6913 struct rbd_spec *spec = rbd_dev->spec;
6921 spec->image_name, RBD_SUFFIX);
6924 RBD_HEADER_PREFIX, spec->image_id);
6933 rbd_dev->spec->pool_name,
6934 rbd_dev->spec->pool_ns ?: "",
6935 rbd_dev->spec->pool_ns ? "/" : "",
6936 rbd_dev->spec->image_name);
6939 rbd_dev->spec->pool_name,
6940 rbd_dev->spec->pool_ns ?: "",
6941 rbd_dev->spec->pool_ns ? "/" : "",
6942 rbd_dev->spec->image_name,
6943 rbd_dev->spec->snap_name);
6954 kfree(rbd_dev->spec->image_id);
6955 rbd_dev->spec->image_id = NULL;
6974 * error, rbd_dev->spec->image_id will be filled in with
7056 kfree(rbd_dev->spec->image_id);
7057 rbd_dev->spec->image_id = NULL;
7104 * If !pii.has_overlap, the parent image spec is not
7169 struct rbd_spec *spec = NULL;
7180 rc = rbd_add_parse_args(buf, &ceph_opts, &rbd_opts, &spec);
7191 rc = ceph_pg_poolid_by_name(rbdc->client->osdc.osdmap, spec->pool_name);
7194 pr_info("pool %s does not exist\n", spec->pool_name);
7197 spec->pool_id = (u64)rc;
7199 rbd_dev = rbd_dev_create(rbdc, spec, rbd_opts);
7205 spec = NULL; /* rbd_dev now owns this */
7210 strcmp(rbd_dev->spec->snap_name, RBD_SNAP_HEAD_NAME))
7269 rbd_spec_put(spec);