[PATCH v2 2/3] mtd: test: refactor mtdtest_erase_eraseblock to introduce a new mtdtest_erase function

Dongsheng Yang yangds.fnst at cn.fujitsu.com
Tue Sep 29 18:01:20 PDT 2015


In original mtd_test, there is only one function to erase a block, but
we need a function to accept [addr, size] to erase mtd device for
mtd_erasetest. So refactor the original mtdtest_erase_eraseblock
to introduce a new mtdtest_erase.

Signed-off-by: Dongsheng Yang <yangds.fnst at cn.fujitsu.com>
---
 drivers/mtd/tests/mtd_test.c | 44 ++++++++++++++++++++++++++++++++------------
 drivers/mtd/tests/mtd_test.h |  1 +
 2 files changed, 33 insertions(+), 12 deletions(-)

diff --git a/drivers/mtd/tests/mtd_test.c b/drivers/mtd/tests/mtd_test.c
index 34736bb..4c4320c 100644
--- a/drivers/mtd/tests/mtd_test.c
+++ b/drivers/mtd/tests/mtd_test.c
@@ -9,24 +9,14 @@
 int mtdtest_erase_eraseblock(struct mtd_info *mtd, unsigned int ebnum)
 {
 	int err;
-	struct erase_info ei;
 	loff_t addr = (loff_t)ebnum * mtd->erasesize;
 
-	memset(&ei, 0, sizeof(struct erase_info));
-	ei.mtd  = mtd;
-	ei.addr = addr;
-	ei.len  = mtd->erasesize;
-
-	err = mtd_erase(mtd, &ei);
+	err = mtdtest_erase(mtd, addr, mtd->erasesize, 0);
 	if (err) {
-		pr_info("error %d while erasing EB %d\n", err, ebnum);
+		pr_info("failed to erase EB %d\n", ebnum);
 		return err;
 	}
 
-	if (ei.state == MTD_ERASE_FAILED) {
-		pr_info("some erase error occurred at EB %d\n", ebnum);
-		return -EIO;
-	}
 	return 0;
 }
 
@@ -111,3 +101,33 @@ int mtdtest_write(struct mtd_info *mtd, loff_t addr, size_t size,
 
 	return err;
 }
+
+/*
+ * There is a parameter named as quiet, it's useful to clean the output
+ * when we are testing some negative cases.
+ */
+int mtdtest_erase(struct mtd_info *mtd, loff_t addr, size_t size, int quiet)
+{
+	int err;
+	struct erase_info ei;
+
+	memset(&ei, 0, sizeof(struct erase_info));
+	ei.mtd  = mtd;
+	ei.addr = addr;
+	ei.len  = size;
+
+	err = mtd_erase(mtd, &ei);
+	if (err) {
+		if (!quiet)
+			pr_err("error %d while erasing (addr: %#llx, size: %lu)\n", err, addr, size);
+		return err;
+	}
+
+	if (ei.state == MTD_ERASE_FAILED) {
+		if (!quiet)
+			pr_err("some erase error occurred in erasing (addr: %#llx, size: %lu)\n", addr, size);
+		return -EIO;
+	}
+
+	return err;
+}
diff --git a/drivers/mtd/tests/mtd_test.h b/drivers/mtd/tests/mtd_test.h
index 4b7bee1..c53558c 100644
--- a/drivers/mtd/tests/mtd_test.h
+++ b/drivers/mtd/tests/mtd_test.h
@@ -21,3 +21,4 @@ int mtdtest_erase_good_eraseblocks(struct mtd_info *mtd, unsigned char *bbt,
 int mtdtest_read(struct mtd_info *mtd, loff_t addr, size_t size, void *buf);
 int mtdtest_write(struct mtd_info *mtd, loff_t addr, size_t size,
 		const void *buf);
+int mtdtest_erase(struct mtd_info *mtd, loff_t addr, size_t size, int quiet);
-- 
1.8.4.2




More information about the linux-mtd mailing list