[Crash-utility] [PATCH 1/5] diskdump, zram: cleanup try_zram_decompress()

HATAYAMA Daisuke d.hatayama at fujitsu.com
Sun Oct 11 01:34:34 UTC 2020


This clean up makes later commits a bit readable.

Signed-off-by: HATAYAMA Daisuke <d.hatayama at fujitsu.com>
---
 diskdump.c | 145 ++++++++++++++++++++++++++++++++-----------------------------
 1 file changed, 75 insertions(+), 70 deletions(-)

diff --git a/diskdump.c b/diskdump.c
index 63a08a1..dcc7142 100644
--- a/diskdump.c
+++ b/diskdump.c
@@ -2743,85 +2743,90 @@ try_zram_decompress(ulonglong pte_val, unsigned char *buf, ulong len, ulonglong
 			sizeof(void *), "block_device_bd_disk", FAULT_ON_ERROR);
 	readmem(bd_disk + OFFSET(gendisk_disk_name), KVADDR, name,
 			strlen("zram"), "gendisk_disk_name", FAULT_ON_ERROR);
-	if (!strncmp(name, "zram", strlen("zram"))) {
+
+	if (strncmp(name, "zram", strlen("zram"))) {
 		if (CRASHDEBUG(2))
-			error(WARNING, "this page has swapped to zram\n");
-
-		readmem(bd_disk + OFFSET(gendisk_private_data), KVADDR, &zram,
-				sizeof(void *), "gendisk_private_data", FAULT_ON_ERROR);
-
-		readmem(zram + OFFSET(zram_compressor), KVADDR, name,
-			sizeof(name), "zram compressor", FAULT_ON_ERROR);
-		if (STREQ(name, "lzo")) {
-			if (!(dd->flags & LZO_SUPPORTED)) {
-				if (lzo_init() == LZO_E_OK)
-					dd->flags |= LZO_SUPPORTED;
-				else
-					return 0;
-			}
-			decompressor = (void *)lzo1x_decompress_safe;
-		} else {//todo,support more compressor
-			error(WARNING, "only the lzo compressor is supported\n");
-			return 0;
-		}
+			error(WARNING,
+			      "this page has been swapped to %s\n",
+			      name);
+		return 0;
+	}
 
-		if (THIS_KERNEL_VERSION >= LINUX(2, 6, 0)) {
-			swp_offset = (ulonglong)__swp_offset(pte_val);
-		} else {
-			swp_offset = (ulonglong)SWP_OFFSET(pte_val);
-		}
+	if (CRASHDEBUG(2))
+		error(WARNING, "this page has swapped to zram\n");
 
-		zram_buf = (unsigned char *)GETBUF(PAGESIZE());
-		/*lookup page from swap cache*/
-		obj_addr = lookup_swap_cache(pte_val, zram_buf);
-		if (obj_addr != NULL) {
-			memcpy(buf, obj_addr + off, len);
-			goto out;
-		}
+	readmem(bd_disk + OFFSET(gendisk_private_data), KVADDR, &zram,
+		sizeof(void *), "gendisk_private_data", FAULT_ON_ERROR);
 
-		sector = swp_offset << (PAGESHIFT() - 9);
-		index = sector >> SECTORS_PER_PAGE_SHIFT;
-		readmem(zram, KVADDR, &zram_table_entry,
-				sizeof(void *), "zram_table_entry", FAULT_ON_ERROR);
-		zram_table_entry += (index * SIZE(zram_table_entry));
-		readmem(zram_table_entry, KVADDR, &entry,
-				sizeof(void *), "entry of table", FAULT_ON_ERROR);
-		readmem(zram_table_entry + OFFSET(zram_table_flag), KVADDR, &flags,
-				sizeof(void *), "zram_table_flag", FAULT_ON_ERROR);
-		if (!entry || (flags & ZRAM_FLAG_SAME_BIT)) {
-			memset(buf, entry, len);
-			goto out;
-		}
-		size = flags & (ZRAM_FLAG_SHIFT -1);
-		if (size == 0) {
-			len = 0;
-			goto out;
+	readmem(zram + OFFSET(zram_compressor), KVADDR, name,
+		sizeof(name), "zram compressor", FAULT_ON_ERROR);
+	if (STREQ(name, "lzo")) {
+		if (!(dd->flags & LZO_SUPPORTED)) {
+			if (lzo_init() == LZO_E_OK)
+				dd->flags |= LZO_SUPPORTED;
+			else
+				return 0;
 		}
+		decompressor = (void *)lzo1x_decompress_safe;
+	} else {//todo,support more compressor
+		error(WARNING, "only the lzo compressor is supported\n");
+		return 0;
+	}
 
-		readmem(zram + OFFSET(zram_mempoll), KVADDR, &zram,
-				sizeof(void *), "zram_mempoll", FAULT_ON_ERROR);
+	if (THIS_KERNEL_VERSION >= LINUX(2, 6, 0)) {
+		swp_offset = (ulonglong)__swp_offset(pte_val);
+	} else {
+		swp_offset = (ulonglong)SWP_OFFSET(pte_val);
+	}
 
-		obj_addr = zram_object_addr(zram, entry, zram_buf);
-		if (obj_addr == NULL) {
-			len = 0;
-			goto out;
-		}
+	zram_buf = (unsigned char *)GETBUF(PAGESIZE());
+	/*lookup page from swap cache*/
+	obj_addr = lookup_swap_cache(pte_val, zram_buf);
+	if (obj_addr != NULL) {
+		memcpy(buf, obj_addr + off, len);
+		goto out;
+	}
 
-		if (size == PAGESIZE()) {
-			memcpy(buf, obj_addr + off, len);
-		} else {
-			outbuf = (unsigned char *)GETBUF(PAGESIZE());
-			outsize = PAGESIZE();
-			if (!decompressor(obj_addr, size, outbuf, &outsize, NULL))
-				memcpy(buf, outbuf + off, len);
-			else {
-				error(WARNING, "zram decompress error\n");
-				len = 0;
-			}
-			FREEBUF(outbuf);
-		}
+	sector = swp_offset << (PAGESHIFT() - 9);
+	index = sector >> SECTORS_PER_PAGE_SHIFT;
+	readmem(zram, KVADDR, &zram_table_entry,
+		sizeof(void *), "zram_table_entry", FAULT_ON_ERROR);
+	zram_table_entry += (index * SIZE(zram_table_entry));
+	readmem(zram_table_entry, KVADDR, &entry,
+		sizeof(void *), "entry of table", FAULT_ON_ERROR);
+	readmem(zram_table_entry + OFFSET(zram_table_flag), KVADDR, &flags,
+		sizeof(void *), "zram_table_flag", FAULT_ON_ERROR);
+	if (!entry || (flags & ZRAM_FLAG_SAME_BIT)) {
+		memset(buf, entry, len);
+		goto out;
+	}
+	size = flags & (ZRAM_FLAG_SHIFT -1);
+	if (size == 0) {
+		len = 0;
+		goto out;
+	}
+
+	readmem(zram + OFFSET(zram_mempoll), KVADDR, &zram,
+		sizeof(void *), "zram_mempoll", FAULT_ON_ERROR);
+
+	obj_addr = zram_object_addr(zram, entry, zram_buf);
+	if (obj_addr == NULL) {
+		len = 0;
+		goto out;
+	}
+
+	if (size == PAGESIZE()) {
+		memcpy(buf, obj_addr + off, len);
 	} else {
-		return 0;
+		outbuf = (unsigned char *)GETBUF(PAGESIZE());
+		outsize = PAGESIZE();
+		if (!decompressor(obj_addr, size, outbuf, &outsize, NULL))
+			memcpy(buf, outbuf + off, len);
+		else {
+			error(WARNING, "zram decompress error\n");
+			len = 0;
+		}
+		FREEBUF(outbuf);
 	}
 
 out:
-- 
1.8.3.1




More information about the Crash-utility mailing list