浏览代码

powerpc/nvram: Fix an incorrect partition merge

When we merge two contiguous partitions whose signatures are marked
NVRAM_SIG_FREE, We need update prev's length and checksum, then write it
to nvram, not cur's. So lets fix this mistake now.

Also use memset instead of strncpy to set the partition's name. It's
more readable if we want to fill up with duplicate chars .

Fixes: fa2b4e54d41f ("powerpc/nvram: Improve partition removal")
Signed-off-by: Pan Xinhui <xinhui.pan@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Pan Xinhui 9 年之前
父节点
当前提交
11b7e154b1
共有 1 个文件被更改,包括 3 次插入3 次删除
  1. 3 3
      arch/powerpc/kernel/nvram_64.c

+ 3 - 3
arch/powerpc/kernel/nvram_64.c

@@ -956,7 +956,7 @@ int __init nvram_remove_partition(const char *name, int sig,
 
 
 		/* Make partition a free partition */
 		/* Make partition a free partition */
 		part->header.signature = NVRAM_SIG_FREE;
 		part->header.signature = NVRAM_SIG_FREE;
-		strncpy(part->header.name, "wwwwwwwwwwww", 12);
+		memset(part->header.name, 'w', 12);
 		part->header.checksum = nvram_checksum(&part->header);
 		part->header.checksum = nvram_checksum(&part->header);
 		rc = nvram_write_header(part);
 		rc = nvram_write_header(part);
 		if (rc <= 0) {
 		if (rc <= 0) {
@@ -974,8 +974,8 @@ int __init nvram_remove_partition(const char *name, int sig,
 		}
 		}
 		if (prev) {
 		if (prev) {
 			prev->header.length += part->header.length;
 			prev->header.length += part->header.length;
-			prev->header.checksum = nvram_checksum(&part->header);
-			rc = nvram_write_header(part);
+			prev->header.checksum = nvram_checksum(&prev->header);
+			rc = nvram_write_header(prev);
 			if (rc <= 0) {
 			if (rc <= 0) {
 				printk(KERN_ERR "nvram_remove_partition: nvram_write failed (%d)\n", rc);
 				printk(KERN_ERR "nvram_remove_partition: nvram_write failed (%d)\n", rc);
 				return rc;
 				return rc;