A few UBI messages lacks the trailing newline character which leads to ugly lines in the bootlog like this: [ 6.649159] UBI error: no valid UBI magic found inside mtd6[ 6.667751] Freeing unused kernel memory: 2196K Add a newline character to the end of the messages to fix it. After the fix the line from above looks better in the log: [ 6.609182] UBI error: no valid UBI magic found inside mtd6 [ 6.627599] Freeing unused kernel memory: 2132K Signed-off-by: Gabor Juhos <juhosg@freemail.hu>
		
			
				
	
	
		
			61 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From: Gabor Juhos <juhosg@openwrt.org>
 | 
						|
Subject: mtd: add EOF marker support to the UBI layer
 | 
						|
 | 
						|
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
 | 
						|
---
 | 
						|
 drivers/mtd/ubi/attach.c | 25 ++++++++++++++++++++++---
 | 
						|
 drivers/mtd/ubi/ubi.h    |  1 +
 | 
						|
 2 files changed, 23 insertions(+), 3 deletions(-)
 | 
						|
 | 
						|
--- a/drivers/mtd/ubi/attach.c
 | 
						|
+++ b/drivers/mtd/ubi/attach.c
 | 
						|
@@ -939,6 +939,13 @@ static bool vol_ignored(int vol_id)
 | 
						|
 #endif
 | 
						|
 }
 | 
						|
 
 | 
						|
+static bool ec_hdr_has_eof(struct ubi_ec_hdr *ech)
 | 
						|
+{
 | 
						|
+	return ech->padding1[0] == 'E' &&
 | 
						|
+	       ech->padding1[1] == 'O' &&
 | 
						|
+	       ech->padding1[2] == 'F';
 | 
						|
+}
 | 
						|
+
 | 
						|
 /**
 | 
						|
  * scan_peb - scan and process UBI headers of a PEB.
 | 
						|
  * @ubi: UBI device description object
 | 
						|
@@ -971,9 +978,21 @@ static int scan_peb(struct ubi_device *u
 | 
						|
 		return 0;
 | 
						|
 	}
 | 
						|
 
 | 
						|
-	err = ubi_io_read_ec_hdr(ubi, pnum, ech, 0);
 | 
						|
-	if (err < 0)
 | 
						|
-		return err;
 | 
						|
+	if (!ai->eof_found) {
 | 
						|
+		err = ubi_io_read_ec_hdr(ubi, pnum, ech, 0);
 | 
						|
+		if (err < 0)
 | 
						|
+			return err;
 | 
						|
+
 | 
						|
+		if (ec_hdr_has_eof(ech)) {
 | 
						|
+			pr_notice("UBI: EOF marker found, PEBs from %d will be erased\n",
 | 
						|
+				pnum);
 | 
						|
+			ai->eof_found = true;
 | 
						|
+		}
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	if (ai->eof_found)
 | 
						|
+		err = UBI_IO_FF_BITFLIPS;
 | 
						|
+
 | 
						|
 	switch (err) {
 | 
						|
 	case 0:
 | 
						|
 		break;
 | 
						|
--- a/drivers/mtd/ubi/ubi.h
 | 
						|
+++ b/drivers/mtd/ubi/ubi.h
 | 
						|
@@ -779,6 +779,7 @@ struct ubi_attach_info {
 | 
						|
 	int mean_ec;
 | 
						|
 	uint64_t ec_sum;
 | 
						|
 	int ec_count;
 | 
						|
+	bool eof_found;
 | 
						|
 	struct kmem_cache *aeb_slab_cache;
 | 
						|
 	struct ubi_ec_hdr *ech;
 | 
						|
 	struct ubi_vid_io_buf *vidb;
 |