Lines Matching defs:nd_btt
18 struct nd_btt *nd_btt = to_nd_btt(dev);
21 nd_detach_ndns(&nd_btt->dev, &nd_btt->ndns);
22 ida_simple_remove(&nd_region->btt_ida, nd_btt->id);
23 kfree(nd_btt->uuid);
24 kfree(nd_btt);
27 struct nd_btt *to_nd_btt(struct device *dev)
29 struct nd_btt *nd_btt = container_of(dev, struct nd_btt, dev);
32 return nd_btt;
42 struct nd_btt *nd_btt = to_nd_btt(dev);
44 return nd_size_select_show(nd_btt->lbasize, btt_lbasize_supported, buf);
50 struct nd_btt *nd_btt = to_nd_btt(dev);
55 rc = nd_size_select_store(dev, buf, &nd_btt->lbasize,
69 struct nd_btt *nd_btt = to_nd_btt(dev);
71 if (nd_btt->uuid)
72 return sprintf(buf, "%pUb\n", nd_btt->uuid);
79 struct nd_btt *nd_btt = to_nd_btt(dev);
83 rc = nd_uuid_store(dev, &nd_btt->uuid, buf, len);
95 struct nd_btt *nd_btt = to_nd_btt(dev);
99 rc = sprintf(buf, "%s\n", nd_btt->ndns
100 ? dev_name(&nd_btt->ndns->dev) : "");
108 struct nd_btt *nd_btt = to_nd_btt(dev);
113 rc = nd_namespace_store(dev, &nd_btt->ndns, buf, len);
126 struct nd_btt *nd_btt = to_nd_btt(dev);
131 rc = sprintf(buf, "%llu\n", nd_btt->size);
170 .name = "nd_btt",
187 struct nd_btt *nd_btt;
190 nd_btt = kzalloc(sizeof(*nd_btt), GFP_KERNEL);
191 if (!nd_btt)
194 nd_btt->id = ida_simple_get(&nd_region->btt_ida, 0, 0, GFP_KERNEL);
195 if (nd_btt->id < 0)
198 nd_btt->lbasize = lbasize;
204 nd_btt->uuid = uuid;
205 dev = &nd_btt->dev;
206 dev_set_name(dev, "btt%d.%d", nd_region->id, nd_btt->id);
209 device_initialize(&nd_btt->dev);
210 lockdep_set_class(&nd_btt->dev.mutex, &nvdimm_btt_key);
211 if (ndns && !__nd_attach_ndns(&nd_btt->dev, ndns, &nd_btt->ndns)) {
220 ida_simple_remove(&nd_region->btt_ida, nd_btt->id);
223 kfree(nd_btt);
237 * @nd_btt: device with BTT geometry and backing device info
247 bool nd_btt_arena_is_valid(struct nd_btt *nd_btt, struct btt_sb *super)
249 const uuid_t *ns_uuid = nd_dev_to_uuid(&nd_btt->ndns->dev);
269 dev_info(&nd_btt->dev, "Found arena with an error flag\n");
275 int nd_btt_version(struct nd_btt *nd_btt, struct nd_namespace_common *ndns,
280 nd_btt->initial_offset = 0;
281 nd_btt->version_major = 2;
282 nd_btt->version_minor = 0;
285 if (!nd_btt_arena_is_valid(nd_btt, btt_sb))
295 nd_btt->initial_offset = SZ_4K;
296 nd_btt->version_major = 1;
297 nd_btt->version_minor = 1;
300 if (!nd_btt_arena_is_valid(nd_btt, btt_sb))
310 static int __nd_btt_probe(struct nd_btt *nd_btt,
315 if (!btt_sb || !ndns || !nd_btt)
321 rc = nd_btt_version(nd_btt, ndns, btt_sb);
325 nd_btt->lbasize = le32_to_cpu(btt_sb->external_lbasize);
326 nd_btt->uuid = kmemdup(&btt_sb->uuid, sizeof(uuid_t), GFP_KERNEL);
327 if (!nd_btt->uuid)
330 nd_device_register(&nd_btt->dev);
363 struct nd_btt *nd_btt = to_nd_btt(btt_dev);
365 nd_detach_ndns(btt_dev, &nd_btt->ndns);