6a9eb2c860b5a9b299b74836825715ecf45d6791
[linux-2.6-microblaze.git] / drivers / mtd / ubi / block.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2014 Ezequiel Garcia
4  * Copyright (c) 2011 Free Electrons
5  *
6  * Driver parameter handling strongly based on drivers/mtd/ubi/build.c
7  *   Copyright (c) International Business Machines Corp., 2006
8  *   Copyright (c) Nokia Corporation, 2007
9  *   Authors: Artem Bityutskiy, Frank Haverkamp
10  */
11
12 /*
13  * Read-only block devices on top of UBI volumes
14  *
15  * A simple implementation to allow a block device to be layered on top of a
16  * UBI volume. The implementation is provided by creating a static 1-to-1
17  * mapping between the block device and the UBI volume.
18  *
19  * The addressed byte is obtained from the addressed block sector, which is
20  * mapped linearly into the corresponding LEB:
21  *
22  *   LEB number = addressed byte / LEB size
23  *
24  * This feature is compiled in the UBI core, and adds a 'block' parameter
25  * to allow early creation of block devices on top of UBI volumes. Runtime
26  * block creation/removal for UBI volumes is provided through two UBI ioctls:
27  * UBI_IOCVOLCRBLK and UBI_IOCVOLRMBLK.
28  */
29
30 #include <linux/module.h>
31 #include <linux/init.h>
32 #include <linux/err.h>
33 #include <linux/kernel.h>
34 #include <linux/list.h>
35 #include <linux/mutex.h>
36 #include <linux/slab.h>
37 #include <linux/mtd/ubi.h>
38 #include <linux/blkdev.h>
39 #include <linux/blk-mq.h>
40 #include <linux/hdreg.h>
41 #include <linux/scatterlist.h>
42 #include <linux/idr.h>
43 #include <asm/div64.h>
44
45 #include "ubi-media.h"
46 #include "ubi.h"
47
48 /* Maximum number of supported devices */
49 #define UBIBLOCK_MAX_DEVICES 32
50
51 /* Maximum length of the 'block=' parameter */
52 #define UBIBLOCK_PARAM_LEN 63
53
54 /* Maximum number of comma-separated items in the 'block=' parameter */
55 #define UBIBLOCK_PARAM_COUNT 2
56
57 struct ubiblock_param {
58         int ubi_num;
59         int vol_id;
60         char name[UBIBLOCK_PARAM_LEN+1];
61 };
62
63 struct ubiblock_pdu {
64         struct ubi_sgl usgl;
65 };
66
67 /* Numbers of elements set in the @ubiblock_param array */
68 static int ubiblock_devs __initdata;
69
70 /* MTD devices specification parameters */
71 static struct ubiblock_param ubiblock_param[UBIBLOCK_MAX_DEVICES] __initdata;
72
73 struct ubiblock {
74         struct ubi_volume_desc *desc;
75         int ubi_num;
76         int vol_id;
77         int refcnt;
78         int leb_size;
79
80         struct gendisk *gd;
81         struct request_queue *rq;
82
83         struct mutex dev_mutex;
84         struct list_head list;
85         struct blk_mq_tag_set tag_set;
86 };
87
88 /* Linked list of all ubiblock instances */
89 static LIST_HEAD(ubiblock_devices);
90 static DEFINE_IDR(ubiblock_minor_idr);
91 /* Protects ubiblock_devices and ubiblock_minor_idr */
92 static DEFINE_MUTEX(devices_mutex);
93 static int ubiblock_major;
94
95 static int __init ubiblock_set_param(const char *val,
96                                      const struct kernel_param *kp)
97 {
98         int i, ret;
99         size_t len;
100         struct ubiblock_param *param;
101         char buf[UBIBLOCK_PARAM_LEN];
102         char *pbuf = &buf[0];
103         char *tokens[UBIBLOCK_PARAM_COUNT];
104
105         if (!val)
106                 return -EINVAL;
107
108         len = strnlen(val, UBIBLOCK_PARAM_LEN);
109         if (len == 0) {
110                 pr_warn("UBI: block: empty 'block=' parameter - ignored\n");
111                 return 0;
112         }
113
114         if (len == UBIBLOCK_PARAM_LEN) {
115                 pr_err("UBI: block: parameter \"%s\" is too long, max. is %d\n",
116                        val, UBIBLOCK_PARAM_LEN);
117                 return -EINVAL;
118         }
119
120         strcpy(buf, val);
121
122         /* Get rid of the final newline */
123         if (buf[len - 1] == '\n')
124                 buf[len - 1] = '\0';
125
126         for (i = 0; i < UBIBLOCK_PARAM_COUNT; i++)
127                 tokens[i] = strsep(&pbuf, ",");
128
129         param = &ubiblock_param[ubiblock_devs];
130         if (tokens[1]) {
131                 /* Two parameters: can be 'ubi, vol_id' or 'ubi, vol_name' */
132                 ret = kstrtoint(tokens[0], 10, &param->ubi_num);
133                 if (ret < 0)
134                         return -EINVAL;
135
136                 /* Second param can be a number or a name */
137                 ret = kstrtoint(tokens[1], 10, &param->vol_id);
138                 if (ret < 0) {
139                         param->vol_id = -1;
140                         strcpy(param->name, tokens[1]);
141                 }
142
143         } else {
144                 /* One parameter: must be device path */
145                 strcpy(param->name, tokens[0]);
146                 param->ubi_num = -1;
147                 param->vol_id = -1;
148         }
149
150         ubiblock_devs++;
151
152         return 0;
153 }
154
155 static const struct kernel_param_ops ubiblock_param_ops = {
156         .set    = ubiblock_set_param,
157 };
158 module_param_cb(block, &ubiblock_param_ops, NULL, 0);
159 MODULE_PARM_DESC(block, "Attach block devices to UBI volumes. Parameter format: block=<path|dev,num|dev,name>.\n"
160                         "Multiple \"block\" parameters may be specified.\n"
161                         "UBI volumes may be specified by their number, name, or path to the device node.\n"
162                         "Examples\n"
163                         "Using the UBI volume path:\n"
164                         "ubi.block=/dev/ubi0_0\n"
165                         "Using the UBI device, and the volume name:\n"
166                         "ubi.block=0,rootfs\n"
167                         "Using both UBI device number and UBI volume number:\n"
168                         "ubi.block=0,0\n");
169
170 static struct ubiblock *find_dev_nolock(int ubi_num, int vol_id)
171 {
172         struct ubiblock *dev;
173
174         list_for_each_entry(dev, &ubiblock_devices, list)
175                 if (dev->ubi_num == ubi_num && dev->vol_id == vol_id)
176                         return dev;
177         return NULL;
178 }
179
180 static blk_status_t ubiblock_read(struct request *req)
181 {
182         struct ubiblock_pdu *pdu = blk_mq_rq_to_pdu(req);
183         struct ubiblock *dev = req->q->queuedata;
184         u64 pos = blk_rq_pos(req) << 9;
185         int to_read = blk_rq_bytes(req);
186         int bytes_left = to_read;
187         /* Get LEB:offset address to read from */
188         int offset = do_div(pos, dev->leb_size);
189         int leb = pos;
190         struct req_iterator iter;
191         struct bio_vec bvec;
192         int ret;
193
194         blk_mq_start_request(req);
195
196         /*
197          * It is safe to ignore the return value of blk_rq_map_sg() because
198          * the number of sg entries is limited to UBI_MAX_SG_COUNT
199          * and ubi_read_sg() will check that limit.
200          */
201         ubi_sgl_init(&pdu->usgl);
202         blk_rq_map_sg(req->q, req, pdu->usgl.sg);
203
204         while (bytes_left) {
205                 /*
206                  * We can only read one LEB at a time. Therefore if the read
207                  * length is larger than one LEB size, we split the operation.
208                  */
209                 if (offset + to_read > dev->leb_size)
210                         to_read = dev->leb_size - offset;
211
212                 ret = ubi_read_sg(dev->desc, leb, &pdu->usgl, offset, to_read);
213                 if (ret < 0)
214                         break;
215
216                 bytes_left -= to_read;
217                 to_read = bytes_left;
218                 leb += 1;
219                 offset = 0;
220         }
221
222         rq_for_each_segment(bvec, req, iter)
223                 flush_dcache_page(bvec.bv_page);
224         return errno_to_blk_status(ret);
225 }
226
227 static int ubiblock_open(struct block_device *bdev, fmode_t mode)
228 {
229         struct ubiblock *dev = bdev->bd_disk->private_data;
230         int ret;
231
232         mutex_lock(&dev->dev_mutex);
233         if (dev->refcnt > 0) {
234                 /*
235                  * The volume is already open, just increase the reference
236                  * counter.
237                  */
238                 goto out_done;
239         }
240
241         /*
242          * We want users to be aware they should only mount us as read-only.
243          * It's just a paranoid check, as write requests will get rejected
244          * in any case.
245          */
246         if (mode & FMODE_WRITE) {
247                 ret = -EROFS;
248                 goto out_unlock;
249         }
250
251         dev->desc = ubi_open_volume(dev->ubi_num, dev->vol_id, UBI_READONLY);
252         if (IS_ERR(dev->desc)) {
253                 dev_err(disk_to_dev(dev->gd), "failed to open ubi volume %d_%d",
254                         dev->ubi_num, dev->vol_id);
255                 ret = PTR_ERR(dev->desc);
256                 dev->desc = NULL;
257                 goto out_unlock;
258         }
259
260 out_done:
261         dev->refcnt++;
262         mutex_unlock(&dev->dev_mutex);
263         return 0;
264
265 out_unlock:
266         mutex_unlock(&dev->dev_mutex);
267         return ret;
268 }
269
270 static void ubiblock_release(struct gendisk *gd, fmode_t mode)
271 {
272         struct ubiblock *dev = gd->private_data;
273
274         mutex_lock(&dev->dev_mutex);
275         dev->refcnt--;
276         if (dev->refcnt == 0) {
277                 ubi_close_volume(dev->desc);
278                 dev->desc = NULL;
279         }
280         mutex_unlock(&dev->dev_mutex);
281 }
282
283 static int ubiblock_getgeo(struct block_device *bdev, struct hd_geometry *geo)
284 {
285         /* Some tools might require this information */
286         geo->heads = 1;
287         geo->cylinders = 1;
288         geo->sectors = get_capacity(bdev->bd_disk);
289         geo->start = 0;
290         return 0;
291 }
292
293 static const struct block_device_operations ubiblock_ops = {
294         .owner = THIS_MODULE,
295         .open = ubiblock_open,
296         .release = ubiblock_release,
297         .getgeo = ubiblock_getgeo,
298 };
299
300 static blk_status_t ubiblock_queue_rq(struct blk_mq_hw_ctx *hctx,
301                              const struct blk_mq_queue_data *bd)
302 {
303         switch (req_op(bd->rq)) {
304         case REQ_OP_READ:
305                 return ubiblock_read(bd->rq);
306         default:
307                 return BLK_STS_IOERR;
308         }
309 }
310
311 static int ubiblock_init_request(struct blk_mq_tag_set *set,
312                 struct request *req, unsigned int hctx_idx,
313                 unsigned int numa_node)
314 {
315         struct ubiblock_pdu *pdu = blk_mq_rq_to_pdu(req);
316
317         sg_init_table(pdu->usgl.sg, UBI_MAX_SG_COUNT);
318         return 0;
319 }
320
321 static const struct blk_mq_ops ubiblock_mq_ops = {
322         .queue_rq       = ubiblock_queue_rq,
323         .init_request   = ubiblock_init_request,
324 };
325
326 static int calc_disk_capacity(struct ubi_volume_info *vi, u64 *disk_capacity)
327 {
328         u64 size = vi->used_bytes >> 9;
329
330         if (vi->used_bytes % 512) {
331                 if (vi->vol_type == UBI_DYNAMIC_VOLUME)
332                         pr_warn("UBI: block: volume size is not a multiple of 512, last %llu bytes are ignored!\n",
333                                 vi->used_bytes - (size << 9));
334                 else
335                         pr_info("UBI: block: volume size is not a multiple of 512, last %llu bytes are ignored!\n",
336                                 vi->used_bytes - (size << 9));
337         }
338
339         if ((sector_t)size != size)
340                 return -EFBIG;
341
342         *disk_capacity = size;
343
344         return 0;
345 }
346
347 int ubiblock_create(struct ubi_volume_info *vi)
348 {
349         struct ubiblock *dev;
350         struct gendisk *gd;
351         u64 disk_capacity;
352         int ret;
353
354         ret = calc_disk_capacity(vi, &disk_capacity);
355         if (ret) {
356                 return ret;
357         }
358
359         /* Check that the volume isn't already handled */
360         mutex_lock(&devices_mutex);
361         if (find_dev_nolock(vi->ubi_num, vi->vol_id)) {
362                 ret = -EEXIST;
363                 goto out_unlock;
364         }
365
366         dev = kzalloc(sizeof(struct ubiblock), GFP_KERNEL);
367         if (!dev) {
368                 ret = -ENOMEM;
369                 goto out_unlock;
370         }
371
372         mutex_init(&dev->dev_mutex);
373
374         dev->ubi_num = vi->ubi_num;
375         dev->vol_id = vi->vol_id;
376         dev->leb_size = vi->usable_leb_size;
377
378         dev->tag_set.ops = &ubiblock_mq_ops;
379         dev->tag_set.queue_depth = 64;
380         dev->tag_set.numa_node = NUMA_NO_NODE;
381         dev->tag_set.flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_BLOCKING;
382         dev->tag_set.cmd_size = sizeof(struct ubiblock_pdu);
383         dev->tag_set.driver_data = dev;
384         dev->tag_set.nr_hw_queues = 1;
385
386         ret = blk_mq_alloc_tag_set(&dev->tag_set);
387         if (ret) {
388                 dev_err(disk_to_dev(dev->gd), "blk_mq_alloc_tag_set failed");
389                 goto out_free_dev;
390         }
391
392
393         /* Initialize the gendisk of this ubiblock device */
394         gd = blk_mq_alloc_disk(&dev->tag_set, dev);
395         if (IS_ERR(gd)) {
396                 ret = PTR_ERR(gd);
397                 goto out_free_tags;
398         }
399
400         gd->fops = &ubiblock_ops;
401         gd->major = ubiblock_major;
402         gd->minors = 1;
403         gd->first_minor = idr_alloc(&ubiblock_minor_idr, dev, 0, 0, GFP_KERNEL);
404         if (gd->first_minor < 0) {
405                 dev_err(disk_to_dev(gd),
406                         "block: dynamic minor allocation failed");
407                 ret = -ENODEV;
408                 goto out_cleanup_disk;
409         }
410         gd->flags |= GENHD_FL_NO_PART;
411         gd->private_data = dev;
412         sprintf(gd->disk_name, "ubiblock%d_%d", dev->ubi_num, dev->vol_id);
413         set_capacity(gd, disk_capacity);
414         dev->gd = gd;
415
416         dev->rq = gd->queue;
417         blk_queue_max_segments(dev->rq, UBI_MAX_SG_COUNT);
418
419         list_add_tail(&dev->list, &ubiblock_devices);
420
421         /* Must be the last step: anyone can call file ops from now on */
422         ret = device_add_disk(vi->dev, dev->gd, NULL);
423         if (ret)
424                 goto out_remove_minor;
425
426         dev_info(disk_to_dev(dev->gd), "created from ubi%d:%d(%s)",
427                  dev->ubi_num, dev->vol_id, vi->name);
428         mutex_unlock(&devices_mutex);
429         return 0;
430
431 out_remove_minor:
432         idr_remove(&ubiblock_minor_idr, gd->first_minor);
433 out_cleanup_disk:
434         put_disk(dev->gd);
435 out_free_tags:
436         blk_mq_free_tag_set(&dev->tag_set);
437 out_free_dev:
438         kfree(dev);
439 out_unlock:
440         mutex_unlock(&devices_mutex);
441
442         return ret;
443 }
444
445 static void ubiblock_cleanup(struct ubiblock *dev)
446 {
447         /* Stop new requests to arrive */
448         del_gendisk(dev->gd);
449         /* Finally destroy the blk queue */
450         dev_info(disk_to_dev(dev->gd), "released");
451         put_disk(dev->gd);
452         blk_mq_free_tag_set(&dev->tag_set);
453         idr_remove(&ubiblock_minor_idr, dev->gd->first_minor);
454 }
455
456 int ubiblock_remove(struct ubi_volume_info *vi)
457 {
458         struct ubiblock *dev;
459         int ret;
460
461         mutex_lock(&devices_mutex);
462         dev = find_dev_nolock(vi->ubi_num, vi->vol_id);
463         if (!dev) {
464                 ret = -ENODEV;
465                 goto out_unlock;
466         }
467
468         /* Found a device, let's lock it so we can check if it's busy */
469         mutex_lock(&dev->dev_mutex);
470         if (dev->refcnt > 0) {
471                 ret = -EBUSY;
472                 goto out_unlock_dev;
473         }
474
475         /* Remove from device list */
476         list_del(&dev->list);
477         ubiblock_cleanup(dev);
478         mutex_unlock(&dev->dev_mutex);
479         mutex_unlock(&devices_mutex);
480
481         kfree(dev);
482         return 0;
483
484 out_unlock_dev:
485         mutex_unlock(&dev->dev_mutex);
486 out_unlock:
487         mutex_unlock(&devices_mutex);
488         return ret;
489 }
490
491 static int ubiblock_resize(struct ubi_volume_info *vi)
492 {
493         struct ubiblock *dev;
494         u64 disk_capacity;
495         int ret;
496
497         /*
498          * Need to lock the device list until we stop using the device,
499          * otherwise the device struct might get released in
500          * 'ubiblock_remove()'.
501          */
502         mutex_lock(&devices_mutex);
503         dev = find_dev_nolock(vi->ubi_num, vi->vol_id);
504         if (!dev) {
505                 mutex_unlock(&devices_mutex);
506                 return -ENODEV;
507         }
508
509         ret = calc_disk_capacity(vi, &disk_capacity);
510         if (ret) {
511                 mutex_unlock(&devices_mutex);
512                 if (ret == -EFBIG) {
513                         dev_warn(disk_to_dev(dev->gd),
514                                  "the volume is too big (%d LEBs), cannot resize",
515                                  vi->size);
516                 }
517                 return ret;
518         }
519
520         mutex_lock(&dev->dev_mutex);
521
522         if (get_capacity(dev->gd) != disk_capacity) {
523                 set_capacity(dev->gd, disk_capacity);
524                 dev_info(disk_to_dev(dev->gd), "resized to %lld bytes",
525                          vi->used_bytes);
526         }
527         mutex_unlock(&dev->dev_mutex);
528         mutex_unlock(&devices_mutex);
529         return 0;
530 }
531
532 static int ubiblock_notify(struct notifier_block *nb,
533                          unsigned long notification_type, void *ns_ptr)
534 {
535         struct ubi_notification *nt = ns_ptr;
536
537         switch (notification_type) {
538         case UBI_VOLUME_ADDED:
539                 /*
540                  * We want to enforce explicit block device creation for
541                  * volumes, so when a volume is added we do nothing.
542                  */
543                 break;
544         case UBI_VOLUME_REMOVED:
545                 ubiblock_remove(&nt->vi);
546                 break;
547         case UBI_VOLUME_RESIZED:
548                 ubiblock_resize(&nt->vi);
549                 break;
550         case UBI_VOLUME_UPDATED:
551                 /*
552                  * If the volume is static, a content update might mean the
553                  * size (i.e. used_bytes) was also changed.
554                  */
555                 if (nt->vi.vol_type == UBI_STATIC_VOLUME)
556                         ubiblock_resize(&nt->vi);
557                 break;
558         default:
559                 break;
560         }
561         return NOTIFY_OK;
562 }
563
564 static struct notifier_block ubiblock_notifier = {
565         .notifier_call = ubiblock_notify,
566 };
567
568 static struct ubi_volume_desc * __init
569 open_volume_desc(const char *name, int ubi_num, int vol_id)
570 {
571         if (ubi_num == -1)
572                 /* No ubi num, name must be a vol device path */
573                 return ubi_open_volume_path(name, UBI_READONLY);
574         else if (vol_id == -1)
575                 /* No vol_id, must be vol_name */
576                 return ubi_open_volume_nm(ubi_num, name, UBI_READONLY);
577         else
578                 return ubi_open_volume(ubi_num, vol_id, UBI_READONLY);
579 }
580
581 static void __init ubiblock_create_from_param(void)
582 {
583         int i, ret = 0;
584         struct ubiblock_param *p;
585         struct ubi_volume_desc *desc;
586         struct ubi_volume_info vi;
587
588         /*
589          * If there is an error creating one of the ubiblocks, continue on to
590          * create the following ubiblocks. This helps in a circumstance where
591          * the kernel command-line specifies multiple block devices and some
592          * may be broken, but we still want the working ones to come up.
593          */
594         for (i = 0; i < ubiblock_devs; i++) {
595                 p = &ubiblock_param[i];
596
597                 desc = open_volume_desc(p->name, p->ubi_num, p->vol_id);
598                 if (IS_ERR(desc)) {
599                         pr_err(
600                                "UBI: block: can't open volume on ubi%d_%d, err=%ld\n",
601                                p->ubi_num, p->vol_id, PTR_ERR(desc));
602                         continue;
603                 }
604
605                 ubi_get_volume_info(desc, &vi);
606                 ubi_close_volume(desc);
607
608                 ret = ubiblock_create(&vi);
609                 if (ret) {
610                         pr_err(
611                                "UBI: block: can't add '%s' volume on ubi%d_%d, err=%d\n",
612                                vi.name, p->ubi_num, p->vol_id, ret);
613                         continue;
614                 }
615         }
616 }
617
618 static void ubiblock_remove_all(void)
619 {
620         struct ubiblock *next;
621         struct ubiblock *dev;
622
623         mutex_lock(&devices_mutex);
624         list_for_each_entry_safe(dev, next, &ubiblock_devices, list) {
625                 /* The module is being forcefully removed */
626                 WARN_ON(dev->desc);
627                 /* Remove from device list */
628                 list_del(&dev->list);
629                 ubiblock_cleanup(dev);
630                 kfree(dev);
631         }
632         mutex_unlock(&devices_mutex);
633 }
634
635 int __init ubiblock_init(void)
636 {
637         int ret;
638
639         ubiblock_major = register_blkdev(0, "ubiblock");
640         if (ubiblock_major < 0)
641                 return ubiblock_major;
642
643         /*
644          * Attach block devices from 'block=' module param.
645          * Even if one block device in the param list fails to come up,
646          * still allow the module to load and leave any others up.
647          */
648         ubiblock_create_from_param();
649
650         /*
651          * Block devices are only created upon user requests, so we ignore
652          * existing volumes.
653          */
654         ret = ubi_register_volume_notifier(&ubiblock_notifier, 1);
655         if (ret)
656                 goto err_unreg;
657         return 0;
658
659 err_unreg:
660         unregister_blkdev(ubiblock_major, "ubiblock");
661         ubiblock_remove_all();
662         return ret;
663 }
664
665 void __exit ubiblock_exit(void)
666 {
667         ubi_unregister_volume_notifier(&ubiblock_notifier);
668         ubiblock_remove_all();
669         unregister_blkdev(ubiblock_major, "ubiblock");
670 }