mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-23 05:56:14 -04:00
ubi: fastmap: erase_block: Get erase counter from wl_entry rather than flash
Just like sync_erase() does, getting erase counter from wl_entry is faster than reading from flash. Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com> Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:
committed by
Richard Weinberger
parent
4d18b5a57b
commit
08a4267874
@@ -1399,36 +1399,27 @@ out:
|
||||
*/
|
||||
static int erase_block(struct ubi_device *ubi, struct ubi_wl_entry *e)
|
||||
{
|
||||
int ret;
|
||||
int err;
|
||||
struct ubi_ec_hdr *ec_hdr;
|
||||
long long ec;
|
||||
long long ec = e->ec;
|
||||
|
||||
ec_hdr = kzalloc(ubi->ec_hdr_alsize, GFP_KERNEL);
|
||||
if (!ec_hdr)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = ubi_io_read_ec_hdr(ubi, e->pnum, ec_hdr, 0);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
else if (ret && ret != UBI_IO_BITFLIPS) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = ubi_io_sync_erase(ubi, e->pnum, 0);
|
||||
if (ret < 0)
|
||||
err = ubi_io_sync_erase(ubi, e->pnum, 0);
|
||||
if (err < 0)
|
||||
goto out;
|
||||
|
||||
ec = be64_to_cpu(ec_hdr->ec);
|
||||
ec += ret;
|
||||
ec += err;
|
||||
if (ec > UBI_MAX_ERASECOUNTER) {
|
||||
ret = -EINVAL;
|
||||
err = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ec_hdr->ec = cpu_to_be64(ec);
|
||||
ret = ubi_io_write_ec_hdr(ubi, e->pnum, ec_hdr);
|
||||
if (ret < 0)
|
||||
err = ubi_io_write_ec_hdr(ubi, e->pnum, ec_hdr);
|
||||
if (err < 0)
|
||||
goto out;
|
||||
|
||||
e->ec = ec;
|
||||
@@ -1439,7 +1430,7 @@ static int erase_block(struct ubi_device *ubi, struct ubi_wl_entry *e)
|
||||
|
||||
out:
|
||||
kfree(ec_hdr);
|
||||
return ret;
|
||||
return err;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user