diff options
author | Richard Weinberger <richard@nod.at> | 2018-05-28 22:04:33 +0200 |
---|---|---|
committer | Richard Weinberger <richard@nod.at> | 2018-06-07 15:53:16 +0200 |
commit | 34653fd8c46e771585fce5975e4243f8fd401914 (patch) | |
tree | 2e0c2d723829de99308aa9d9a88ad7449ed14d9c /drivers/mtd/ubi/fastmap.c | |
parent | 781932375ffc6411713ee0926ccae8596ed0261c (diff) | |
download | blackbird-obmc-linux-34653fd8c46e771585fce5975e4243f8fd401914.tar.gz blackbird-obmc-linux-34653fd8c46e771585fce5975e4243f8fd401914.zip |
ubi: fastmap: Check each mapping only once
Maintain a bitmap to keep track of which LEB->PEB mapping
was checked already.
That way we have to read back VID headers only once.
Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'drivers/mtd/ubi/fastmap.c')
-rw-r--r-- | drivers/mtd/ubi/fastmap.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/mtd/ubi/fastmap.c b/drivers/mtd/ubi/fastmap.c index 91705962ba73..462526a10537 100644 --- a/drivers/mtd/ubi/fastmap.c +++ b/drivers/mtd/ubi/fastmap.c @@ -1100,6 +1100,26 @@ free_fm_sb: goto out; } +int ubi_fastmap_init_checkmap(struct ubi_volume *vol, int leb_count) +{ + struct ubi_device *ubi = vol->ubi; + + if (!ubi->fast_attach) + return 0; + + vol->checkmap = kcalloc(BITS_TO_LONGS(leb_count), sizeof(unsigned long), + GFP_KERNEL); + if (!vol->checkmap) + return -ENOMEM; + + return 0; +} + +void ubi_fastmap_destroy_checkmap(struct ubi_volume *vol) +{ + kfree(vol->checkmap); +} + /** * ubi_write_fastmap - writes a fastmap. * @ubi: UBI device object |