[OpenWrt-Devel] [PATCH 1/3] kernel: improve ubi auto attach code readability

Mathias Kresin dev at kresin.me
Thu Jul 19 13:05:32 EDT 2018


The early return on failed open of the mtd device allows to get rid of
one level of indentation.

Move the put_mtd_device() called on multiple error conditions to a goto
label to use it later for more error conditions.

While at it, make clear that we only check for the UBI magic if the read
from flash was successful.

Signed-off-by: Mathias Kresin <dev at kresin.me>
---
 ...tach-mtd-device-named-ubi-or-data-on-boot.patch | 54 ++++++++++++----------
 ...tach-mtd-device-named-ubi-or-data-on-boot.patch | 54 ++++++++++++----------
 2 files changed, 58 insertions(+), 50 deletions(-)

diff --git a/target/linux/generic/pending-4.14/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch b/target/linux/generic/pending-4.14/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
index 63afabb..83b0c72 100644
--- a/target/linux/generic/pending-4.14/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
+++ b/target/linux/generic/pending-4.14/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
@@ -8,7 +8,7 @@ Signed-off-by: Daniel Golle <daniel at makrotopia.org>
 
 --- a/drivers/mtd/ubi/build.c
 +++ b/drivers/mtd/ubi/build.c
-@@ -1171,6 +1171,49 @@ static struct mtd_info * __init open_mtd
+@@ -1171,6 +1171,53 @@ static struct mtd_info * __init open_mtd
  	return mtd;
  }
  
@@ -20,45 +20,49 @@ Signed-off-by: Daniel Golle <daniel at makrotopia.org>
 +{
 +	int err;
 +	struct mtd_info *mtd;
++	size_t len;
++	char magic[4];
 +
 +	/* try attaching mtd device named "ubi" or "data" */
 +	mtd = open_mtd_device("ubi");
 +	if (IS_ERR(mtd))
 +		mtd = open_mtd_device("data");
 +
-+	if (!IS_ERR(mtd)) {
-+		size_t len;
-+		char magic[4];
++	if (IS_ERR(mtd))
++		return;
 +
-+		/* check for a valid ubi magic */
-+		err = mtd_read(mtd, 0, 4, &len, (void *) magic);
-+		if (!err && len == 4 && strncmp(magic, "UBI#", 4)) {
-+			pr_err("UBI error: no valid UBI magic found inside mtd%d\n", mtd->index);
-+			put_mtd_device(mtd);
-+			return;
-+		}
++	/* check for a valid ubi magic if read from flash was successful */
++	err = mtd_read(mtd, 0, 4, &len, (void *) magic);
++	if (!err && len == 4 && strncmp(magic, "UBI#", 4)) {
++		pr_err("UBI error: no valid UBI magic found inside mtd%d\n", mtd->index);
++		goto cleanup;
++	}
 +
-+		/* auto-add only media types where UBI makes sense */
-+		if (mtd->type == MTD_NANDFLASH ||
-+		    mtd->type == MTD_NORFLASH ||
-+		    mtd->type == MTD_DATAFLASH ||
-+		    mtd->type == MTD_MLCNANDFLASH) {
-+			mutex_lock(&ubi_devices_mutex);
-+			pr_notice("UBI: auto-attach mtd%d\n", mtd->index);
-+			err = ubi_attach_mtd_dev(mtd, UBI_DEV_NUM_AUTO, 0, 0);
-+			mutex_unlock(&ubi_devices_mutex);
-+			if (err < 0) {
-+				pr_err("UBI error: cannot attach mtd%d\n", mtd->index);
-+				put_mtd_device(mtd);
-+			}
++	/* auto-add only media types where UBI makes sense */
++	if (mtd->type == MTD_NANDFLASH ||
++	    mtd->type == MTD_NORFLASH ||
++	    mtd->type == MTD_DATAFLASH ||
++	    mtd->type == MTD_MLCNANDFLASH) {
++		mutex_lock(&ubi_devices_mutex);
++		pr_notice("UBI: auto-attach mtd%d\n", mtd->index);
++		err = ubi_attach_mtd_dev(mtd, UBI_DEV_NUM_AUTO, 0, 0);
++		mutex_unlock(&ubi_devices_mutex);
++		if (err < 0) {
++			pr_err("UBI error: cannot attach mtd%d\n", mtd->index);
++			goto cleanup;
 +		}
 +	}
++
++	return;
++
++cleanup:
++	put_mtd_device(mtd);
 +}
 +
  static int __init ubi_init(void)
  {
  	int err, i, k;
-@@ -1254,6 +1297,12 @@ static int __init ubi_init(void)
+@@ -1254,6 +1301,12 @@ static int __init ubi_init(void)
  		}
  	}
  
diff --git a/target/linux/generic/pending-4.9/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch b/target/linux/generic/pending-4.9/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
index 8b37dba..d6585b1 100644
--- a/target/linux/generic/pending-4.9/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
+++ b/target/linux/generic/pending-4.9/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
@@ -8,7 +8,7 @@ Signed-off-by: Daniel Golle <daniel at makrotopia.org>
 
 --- a/drivers/mtd/ubi/build.c
 +++ b/drivers/mtd/ubi/build.c
-@@ -1226,6 +1226,49 @@ static struct mtd_info * __init open_mtd
+@@ -1226,6 +1226,53 @@ static struct mtd_info * __init open_mtd
  	return mtd;
  }
  
@@ -20,45 +20,49 @@ Signed-off-by: Daniel Golle <daniel at makrotopia.org>
 +{
 +	int err;
 +	struct mtd_info *mtd;
++	size_t len;
++	char magic[4];
 +
 +	/* try attaching mtd device named "ubi" or "data" */
 +	mtd = open_mtd_device("ubi");
 +	if (IS_ERR(mtd))
 +		mtd = open_mtd_device("data");
 +
-+	if (!IS_ERR(mtd)) {
-+		size_t len;
-+		char magic[4];
++	if (IS_ERR(mtd))
++		return;
 +
-+		/* check for a valid ubi magic */
-+		err = mtd_read(mtd, 0, 4, &len, (void *) magic);
-+		if (!err && len == 4 && strncmp(magic, "UBI#", 4)) {
-+			pr_err("UBI error: no valid UBI magic found inside mtd%d\n", mtd->index);
-+			put_mtd_device(mtd);
-+			return;
-+		}
++	/* check for a valid ubi magic if read from flash was successful */
++	err = mtd_read(mtd, 0, 4, &len, (void *) magic);
++	if (!err && len == 4 && strncmp(magic, "UBI#", 4)) {
++		pr_err("UBI error: no valid UBI magic found inside mtd%d\n", mtd->index);
++		goto cleanup;
++	}
 +
-+		/* auto-add only media types where UBI makes sense */
-+		if (mtd->type == MTD_NANDFLASH ||
-+		    mtd->type == MTD_NORFLASH ||
-+		    mtd->type == MTD_DATAFLASH ||
-+		    mtd->type == MTD_MLCNANDFLASH) {
-+			mutex_lock(&ubi_devices_mutex);
-+			pr_notice("UBI: auto-attach mtd%d\n", mtd->index);
-+			err = ubi_attach_mtd_dev(mtd, UBI_DEV_NUM_AUTO, 0, 0);
-+			mutex_unlock(&ubi_devices_mutex);
-+			if (err < 0) {
-+				pr_err("UBI error: cannot attach mtd%d\n", mtd->index);
-+				put_mtd_device(mtd);
-+			}
++	/* auto-add only media types where UBI makes sense */
++	if (mtd->type == MTD_NANDFLASH ||
++	    mtd->type == MTD_NORFLASH ||
++	    mtd->type == MTD_DATAFLASH ||
++	    mtd->type == MTD_MLCNANDFLASH) {
++		mutex_lock(&ubi_devices_mutex);
++		pr_notice("UBI: auto-attach mtd%d\n", mtd->index);
++		err = ubi_attach_mtd_dev(mtd, UBI_DEV_NUM_AUTO, 0, 0);
++		mutex_unlock(&ubi_devices_mutex);
++		if (err < 0) {
++			pr_err("UBI error: cannot attach mtd%d\n", mtd->index);
++			goto cleanup;
 +		}
 +	}
++
++	return;
++
++cleanup:
++	put_mtd_device(mtd);
 +}
 +
  static int __init ubi_init(void)
  {
  	int err, i, k;
-@@ -1309,6 +1352,12 @@ static int __init ubi_init(void)
+@@ -1309,6 +1356,12 @@ static int __init ubi_init(void)
  		}
  	}
  
-- 
2.7.4


_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list