]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ubi: Replace erase_block() with sync_erase()
authorZhihao Cheng <chengzhihao1@huawei.com>
Mon, 28 Aug 2023 06:38:37 +0000 (14:38 +0800)
committerRichard Weinberger <richard@nod.at>
Sat, 28 Oct 2023 20:34:24 +0000 (22:34 +0200)
Since erase_block() has same logic with sync_erase(), just replace it
with sync_erase(), also rename 'sync_erase()' to 'ubi_sync_erase()'.

Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
drivers/mtd/ubi/fastmap.c
drivers/mtd/ubi/ubi.h
drivers/mtd/ubi/wl.c

index d64bfb986d405a5dc257810497e2c9808c8b0789..8f6052cb3217ffc27627477207539259d6b7cda3 100644 (file)
@@ -1389,50 +1389,6 @@ out:
        return ret;
 }
 
-/**
- * erase_block - Manually erase a PEB.
- * @ubi: UBI device object
- * @e: the physical eraseblock to erase
- *
- * This function returns zero in case of success and a negative error code in
- * case of failure.
- */
-static int erase_block(struct ubi_device *ubi, struct ubi_wl_entry *e)
-{
-       int err;
-       struct ubi_ec_hdr *ec_hdr;
-       long long ec = e->ec;
-
-       ec_hdr = kzalloc(ubi->ec_hdr_alsize, GFP_NOFS);
-       if (!ec_hdr)
-               return -ENOMEM;
-
-       err = ubi_io_sync_erase(ubi, e->pnum, 0);
-       if (err < 0)
-               goto out;
-
-       ec += err;
-       if (ec > UBI_MAX_ERASECOUNTER) {
-               err = -EINVAL;
-               goto out;
-       }
-
-       ec_hdr->ec = cpu_to_be64(ec);
-       err = ubi_io_write_ec_hdr(ubi, e->pnum, ec_hdr);
-       if (err < 0)
-               goto out;
-
-       e->ec = ec;
-       spin_lock(&ubi->wl_lock);
-       if (e->ec > ubi->max_ec)
-               ubi->max_ec = e->ec;
-       spin_unlock(&ubi->wl_lock);
-
-out:
-       kfree(ec_hdr);
-       return err;
-}
-
 /**
  * invalidate_fastmap - destroys a fastmap.
  * @ubi: UBI device object
@@ -1573,7 +1529,7 @@ int ubi_update_fastmap(struct ubi_device *ubi)
 
                if (!tmp_e) {
                        if (old_fm && old_fm->e[i]) {
-                               ret = erase_block(ubi, old_fm->e[i]);
+                               ret = ubi_sync_erase(ubi, old_fm->e[i], 0);
                                if (ret < 0) {
                                        ubi_err(ubi, "could not erase old fastmap PEB");
 
@@ -1625,7 +1581,7 @@ int ubi_update_fastmap(struct ubi_device *ubi)
        if (old_fm) {
                /* no fresh anchor PEB was found, reuse the old one */
                if (!tmp_e) {
-                       ret = erase_block(ubi, old_fm->e[0]);
+                       ret = ubi_sync_erase(ubi, old_fm->e[0], 0);
                        if (ret < 0) {
                                ubi_err(ubi, "could not erase old anchor PEB");
 
index c8f1bd4fa10080c775042ecd9fd3514f366fc82d..2f0c0eacc0133f60a8b4672e90162a80bfee74d7 100644 (file)
@@ -902,6 +902,7 @@ int self_check_eba(struct ubi_device *ubi, struct ubi_attach_info *ai_fastmap,
                   struct ubi_attach_info *ai_scan);
 
 /* wl.c */
+int ubi_sync_erase(struct ubi_device *ubi, struct ubi_wl_entry *e, int torture);
 int ubi_wl_get_peb(struct ubi_device *ubi);
 int ubi_wl_put_peb(struct ubi_device *ubi, int vol_id, int lnum,
                   int pnum, int torture);
index 26a214f016c18448469c4bb3988ac09af224ab95..0c78e09d79604aead83cca5f8255b03f11f8a5c3 100644 (file)
@@ -427,7 +427,7 @@ static int prot_queue_del(struct ubi_device *ubi, int pnum)
 }
 
 /**
- * sync_erase - synchronously erase a physical eraseblock.
+ * ubi_sync_erase - synchronously erase a physical eraseblock.
  * @ubi: UBI device description object
  * @e: the physical eraseblock to erase
  * @torture: if the physical eraseblock has to be tortured
@@ -435,8 +435,7 @@ static int prot_queue_del(struct ubi_device *ubi, int pnum)
  * This function returns zero in case of success and a negative error code in
  * case of failure.
  */
-static int sync_erase(struct ubi_device *ubi, struct ubi_wl_entry *e,
-                     int torture)
+int ubi_sync_erase(struct ubi_device *ubi, struct ubi_wl_entry *e, int torture)
 {
        int err;
        struct ubi_ec_hdr *ec_hdr;
@@ -1094,7 +1093,7 @@ static int __erase_worker(struct ubi_device *ubi, struct ubi_work *wl_wrk)
        dbg_wl("erase PEB %d EC %d LEB %d:%d",
               pnum, e->ec, wl_wrk->vol_id, wl_wrk->lnum);
 
-       err = sync_erase(ubi, e, wl_wrk->torture);
+       err = ubi_sync_erase(ubi, e, wl_wrk->torture);
        if (!err) {
                spin_lock(&ubi->wl_lock);
 
@@ -1749,7 +1748,7 @@ static int erase_aeb(struct ubi_device *ubi, struct ubi_ainf_peb *aeb, bool sync
        ubi->lookuptbl[e->pnum] = e;
 
        if (sync) {
-               err = sync_erase(ubi, e, false);
+               err = ubi_sync_erase(ubi, e, false);
                if (err)
                        goto out_free;