diff options
author | Richard Weinberger <richard@nod.at> | 2018-11-07 23:16:19 +0100 |
---|---|---|
committer | Richard Weinberger <richard@nod.at> | 2019-02-24 11:40:45 +0100 |
commit | 663586c0a8929db81e617c775823efb9d65f2bc2 (patch) | |
tree | 0bce3115039445f6f49f39a02edd5fbd61b7e3a8 /drivers/mtd/ubi/cdev.c | |
parent | b32b78f89221ee26ae60f9a59e71b5ec28ba5fe2 (diff) | |
download | talos-op-linux-663586c0a8929db81e617c775823efb9d65f2bc2.tar.gz talos-op-linux-663586c0a8929db81e617c775823efb9d65f2bc2.zip |
ubi: Expose the bitrot interface
Using UBI_IOCRPEB and UBI_IOCSPEB userspace can force
reading and scrubbing of PEBs.
In case of bitflips UBI will automatically take action
and move data to a different PEB.
This interface allows a daemon to foster your NAND.
Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'drivers/mtd/ubi/cdev.c')
-rw-r--r-- | drivers/mtd/ubi/cdev.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/mtd/ubi/cdev.c b/drivers/mtd/ubi/cdev.c index 22547d7a84ea..947a8adbc799 100644 --- a/drivers/mtd/ubi/cdev.c +++ b/drivers/mtd/ubi/cdev.c @@ -974,6 +974,36 @@ static long ubi_cdev_ioctl(struct file *file, unsigned int cmd, break; } + /* Check a specific PEB for bitflips and scrub it if needed */ + case UBI_IOCRPEB: + { + int pnum; + + err = get_user(pnum, (__user int32_t *)argp); + if (err) { + err = -EFAULT; + break; + } + + err = ubi_bitflip_check(ubi, pnum, 0); + break; + } + + /* Force scrubbing for a specific PEB */ + case UBI_IOCSPEB: + { + int pnum; + + err = get_user(pnum, (__user int32_t *)argp); + if (err) { + err = -EFAULT; + break; + } + + err = ubi_bitflip_check(ubi, pnum, 1); + break; + } + default: err = -ENOTTY; break; |