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);
846 struct rbd_spec *spec;
993 rbd_dev->spec->pool_id : rbd_dev->header.data_pool_id;
1207 u64 snap_id = rbd_dev->spec->snap_id;
1529 static void rbd_spec_put(struct rbd_spec *spec);
1613 img_req->snap_id = rbd_dev->spec->snap_id;
1722 rbd_dev->spec->image_id);
1725 rbd_dev->spec->image_id, snap_id);
1850 rbd_object_map_name(rbd_dev, rbd_dev->spec->snap_id, &oid);
5103 return sprintf(buf, "%s\n", rbd_dev->spec->pool_name);
5112 (unsigned long long) rbd_dev->spec->pool_id);
5120 return sprintf(buf, "%s\n", rbd_dev->spec->pool_ns ?: "");
5128 if (rbd_dev->spec->image_name)
5129 return sprintf(buf, "%s\n", rbd_dev->spec->image_name);
5139 return sprintf(buf, "%s\n", rbd_dev->spec->image_id);
5152 return sprintf(buf, "%s\n", rbd_dev->spec->snap_name);
5160 return sprintf(buf, "%llu\n", rbd_dev->spec->snap_id);
5179 struct rbd_spec *spec = rbd_dev->parent_spec;
5188 spec->pool_id, spec->pool_name,
5189 spec->pool_ns ?: "",
5190 spec->image_id, spec->image_name ?: "(unknown)",
5191 spec->snap_id, spec->snap_name,
5272 static struct rbd_spec *rbd_spec_get(struct rbd_spec *spec)
5274 kref_get(&spec->kref);
5276 return spec;
5280 static void rbd_spec_put(struct rbd_spec *spec)
5282 if (spec)
5283 kref_put(&spec->kref, rbd_spec_free);
5288 struct rbd_spec *spec;
5290 spec = kzalloc(sizeof (*spec), GFP_KERNEL);
5291 if (!spec)
5294 spec->pool_id = CEPH_NOPOOL;
5295 spec->snap_id = CEPH_NOSNAP;
5296 kref_init(&spec->kref);
5298 return spec;
5303 struct rbd_spec *spec = container_of(kref, struct rbd_spec, kref);
5305 kfree(spec->pool_name);
5306 kfree(spec->pool_ns);
5307 kfree(spec->image_id);
5308 kfree(spec->image_name);
5309 kfree(spec->snap_name);
5310 kfree(spec);
5323 rbd_spec_put(rbd_dev->spec);
5349 static struct rbd_device *__rbd_dev_create(struct rbd_spec *spec)
5363 rbd_dev->header_oloc.pool = spec->pool_id;
5364 if (spec->pool_ns) {
5365 WARN_ON(!*spec->pool_ns);
5367 ceph_find_or_create_string(spec->pool_ns,
5368 strlen(spec->pool_ns));
5401 struct rbd_spec *spec,
5406 rbd_dev = __rbd_dev_create(spec);
5427 rbd_dev->spec = spec;
5576 __le64 snapid = cpu_to_le64(rbd_dev->spec->snap_id);
5748 ceph_encode_64(&p, rbd_dev->spec->snap_id);
5787 * so we only need to record the parent image spec once.
5880 rbd_assert(!rbd_dev->spec->image_name);
5882 len = strlen(rbd_dev->spec->image_id);
5890 ceph_encode_string(&p, end, rbd_dev->spec->image_id, (u32)len);
5978 struct rbd_spec *spec = rbd_dev->spec;
5980 rbd_assert(spec->pool_id != CEPH_NOPOOL && spec->pool_name);
5981 rbd_assert(spec->image_id && spec->image_name);
5982 rbd_assert(spec->snap_name);
5984 if (strcmp(spec->snap_name, RBD_SNAP_HEAD_NAME)) {
5987 snap_id = rbd_snap_id_by_name(rbd_dev, spec->snap_name);
5991 spec->snap_id = snap_id;
5993 spec->snap_id = CEPH_NOSNAP;
6002 * All names in an rbd spec are dynamically allocated. It's OK if we
6008 struct rbd_spec *spec = rbd_dev->spec;
6014 rbd_assert(spec->pool_id != CEPH_NOPOOL);
6015 rbd_assert(spec->image_id);
6016 rbd_assert(spec->snap_id != CEPH_NOSNAP);
6020 pool_name = ceph_pg_pool_name_by_id(osdc->osdmap, spec->pool_id);
6022 rbd_warn(rbd_dev, "no pool with id %llu", spec->pool_id);
6037 snap_name = rbd_snap_name(rbd_dev, spec->snap_id);
6043 spec->pool_name = pool_name;
6044 spec->image_name = image_name;
6045 spec->snap_name = snap_name;
6298 kfree(pctx->spec->pool_ns);
6299 pctx->spec->pool_ns = param->string;
6408 * spec
6466 pctx.spec = rbd_spec_alloc();
6467 if (!pctx.spec)
6470 pctx.spec->pool_name = dup_token(&buf, NULL);
6471 if (!pctx.spec->pool_name)
6473 if (!*pctx.spec->pool_name) {
6478 pctx.spec->image_name = dup_token(&buf, NULL);
6479 if (!pctx.spec->image_name)
6481 if (!*pctx.spec->image_name) {
6502 pctx.spec->snap_name = snap_name;
6533 *rbd_spec = pctx.spec;
6542 rbd_spec_put(pctx.spec);
6627 if (rbd_dev->spec->image_id) {
6628 rbd_dev->image_format = *rbd_dev->spec->image_id ? 2 : 1;
6638 rbd_dev->spec->image_name);
6674 rbd_dev->spec->image_id = image_id;
6761 * rbd_client and spec/parent_spec, so bump their refcounts.
6764 parent->spec = rbd_spec_get(rbd_dev->parent_spec);
6841 struct rbd_spec *spec = rbd_dev->spec;
6849 spec->image_name, RBD_SUFFIX);
6852 RBD_HEADER_PREFIX, spec->image_id);
6861 rbd_dev->spec->pool_name,
6862 rbd_dev->spec->pool_ns ?: "",
6863 rbd_dev->spec->pool_ns ? "/" : "",
6864 rbd_dev->spec->image_name);
6867 rbd_dev->spec->pool_name,
6868 rbd_dev->spec->pool_ns ?: "",
6869 rbd_dev->spec->pool_ns ? "/" : "",
6870 rbd_dev->spec->image_name,
6871 rbd_dev->spec->snap_name);
6882 kfree(rbd_dev->spec->image_id);
6883 rbd_dev->spec->image_id = NULL;
6902 * error, rbd_dev->spec->image_id will be filled in with
6984 kfree(rbd_dev->spec->image_id);
6985 rbd_dev->spec->image_id = NULL;
7032 * If !pii.has_overlap, the parent image spec is not
7095 struct rbd_spec *spec = NULL;
7106 rc = rbd_add_parse_args(buf, &ceph_opts, &rbd_opts, &spec);
7117 rc = ceph_pg_poolid_by_name(rbdc->client->osdc.osdmap, spec->pool_name);
7120 pr_info("pool %s does not exist\n", spec->pool_name);
7123 spec->pool_id = (u64)rc;
7125 rbd_dev = rbd_dev_create(rbdc, spec, rbd_opts);
7131 spec = NULL; /* rbd_dev now owns this */
7136 strcmp(rbd_dev->spec->snap_name, RBD_SNAP_HEAD_NAME))
7197 rbd_spec_put(spec);