UBI: check if we are in RO mode in the erase routine
authorArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Fri, 18 Mar 2011 16:11:42 +0000 (18:11 +0200)
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Tue, 5 Apr 2011 08:08:58 +0000 (11:08 +0300)
'do_sync_erase()' has to check whether we are in R/O mode before
erasing the PEB. This patch adds the check and while on it, adds an
assertion which validates the 'pnum' argument, as well as removes
a check which is always true because it has already been done
few lines before.

Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
drivers/mtd/ubi/io.c

index eededf94f5a6c591d003fcd9838e8a06af15f3d4..e347cc4388edd5cad5e96d471458a642450f4271 100644 (file)
@@ -344,6 +344,12 @@ static int do_sync_erase(struct ubi_device *ubi, int pnum)
        wait_queue_head_t wq;
 
        dbg_io("erase PEB %d", pnum);
+       ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
+
+       if (ubi->ro_mode) {
+               ubi_err("read-only mode");
+               return -EROFS;
+       }
 
 retry:
        init_waitqueue_head(&wq);
@@ -390,7 +396,7 @@ retry:
        if (err)
                return err;
 
-       if (ubi_dbg_is_erase_failure() && !err) {
+       if (ubi_dbg_is_erase_failure()) {
                dbg_err("cannot erase PEB %d (emulated)", pnum);
                return -EIO;
        }