Lines Matching +full:uuid +full:- +full:dev

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright(c) 2013-2015 Intel Corporation. All rights reserved.
11 #include "nd-core.h"
15 static void nd_btt_release(struct device *dev) in nd_btt_release() argument
17 struct nd_region *nd_region = to_nd_region(dev->parent); in nd_btt_release()
18 struct nd_btt *nd_btt = to_nd_btt(dev); in nd_btt_release()
20 dev_dbg(dev, "trace\n"); in nd_btt_release()
21 nd_detach_ndns(&nd_btt->dev, &nd_btt->ndns); in nd_btt_release()
22 ida_simple_remove(&nd_region->btt_ida, nd_btt->id); in nd_btt_release()
23 kfree(nd_btt->uuid); in nd_btt_release()
27 struct nd_btt *to_nd_btt(struct device *dev) in to_nd_btt() argument
29 struct nd_btt *nd_btt = container_of(dev, struct nd_btt, dev); in to_nd_btt()
31 WARN_ON(!is_nd_btt(dev)); in to_nd_btt()
39 static ssize_t sector_size_show(struct device *dev, in sector_size_show() argument
42 struct nd_btt *nd_btt = to_nd_btt(dev); in sector_size_show()
44 return nd_size_select_show(nd_btt->lbasize, btt_lbasize_supported, buf); in sector_size_show()
47 static ssize_t sector_size_store(struct device *dev, in sector_size_store() argument
50 struct nd_btt *nd_btt = to_nd_btt(dev); in sector_size_store()
53 device_lock(dev); in sector_size_store()
54 nvdimm_bus_lock(dev); in sector_size_store()
55 rc = nd_size_select_store(dev, buf, &nd_btt->lbasize, in sector_size_store()
57 dev_dbg(dev, "result: %zd wrote: %s%s", rc, buf, in sector_size_store()
58 buf[len - 1] == '\n' ? "" : "\n"); in sector_size_store()
59 nvdimm_bus_unlock(dev); in sector_size_store()
60 device_unlock(dev); in sector_size_store()
66 static ssize_t uuid_show(struct device *dev, in uuid_show() argument
69 struct nd_btt *nd_btt = to_nd_btt(dev); in uuid_show()
71 if (nd_btt->uuid) in uuid_show()
72 return sprintf(buf, "%pUb\n", nd_btt->uuid); in uuid_show()
76 static ssize_t uuid_store(struct device *dev, in uuid_store() argument
79 struct nd_btt *nd_btt = to_nd_btt(dev); in uuid_store()
82 device_lock(dev); in uuid_store()
83 rc = nd_uuid_store(dev, &nd_btt->uuid, buf, len); in uuid_store()
84 dev_dbg(dev, "result: %zd wrote: %s%s", rc, buf, in uuid_store()
85 buf[len - 1] == '\n' ? "" : "\n"); in uuid_store()
86 device_unlock(dev); in uuid_store()
90 static DEVICE_ATTR_RW(uuid);
92 static ssize_t namespace_show(struct device *dev, in namespace_show() argument
95 struct nd_btt *nd_btt = to_nd_btt(dev); in namespace_show()
98 nvdimm_bus_lock(dev); in namespace_show()
99 rc = sprintf(buf, "%s\n", nd_btt->ndns in namespace_show()
100 ? dev_name(&nd_btt->ndns->dev) : ""); in namespace_show()
101 nvdimm_bus_unlock(dev); in namespace_show()
105 static ssize_t namespace_store(struct device *dev, in namespace_store() argument
108 struct nd_btt *nd_btt = to_nd_btt(dev); in namespace_store()
111 device_lock(dev); in namespace_store()
112 nvdimm_bus_lock(dev); in namespace_store()
113 rc = nd_namespace_store(dev, &nd_btt->ndns, buf, len); in namespace_store()
114 dev_dbg(dev, "result: %zd wrote: %s%s", rc, buf, in namespace_store()
115 buf[len - 1] == '\n' ? "" : "\n"); in namespace_store()
116 nvdimm_bus_unlock(dev); in namespace_store()
117 device_unlock(dev); in namespace_store()
123 static ssize_t size_show(struct device *dev, in size_show() argument
126 struct nd_btt *nd_btt = to_nd_btt(dev); in size_show()
129 device_lock(dev); in size_show()
130 if (dev->driver) in size_show()
131 rc = sprintf(buf, "%llu\n", nd_btt->size); in size_show()
134 rc = -ENXIO; in size_show()
136 device_unlock(dev); in size_show()
142 static ssize_t log_zero_flags_show(struct device *dev, in log_zero_flags_show() argument
175 bool is_nd_btt(struct device *dev) in is_nd_btt() argument
177 return dev->type == &nd_btt_device_type; in is_nd_btt()
184 unsigned long lbasize, uuid_t *uuid, in __nd_btt_create() argument
188 struct device *dev; in __nd_btt_create() local
194 nd_btt->id = ida_simple_get(&nd_region->btt_ida, 0, 0, GFP_KERNEL); in __nd_btt_create()
195 if (nd_btt->id < 0) in __nd_btt_create()
198 nd_btt->lbasize = lbasize; in __nd_btt_create()
199 if (uuid) { in __nd_btt_create()
200 uuid = kmemdup(uuid, 16, GFP_KERNEL); in __nd_btt_create()
201 if (!uuid) in __nd_btt_create()
204 nd_btt->uuid = uuid; in __nd_btt_create()
205 dev = &nd_btt->dev; in __nd_btt_create()
206 dev_set_name(dev, "btt%d.%d", nd_region->id, nd_btt->id); in __nd_btt_create()
207 dev->parent = &nd_region->dev; in __nd_btt_create()
208 dev->type = &nd_btt_device_type; in __nd_btt_create()
209 device_initialize(&nd_btt->dev); in __nd_btt_create()
210 lockdep_set_class(&nd_btt->dev.mutex, &nvdimm_btt_key); in __nd_btt_create()
211 if (ndns && !__nd_attach_ndns(&nd_btt->dev, ndns, &nd_btt->ndns)) { in __nd_btt_create()
212 dev_dbg(&ndns->dev, "failed, already claimed by %s\n", in __nd_btt_create()
213 dev_name(ndns->claim)); in __nd_btt_create()
214 put_device(dev); in __nd_btt_create()
217 return dev; in __nd_btt_create()
220 ida_simple_remove(&nd_region->btt_ida, nd_btt->id); in __nd_btt_create()
229 struct device *dev = __nd_btt_create(nd_region, 0, NULL, NULL); in nd_btt_create() local
231 nd_device_register(dev); in nd_btt_create()
232 return dev; in nd_btt_create()
236 * nd_btt_arena_is_valid - check if the metadata layout is valid
249 const uuid_t *ns_uuid = nd_dev_to_uuid(&nd_btt->ndns->dev); in nd_btt_arena_is_valid()
253 if (memcmp(super->signature, BTT_SIG, BTT_SIG_LEN) != 0) in nd_btt_arena_is_valid()
256 import_uuid(&parent_uuid, super->parent_uuid); in nd_btt_arena_is_valid()
261 checksum = le64_to_cpu(super->checksum); in nd_btt_arena_is_valid()
262 super->checksum = 0; in nd_btt_arena_is_valid()
265 super->checksum = cpu_to_le64(checksum); in nd_btt_arena_is_valid()
268 if ((le32_to_cpu(super->flags) & IB_FLAG_ERROR_MASK) != 0) in nd_btt_arena_is_valid()
269 dev_info(&nd_btt->dev, "Found arena with an error flag\n"); in nd_btt_arena_is_valid()
278 if (ndns->claim_class == NVDIMM_CCLASS_BTT2) { in nd_btt_version()
280 nd_btt->initial_offset = 0; in nd_btt_version()
281 nd_btt->version_major = 2; in nd_btt_version()
282 nd_btt->version_minor = 0; in nd_btt_version()
284 return -ENXIO; in nd_btt_version()
286 return -ENODEV; in nd_btt_version()
287 if ((le16_to_cpu(btt_sb->version_major) != 2) || in nd_btt_version()
288 (le16_to_cpu(btt_sb->version_minor) != 0)) in nd_btt_version()
289 return -ENODEV; in nd_btt_version()
295 nd_btt->initial_offset = SZ_4K; in nd_btt_version()
296 nd_btt->version_major = 1; in nd_btt_version()
297 nd_btt->version_minor = 1; in nd_btt_version()
299 return -ENXIO; in nd_btt_version()
301 return -ENODEV; in nd_btt_version()
302 if ((le16_to_cpu(btt_sb->version_major) != 1) || in nd_btt_version()
303 (le16_to_cpu(btt_sb->version_minor) != 1)) in nd_btt_version()
304 return -ENODEV; in nd_btt_version()
316 return -ENODEV; in __nd_btt_probe()
319 return -ENXIO; in __nd_btt_probe()
325 nd_btt->lbasize = le32_to_cpu(btt_sb->external_lbasize); in __nd_btt_probe()
326 nd_btt->uuid = kmemdup(&btt_sb->uuid, sizeof(uuid_t), GFP_KERNEL); in __nd_btt_probe()
327 if (!nd_btt->uuid) in __nd_btt_probe()
328 return -ENOMEM; in __nd_btt_probe()
330 nd_device_register(&nd_btt->dev); in __nd_btt_probe()
335 int nd_btt_probe(struct device *dev, struct nd_namespace_common *ndns) in nd_btt_probe() argument
340 struct nd_region *nd_region = to_nd_region(ndns->dev.parent); in nd_btt_probe()
342 if (ndns->force_raw) in nd_btt_probe()
343 return -ENODEV; in nd_btt_probe()
345 switch (ndns->claim_class) { in nd_btt_probe()
351 return -ENODEV; in nd_btt_probe()
354 nvdimm_bus_lock(&ndns->dev); in nd_btt_probe()
356 nvdimm_bus_unlock(&ndns->dev); in nd_btt_probe()
358 return -ENOMEM; in nd_btt_probe()
359 btt_sb = devm_kzalloc(dev, sizeof(*btt_sb), GFP_KERNEL); in nd_btt_probe()
361 dev_dbg(dev, "btt: %s\n", rc == 0 ? dev_name(btt_dev) : "<none>"); in nd_btt_probe()
365 nd_detach_ndns(btt_dev, &nd_btt->ndns); in nd_btt_probe()