cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

kapi.c (24917B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * Copyright (c) International Business Machines Corp., 2006
      4 *
      5 * Author: Artem Bityutskiy (Битюцкий Артём)
      6 */
      7
      8/* This file mostly implements UBI kernel API functions */
      9
     10#include <linux/module.h>
     11#include <linux/err.h>
     12#include <linux/slab.h>
     13#include <linux/namei.h>
     14#include <linux/fs.h>
     15#include <asm/div64.h>
     16#include "ubi.h"
     17
     18/**
     19 * ubi_do_get_device_info - get information about UBI device.
     20 * @ubi: UBI device description object
     21 * @di: the information is stored here
     22 *
     23 * This function is the same as 'ubi_get_device_info()', but it assumes the UBI
     24 * device is locked and cannot disappear.
     25 */
     26void ubi_do_get_device_info(struct ubi_device *ubi, struct ubi_device_info *di)
     27{
     28	di->ubi_num = ubi->ubi_num;
     29	di->leb_size = ubi->leb_size;
     30	di->leb_start = ubi->leb_start;
     31	di->min_io_size = ubi->min_io_size;
     32	di->max_write_size = ubi->max_write_size;
     33	di->ro_mode = ubi->ro_mode;
     34	di->cdev = ubi->cdev.dev;
     35}
     36EXPORT_SYMBOL_GPL(ubi_do_get_device_info);
     37
     38/**
     39 * ubi_get_device_info - get information about UBI device.
     40 * @ubi_num: UBI device number
     41 * @di: the information is stored here
     42 *
     43 * This function returns %0 in case of success, %-EINVAL if the UBI device
     44 * number is invalid, and %-ENODEV if there is no such UBI device.
     45 */
     46int ubi_get_device_info(int ubi_num, struct ubi_device_info *di)
     47{
     48	struct ubi_device *ubi;
     49
     50	if (ubi_num < 0 || ubi_num >= UBI_MAX_DEVICES)
     51		return -EINVAL;
     52	ubi = ubi_get_device(ubi_num);
     53	if (!ubi)
     54		return -ENODEV;
     55	ubi_do_get_device_info(ubi, di);
     56	ubi_put_device(ubi);
     57	return 0;
     58}
     59EXPORT_SYMBOL_GPL(ubi_get_device_info);
     60
     61/**
     62 * ubi_do_get_volume_info - get information about UBI volume.
     63 * @ubi: UBI device description object
     64 * @vol: volume description object
     65 * @vi: the information is stored here
     66 */
     67void ubi_do_get_volume_info(struct ubi_device *ubi, struct ubi_volume *vol,
     68			    struct ubi_volume_info *vi)
     69{
     70	vi->vol_id = vol->vol_id;
     71	vi->ubi_num = ubi->ubi_num;
     72	vi->size = vol->reserved_pebs;
     73	vi->used_bytes = vol->used_bytes;
     74	vi->vol_type = vol->vol_type;
     75	vi->corrupted = vol->corrupted;
     76	vi->upd_marker = vol->upd_marker;
     77	vi->alignment = vol->alignment;
     78	vi->usable_leb_size = vol->usable_leb_size;
     79	vi->name_len = vol->name_len;
     80	vi->name = vol->name;
     81	vi->cdev = vol->cdev.dev;
     82}
     83
     84/**
     85 * ubi_get_volume_info - get information about UBI volume.
     86 * @desc: volume descriptor
     87 * @vi: the information is stored here
     88 */
     89void ubi_get_volume_info(struct ubi_volume_desc *desc,
     90			 struct ubi_volume_info *vi)
     91{
     92	ubi_do_get_volume_info(desc->vol->ubi, desc->vol, vi);
     93}
     94EXPORT_SYMBOL_GPL(ubi_get_volume_info);
     95
     96/**
     97 * ubi_open_volume - open UBI volume.
     98 * @ubi_num: UBI device number
     99 * @vol_id: volume ID
    100 * @mode: open mode
    101 *
    102 * The @mode parameter specifies if the volume should be opened in read-only
    103 * mode, read-write mode, or exclusive mode. The exclusive mode guarantees that
    104 * nobody else will be able to open this volume. UBI allows to have many volume
    105 * readers and one writer at a time.
    106 *
    107 * If a static volume is being opened for the first time since boot, it will be
    108 * checked by this function, which means it will be fully read and the CRC
    109 * checksum of each logical eraseblock will be checked.
    110 *
    111 * This function returns volume descriptor in case of success and a negative
    112 * error code in case of failure.
    113 */
    114struct ubi_volume_desc *ubi_open_volume(int ubi_num, int vol_id, int mode)
    115{
    116	int err;
    117	struct ubi_volume_desc *desc;
    118	struct ubi_device *ubi;
    119	struct ubi_volume *vol;
    120
    121	dbg_gen("open device %d, volume %d, mode %d", ubi_num, vol_id, mode);
    122
    123	if (ubi_num < 0 || ubi_num >= UBI_MAX_DEVICES)
    124		return ERR_PTR(-EINVAL);
    125
    126	if (mode != UBI_READONLY && mode != UBI_READWRITE &&
    127	    mode != UBI_EXCLUSIVE && mode != UBI_METAONLY)
    128		return ERR_PTR(-EINVAL);
    129
    130	/*
    131	 * First of all, we have to get the UBI device to prevent its removal.
    132	 */
    133	ubi = ubi_get_device(ubi_num);
    134	if (!ubi)
    135		return ERR_PTR(-ENODEV);
    136
    137	if (vol_id < 0 || vol_id >= ubi->vtbl_slots) {
    138		err = -EINVAL;
    139		goto out_put_ubi;
    140	}
    141
    142	desc = kmalloc(sizeof(struct ubi_volume_desc), GFP_KERNEL);
    143	if (!desc) {
    144		err = -ENOMEM;
    145		goto out_put_ubi;
    146	}
    147
    148	err = -ENODEV;
    149	if (!try_module_get(THIS_MODULE))
    150		goto out_free;
    151
    152	spin_lock(&ubi->volumes_lock);
    153	vol = ubi->volumes[vol_id];
    154	if (!vol)
    155		goto out_unlock;
    156
    157	err = -EBUSY;
    158	switch (mode) {
    159	case UBI_READONLY:
    160		if (vol->exclusive)
    161			goto out_unlock;
    162		vol->readers += 1;
    163		break;
    164
    165	case UBI_READWRITE:
    166		if (vol->exclusive || vol->writers > 0)
    167			goto out_unlock;
    168		vol->writers += 1;
    169		break;
    170
    171	case UBI_EXCLUSIVE:
    172		if (vol->exclusive || vol->writers || vol->readers ||
    173		    vol->metaonly)
    174			goto out_unlock;
    175		vol->exclusive = 1;
    176		break;
    177
    178	case UBI_METAONLY:
    179		if (vol->metaonly || vol->exclusive)
    180			goto out_unlock;
    181		vol->metaonly = 1;
    182		break;
    183	}
    184	get_device(&vol->dev);
    185	vol->ref_count += 1;
    186	spin_unlock(&ubi->volumes_lock);
    187
    188	desc->vol = vol;
    189	desc->mode = mode;
    190
    191	mutex_lock(&ubi->ckvol_mutex);
    192	if (!vol->checked && !vol->skip_check) {
    193		/* This is the first open - check the volume */
    194		err = ubi_check_volume(ubi, vol_id);
    195		if (err < 0) {
    196			mutex_unlock(&ubi->ckvol_mutex);
    197			ubi_close_volume(desc);
    198			return ERR_PTR(err);
    199		}
    200		if (err == 1) {
    201			ubi_warn(ubi, "volume %d on UBI device %d is corrupted",
    202				 vol_id, ubi->ubi_num);
    203			vol->corrupted = 1;
    204		}
    205		vol->checked = 1;
    206	}
    207	mutex_unlock(&ubi->ckvol_mutex);
    208
    209	return desc;
    210
    211out_unlock:
    212	spin_unlock(&ubi->volumes_lock);
    213	module_put(THIS_MODULE);
    214out_free:
    215	kfree(desc);
    216out_put_ubi:
    217	ubi_err(ubi, "cannot open device %d, volume %d, error %d",
    218		ubi_num, vol_id, err);
    219	ubi_put_device(ubi);
    220	return ERR_PTR(err);
    221}
    222EXPORT_SYMBOL_GPL(ubi_open_volume);
    223
    224/**
    225 * ubi_open_volume_nm - open UBI volume by name.
    226 * @ubi_num: UBI device number
    227 * @name: volume name
    228 * @mode: open mode
    229 *
    230 * This function is similar to 'ubi_open_volume()', but opens a volume by name.
    231 */
    232struct ubi_volume_desc *ubi_open_volume_nm(int ubi_num, const char *name,
    233					   int mode)
    234{
    235	int i, vol_id = -1, len;
    236	struct ubi_device *ubi;
    237	struct ubi_volume_desc *ret;
    238
    239	dbg_gen("open device %d, volume %s, mode %d", ubi_num, name, mode);
    240
    241	if (!name)
    242		return ERR_PTR(-EINVAL);
    243
    244	len = strnlen(name, UBI_VOL_NAME_MAX + 1);
    245	if (len > UBI_VOL_NAME_MAX)
    246		return ERR_PTR(-EINVAL);
    247
    248	if (ubi_num < 0 || ubi_num >= UBI_MAX_DEVICES)
    249		return ERR_PTR(-EINVAL);
    250
    251	ubi = ubi_get_device(ubi_num);
    252	if (!ubi)
    253		return ERR_PTR(-ENODEV);
    254
    255	spin_lock(&ubi->volumes_lock);
    256	/* Walk all volumes of this UBI device */
    257	for (i = 0; i < ubi->vtbl_slots; i++) {
    258		struct ubi_volume *vol = ubi->volumes[i];
    259
    260		if (vol && len == vol->name_len && !strcmp(name, vol->name)) {
    261			vol_id = i;
    262			break;
    263		}
    264	}
    265	spin_unlock(&ubi->volumes_lock);
    266
    267	if (vol_id >= 0)
    268		ret = ubi_open_volume(ubi_num, vol_id, mode);
    269	else
    270		ret = ERR_PTR(-ENODEV);
    271
    272	/*
    273	 * We should put the UBI device even in case of success, because
    274	 * 'ubi_open_volume()' took a reference as well.
    275	 */
    276	ubi_put_device(ubi);
    277	return ret;
    278}
    279EXPORT_SYMBOL_GPL(ubi_open_volume_nm);
    280
    281/**
    282 * ubi_open_volume_path - open UBI volume by its character device node path.
    283 * @pathname: volume character device node path
    284 * @mode: open mode
    285 *
    286 * This function is similar to 'ubi_open_volume()', but opens a volume the path
    287 * to its character device node.
    288 */
    289struct ubi_volume_desc *ubi_open_volume_path(const char *pathname, int mode)
    290{
    291	int error, ubi_num, vol_id;
    292	struct path path;
    293	struct kstat stat;
    294
    295	dbg_gen("open volume %s, mode %d", pathname, mode);
    296
    297	if (!pathname || !*pathname)
    298		return ERR_PTR(-EINVAL);
    299
    300	error = kern_path(pathname, LOOKUP_FOLLOW, &path);
    301	if (error)
    302		return ERR_PTR(error);
    303
    304	error = vfs_getattr(&path, &stat, STATX_TYPE, AT_STATX_SYNC_AS_STAT);
    305	path_put(&path);
    306	if (error)
    307		return ERR_PTR(error);
    308
    309	if (!S_ISCHR(stat.mode))
    310		return ERR_PTR(-EINVAL);
    311
    312	ubi_num = ubi_major2num(MAJOR(stat.rdev));
    313	vol_id = MINOR(stat.rdev) - 1;
    314
    315	if (vol_id >= 0 && ubi_num >= 0)
    316		return ubi_open_volume(ubi_num, vol_id, mode);
    317	return ERR_PTR(-ENODEV);
    318}
    319EXPORT_SYMBOL_GPL(ubi_open_volume_path);
    320
    321/**
    322 * ubi_close_volume - close UBI volume.
    323 * @desc: volume descriptor
    324 */
    325void ubi_close_volume(struct ubi_volume_desc *desc)
    326{
    327	struct ubi_volume *vol = desc->vol;
    328	struct ubi_device *ubi = vol->ubi;
    329
    330	dbg_gen("close device %d, volume %d, mode %d",
    331		ubi->ubi_num, vol->vol_id, desc->mode);
    332
    333	spin_lock(&ubi->volumes_lock);
    334	switch (desc->mode) {
    335	case UBI_READONLY:
    336		vol->readers -= 1;
    337		break;
    338	case UBI_READWRITE:
    339		vol->writers -= 1;
    340		break;
    341	case UBI_EXCLUSIVE:
    342		vol->exclusive = 0;
    343		break;
    344	case UBI_METAONLY:
    345		vol->metaonly = 0;
    346		break;
    347	}
    348	vol->ref_count -= 1;
    349	spin_unlock(&ubi->volumes_lock);
    350
    351	kfree(desc);
    352	put_device(&vol->dev);
    353	ubi_put_device(ubi);
    354	module_put(THIS_MODULE);
    355}
    356EXPORT_SYMBOL_GPL(ubi_close_volume);
    357
    358/**
    359 * leb_read_sanity_check - does sanity checks on read requests.
    360 * @desc: volume descriptor
    361 * @lnum: logical eraseblock number to read from
    362 * @offset: offset within the logical eraseblock to read from
    363 * @len: how many bytes to read
    364 *
    365 * This function is used by ubi_leb_read() and ubi_leb_read_sg()
    366 * to perform sanity checks.
    367 */
    368static int leb_read_sanity_check(struct ubi_volume_desc *desc, int lnum,
    369				 int offset, int len)
    370{
    371	struct ubi_volume *vol = desc->vol;
    372	struct ubi_device *ubi = vol->ubi;
    373	int vol_id = vol->vol_id;
    374
    375	if (vol_id < 0 || vol_id >= ubi->vtbl_slots || lnum < 0 ||
    376	    lnum >= vol->used_ebs || offset < 0 || len < 0 ||
    377	    offset + len > vol->usable_leb_size)
    378		return -EINVAL;
    379
    380	if (vol->vol_type == UBI_STATIC_VOLUME) {
    381		if (vol->used_ebs == 0)
    382			/* Empty static UBI volume */
    383			return 0;
    384		if (lnum == vol->used_ebs - 1 &&
    385		    offset + len > vol->last_eb_bytes)
    386			return -EINVAL;
    387	}
    388
    389	if (vol->upd_marker)
    390		return -EBADF;
    391
    392	return 0;
    393}
    394
    395/**
    396 * ubi_leb_read - read data.
    397 * @desc: volume descriptor
    398 * @lnum: logical eraseblock number to read from
    399 * @buf: buffer where to store the read data
    400 * @offset: offset within the logical eraseblock to read from
    401 * @len: how many bytes to read
    402 * @check: whether UBI has to check the read data's CRC or not.
    403 *
    404 * This function reads data from offset @offset of logical eraseblock @lnum and
    405 * stores the data at @buf. When reading from static volumes, @check specifies
    406 * whether the data has to be checked or not. If yes, the whole logical
    407 * eraseblock will be read and its CRC checksum will be checked (i.e., the CRC
    408 * checksum is per-eraseblock). So checking may substantially slow down the
    409 * read speed. The @check argument is ignored for dynamic volumes.
    410 *
    411 * In case of success, this function returns zero. In case of failure, this
    412 * function returns a negative error code.
    413 *
    414 * %-EBADMSG error code is returned:
    415 * o for both static and dynamic volumes if MTD driver has detected a data
    416 *   integrity problem (unrecoverable ECC checksum mismatch in case of NAND);
    417 * o for static volumes in case of data CRC mismatch.
    418 *
    419 * If the volume is damaged because of an interrupted update this function just
    420 * returns immediately with %-EBADF error code.
    421 */
    422int ubi_leb_read(struct ubi_volume_desc *desc, int lnum, char *buf, int offset,
    423		 int len, int check)
    424{
    425	struct ubi_volume *vol = desc->vol;
    426	struct ubi_device *ubi = vol->ubi;
    427	int err, vol_id = vol->vol_id;
    428
    429	dbg_gen("read %d bytes from LEB %d:%d:%d", len, vol_id, lnum, offset);
    430
    431	err = leb_read_sanity_check(desc, lnum, offset, len);
    432	if (err < 0)
    433		return err;
    434
    435	if (len == 0)
    436		return 0;
    437
    438	err = ubi_eba_read_leb(ubi, vol, lnum, buf, offset, len, check);
    439	if (err && mtd_is_eccerr(err) && vol->vol_type == UBI_STATIC_VOLUME) {
    440		ubi_warn(ubi, "mark volume %d as corrupted", vol_id);
    441		vol->corrupted = 1;
    442	}
    443
    444	return err;
    445}
    446EXPORT_SYMBOL_GPL(ubi_leb_read);
    447
    448
    449/**
    450 * ubi_leb_read_sg - read data into a scatter gather list.
    451 * @desc: volume descriptor
    452 * @lnum: logical eraseblock number to read from
    453 * @sgl: UBI scatter gather list to store the read data
    454 * @offset: offset within the logical eraseblock to read from
    455 * @len: how many bytes to read
    456 * @check: whether UBI has to check the read data's CRC or not.
    457 *
    458 * This function works exactly like ubi_leb_read_sg(). But instead of
    459 * storing the read data into a buffer it writes to an UBI scatter gather
    460 * list.
    461 */
    462int ubi_leb_read_sg(struct ubi_volume_desc *desc, int lnum, struct ubi_sgl *sgl,
    463		    int offset, int len, int check)
    464{
    465	struct ubi_volume *vol = desc->vol;
    466	struct ubi_device *ubi = vol->ubi;
    467	int err, vol_id = vol->vol_id;
    468
    469	dbg_gen("read %d bytes from LEB %d:%d:%d", len, vol_id, lnum, offset);
    470
    471	err = leb_read_sanity_check(desc, lnum, offset, len);
    472	if (err < 0)
    473		return err;
    474
    475	if (len == 0)
    476		return 0;
    477
    478	err = ubi_eba_read_leb_sg(ubi, vol, sgl, lnum, offset, len, check);
    479	if (err && mtd_is_eccerr(err) && vol->vol_type == UBI_STATIC_VOLUME) {
    480		ubi_warn(ubi, "mark volume %d as corrupted", vol_id);
    481		vol->corrupted = 1;
    482	}
    483
    484	return err;
    485}
    486EXPORT_SYMBOL_GPL(ubi_leb_read_sg);
    487
    488/**
    489 * ubi_leb_write - write data.
    490 * @desc: volume descriptor
    491 * @lnum: logical eraseblock number to write to
    492 * @buf: data to write
    493 * @offset: offset within the logical eraseblock where to write
    494 * @len: how many bytes to write
    495 *
    496 * This function writes @len bytes of data from @buf to offset @offset of
    497 * logical eraseblock @lnum.
    498 *
    499 * This function takes care of physical eraseblock write failures. If write to
    500 * the physical eraseblock write operation fails, the logical eraseblock is
    501 * re-mapped to another physical eraseblock, the data is recovered, and the
    502 * write finishes. UBI has a pool of reserved physical eraseblocks for this.
    503 *
    504 * If all the data were successfully written, zero is returned. If an error
    505 * occurred and UBI has not been able to recover from it, this function returns
    506 * a negative error code. Note, in case of an error, it is possible that
    507 * something was still written to the flash media, but that may be some
    508 * garbage.
    509 *
    510 * If the volume is damaged because of an interrupted update this function just
    511 * returns immediately with %-EBADF code.
    512 */
    513int ubi_leb_write(struct ubi_volume_desc *desc, int lnum, const void *buf,
    514		  int offset, int len)
    515{
    516	struct ubi_volume *vol = desc->vol;
    517	struct ubi_device *ubi = vol->ubi;
    518	int vol_id = vol->vol_id;
    519
    520	dbg_gen("write %d bytes to LEB %d:%d:%d", len, vol_id, lnum, offset);
    521
    522	if (vol_id < 0 || vol_id >= ubi->vtbl_slots)
    523		return -EINVAL;
    524
    525	if (desc->mode == UBI_READONLY || vol->vol_type == UBI_STATIC_VOLUME)
    526		return -EROFS;
    527
    528	if (!ubi_leb_valid(vol, lnum) || offset < 0 || len < 0 ||
    529	    offset + len > vol->usable_leb_size ||
    530	    offset & (ubi->min_io_size - 1) || len & (ubi->min_io_size - 1))
    531		return -EINVAL;
    532
    533	if (vol->upd_marker)
    534		return -EBADF;
    535
    536	if (len == 0)
    537		return 0;
    538
    539	return ubi_eba_write_leb(ubi, vol, lnum, buf, offset, len);
    540}
    541EXPORT_SYMBOL_GPL(ubi_leb_write);
    542
    543/*
    544 * ubi_leb_change - change logical eraseblock atomically.
    545 * @desc: volume descriptor
    546 * @lnum: logical eraseblock number to change
    547 * @buf: data to write
    548 * @len: how many bytes to write
    549 *
    550 * This function changes the contents of a logical eraseblock atomically. @buf
    551 * has to contain new logical eraseblock data, and @len - the length of the
    552 * data, which has to be aligned. The length may be shorter than the logical
    553 * eraseblock size, ant the logical eraseblock may be appended to more times
    554 * later on. This function guarantees that in case of an unclean reboot the old
    555 * contents is preserved. Returns zero in case of success and a negative error
    556 * code in case of failure.
    557 */
    558int ubi_leb_change(struct ubi_volume_desc *desc, int lnum, const void *buf,
    559		   int len)
    560{
    561	struct ubi_volume *vol = desc->vol;
    562	struct ubi_device *ubi = vol->ubi;
    563	int vol_id = vol->vol_id;
    564
    565	dbg_gen("atomically write %d bytes to LEB %d:%d", len, vol_id, lnum);
    566
    567	if (vol_id < 0 || vol_id >= ubi->vtbl_slots)
    568		return -EINVAL;
    569
    570	if (desc->mode == UBI_READONLY || vol->vol_type == UBI_STATIC_VOLUME)
    571		return -EROFS;
    572
    573	if (!ubi_leb_valid(vol, lnum) || len < 0 ||
    574	    len > vol->usable_leb_size || len & (ubi->min_io_size - 1))
    575		return -EINVAL;
    576
    577	if (vol->upd_marker)
    578		return -EBADF;
    579
    580	if (len == 0)
    581		return 0;
    582
    583	return ubi_eba_atomic_leb_change(ubi, vol, lnum, buf, len);
    584}
    585EXPORT_SYMBOL_GPL(ubi_leb_change);
    586
    587/**
    588 * ubi_leb_erase - erase logical eraseblock.
    589 * @desc: volume descriptor
    590 * @lnum: logical eraseblock number
    591 *
    592 * This function un-maps logical eraseblock @lnum and synchronously erases the
    593 * correspondent physical eraseblock. Returns zero in case of success and a
    594 * negative error code in case of failure.
    595 *
    596 * If the volume is damaged because of an interrupted update this function just
    597 * returns immediately with %-EBADF code.
    598 */
    599int ubi_leb_erase(struct ubi_volume_desc *desc, int lnum)
    600{
    601	struct ubi_volume *vol = desc->vol;
    602	struct ubi_device *ubi = vol->ubi;
    603	int err;
    604
    605	dbg_gen("erase LEB %d:%d", vol->vol_id, lnum);
    606
    607	if (desc->mode == UBI_READONLY || vol->vol_type == UBI_STATIC_VOLUME)
    608		return -EROFS;
    609
    610	if (!ubi_leb_valid(vol, lnum))
    611		return -EINVAL;
    612
    613	if (vol->upd_marker)
    614		return -EBADF;
    615
    616	err = ubi_eba_unmap_leb(ubi, vol, lnum);
    617	if (err)
    618		return err;
    619
    620	return ubi_wl_flush(ubi, vol->vol_id, lnum);
    621}
    622EXPORT_SYMBOL_GPL(ubi_leb_erase);
    623
    624/**
    625 * ubi_leb_unmap - un-map logical eraseblock.
    626 * @desc: volume descriptor
    627 * @lnum: logical eraseblock number
    628 *
    629 * This function un-maps logical eraseblock @lnum and schedules the
    630 * corresponding physical eraseblock for erasure, so that it will eventually be
    631 * physically erased in background. This operation is much faster than the
    632 * erase operation.
    633 *
    634 * Unlike erase, the un-map operation does not guarantee that the logical
    635 * eraseblock will contain all 0xFF bytes when UBI is initialized again. For
    636 * example, if several logical eraseblocks are un-mapped, and an unclean reboot
    637 * happens after this, the logical eraseblocks will not necessarily be
    638 * un-mapped again when this MTD device is attached. They may actually be
    639 * mapped to the same physical eraseblocks again. So, this function has to be
    640 * used with care.
    641 *
    642 * In other words, when un-mapping a logical eraseblock, UBI does not store
    643 * any information about this on the flash media, it just marks the logical
    644 * eraseblock as "un-mapped" in RAM. If UBI is detached before the physical
    645 * eraseblock is physically erased, it will be mapped again to the same logical
    646 * eraseblock when the MTD device is attached again.
    647 *
    648 * The main and obvious use-case of this function is when the contents of a
    649 * logical eraseblock has to be re-written. Then it is much more efficient to
    650 * first un-map it, then write new data, rather than first erase it, then write
    651 * new data. Note, once new data has been written to the logical eraseblock,
    652 * UBI guarantees that the old contents has gone forever. In other words, if an
    653 * unclean reboot happens after the logical eraseblock has been un-mapped and
    654 * then written to, it will contain the last written data.
    655 *
    656 * This function returns zero in case of success and a negative error code in
    657 * case of failure. If the volume is damaged because of an interrupted update
    658 * this function just returns immediately with %-EBADF code.
    659 */
    660int ubi_leb_unmap(struct ubi_volume_desc *desc, int lnum)
    661{
    662	struct ubi_volume *vol = desc->vol;
    663	struct ubi_device *ubi = vol->ubi;
    664
    665	dbg_gen("unmap LEB %d:%d", vol->vol_id, lnum);
    666
    667	if (desc->mode == UBI_READONLY || vol->vol_type == UBI_STATIC_VOLUME)
    668		return -EROFS;
    669
    670	if (!ubi_leb_valid(vol, lnum))
    671		return -EINVAL;
    672
    673	if (vol->upd_marker)
    674		return -EBADF;
    675
    676	return ubi_eba_unmap_leb(ubi, vol, lnum);
    677}
    678EXPORT_SYMBOL_GPL(ubi_leb_unmap);
    679
    680/**
    681 * ubi_leb_map - map logical eraseblock to a physical eraseblock.
    682 * @desc: volume descriptor
    683 * @lnum: logical eraseblock number
    684 *
    685 * This function maps an un-mapped logical eraseblock @lnum to a physical
    686 * eraseblock. This means, that after a successful invocation of this
    687 * function the logical eraseblock @lnum will be empty (contain only %0xFF
    688 * bytes) and be mapped to a physical eraseblock, even if an unclean reboot
    689 * happens.
    690 *
    691 * This function returns zero in case of success, %-EBADF if the volume is
    692 * damaged because of an interrupted update, %-EBADMSG if the logical
    693 * eraseblock is already mapped, and other negative error codes in case of
    694 * other failures.
    695 */
    696int ubi_leb_map(struct ubi_volume_desc *desc, int lnum)
    697{
    698	struct ubi_volume *vol = desc->vol;
    699	struct ubi_device *ubi = vol->ubi;
    700
    701	dbg_gen("map LEB %d:%d", vol->vol_id, lnum);
    702
    703	if (desc->mode == UBI_READONLY || vol->vol_type == UBI_STATIC_VOLUME)
    704		return -EROFS;
    705
    706	if (!ubi_leb_valid(vol, lnum))
    707		return -EINVAL;
    708
    709	if (vol->upd_marker)
    710		return -EBADF;
    711
    712	if (ubi_eba_is_mapped(vol, lnum))
    713		return -EBADMSG;
    714
    715	return ubi_eba_write_leb(ubi, vol, lnum, NULL, 0, 0);
    716}
    717EXPORT_SYMBOL_GPL(ubi_leb_map);
    718
    719/**
    720 * ubi_is_mapped - check if logical eraseblock is mapped.
    721 * @desc: volume descriptor
    722 * @lnum: logical eraseblock number
    723 *
    724 * This function checks if logical eraseblock @lnum is mapped to a physical
    725 * eraseblock. If a logical eraseblock is un-mapped, this does not necessarily
    726 * mean it will still be un-mapped after the UBI device is re-attached. The
    727 * logical eraseblock may become mapped to the physical eraseblock it was last
    728 * mapped to.
    729 *
    730 * This function returns %1 if the LEB is mapped, %0 if not, and a negative
    731 * error code in case of failure. If the volume is damaged because of an
    732 * interrupted update this function just returns immediately with %-EBADF error
    733 * code.
    734 */
    735int ubi_is_mapped(struct ubi_volume_desc *desc, int lnum)
    736{
    737	struct ubi_volume *vol = desc->vol;
    738
    739	dbg_gen("test LEB %d:%d", vol->vol_id, lnum);
    740
    741	if (!ubi_leb_valid(vol, lnum))
    742		return -EINVAL;
    743
    744	if (vol->upd_marker)
    745		return -EBADF;
    746
    747	return ubi_eba_is_mapped(vol, lnum);
    748}
    749EXPORT_SYMBOL_GPL(ubi_is_mapped);
    750
    751/**
    752 * ubi_sync - synchronize UBI device buffers.
    753 * @ubi_num: UBI device to synchronize
    754 *
    755 * The underlying MTD device may cache data in hardware or in software. This
    756 * function ensures the caches are flushed. Returns zero in case of success and
    757 * a negative error code in case of failure.
    758 */
    759int ubi_sync(int ubi_num)
    760{
    761	struct ubi_device *ubi;
    762
    763	ubi = ubi_get_device(ubi_num);
    764	if (!ubi)
    765		return -ENODEV;
    766
    767	mtd_sync(ubi->mtd);
    768	ubi_put_device(ubi);
    769	return 0;
    770}
    771EXPORT_SYMBOL_GPL(ubi_sync);
    772
    773/**
    774 * ubi_flush - flush UBI work queue.
    775 * @ubi_num: UBI device to flush work queue
    776 * @vol_id: volume id to flush for
    777 * @lnum: logical eraseblock number to flush for
    778 *
    779 * This function executes all pending works for a particular volume id / logical
    780 * eraseblock number pair. If either value is set to %UBI_ALL, then it acts as
    781 * a wildcard for all of the corresponding volume numbers or logical
    782 * eraseblock numbers. It returns zero in case of success and a negative error
    783 * code in case of failure.
    784 */
    785int ubi_flush(int ubi_num, int vol_id, int lnum)
    786{
    787	struct ubi_device *ubi;
    788	int err = 0;
    789
    790	ubi = ubi_get_device(ubi_num);
    791	if (!ubi)
    792		return -ENODEV;
    793
    794	err = ubi_wl_flush(ubi, vol_id, lnum);
    795	ubi_put_device(ubi);
    796	return err;
    797}
    798EXPORT_SYMBOL_GPL(ubi_flush);
    799
    800BLOCKING_NOTIFIER_HEAD(ubi_notifiers);
    801
    802/**
    803 * ubi_register_volume_notifier - register a volume notifier.
    804 * @nb: the notifier description object
    805 * @ignore_existing: if non-zero, do not send "added" notification for all
    806 *                   already existing volumes
    807 *
    808 * This function registers a volume notifier, which means that
    809 * 'nb->notifier_call()' will be invoked when an UBI  volume is created,
    810 * removed, re-sized, re-named, or updated. The first argument of the function
    811 * is the notification type. The second argument is pointer to a
    812 * &struct ubi_notification object which describes the notification event.
    813 * Using UBI API from the volume notifier is prohibited.
    814 *
    815 * This function returns zero in case of success and a negative error code
    816 * in case of failure.
    817 */
    818int ubi_register_volume_notifier(struct notifier_block *nb,
    819				 int ignore_existing)
    820{
    821	int err;
    822
    823	err = blocking_notifier_chain_register(&ubi_notifiers, nb);
    824	if (err != 0)
    825		return err;
    826	if (ignore_existing)
    827		return 0;
    828
    829	/*
    830	 * We are going to walk all UBI devices and all volumes, and
    831	 * notify the user about existing volumes by the %UBI_VOLUME_ADDED
    832	 * event. We have to lock the @ubi_devices_mutex to make sure UBI
    833	 * devices do not disappear.
    834	 */
    835	mutex_lock(&ubi_devices_mutex);
    836	ubi_enumerate_volumes(nb);
    837	mutex_unlock(&ubi_devices_mutex);
    838
    839	return err;
    840}
    841EXPORT_SYMBOL_GPL(ubi_register_volume_notifier);
    842
    843/**
    844 * ubi_unregister_volume_notifier - unregister the volume notifier.
    845 * @nb: the notifier description object
    846 *
    847 * This function unregisters volume notifier @nm and returns zero in case of
    848 * success and a negative error code in case of failure.
    849 */
    850int ubi_unregister_volume_notifier(struct notifier_block *nb)
    851{
    852	return blocking_notifier_chain_unregister(&ubi_notifiers, nb);
    853}
    854EXPORT_SYMBOL_GPL(ubi_unregister_volume_notifier);