[PATCH 1/1] staging: unisys: small parser.c bug fix

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Replaced "cleanups" in the struct parser_init_guts with err_rgn,
err_ctx, and out_rgn. The purpose is to remove redundant code and
have proper error handling

Signed-off-by: Jeffrey Brown <Jeffrey.Brown@xxxxxxxxxx>
---
 drivers/staging/unisys/visorchipset/parser.c |   43 +++++++++++--------------
 1 files changed, 19 insertions(+), 24 deletions(-)

diff --git a/drivers/staging/unisys/visorchipset/parser.c b/drivers/staging/unisys/visorchipset/parser.c
index 5f6a7b2..2897125 100644
--- a/drivers/staging/unisys/visorchipset/parser.c
+++ b/drivers/staging/unisys/visorchipset/parser.c
@@ -64,8 +64,6 @@ parser_init_guts(u64 addr, u32 bytes, BOOL is_local,
 		       MAX_CONTROLVM_PAYLOAD_BYTES);
 		if (try_again)
 			*try_again = TRUE;
-		rc = NULL;
-		goto cleanups;
 	}
 	ctx = kzalloc(allocbytes, GFP_KERNEL|__GFP_NORETRY);
 	if (ctx == NULL) {
@@ -74,7 +72,7 @@ parser_init_guts(u64 addr, u32 bytes, BOOL is_local,
 		if (try_again)
 			*try_again = TRUE;
 		rc = NULL;
-		goto cleanups;
+		return NULL;
 	}
 
 	ctx->allocbytes = allocbytes;
@@ -90,7 +88,6 @@ parser_init_guts(u64 addr, u32 bytes, BOOL is_local,
 			       __func__,
 			       (unsigned long long)addr, (ulong)bytes);
 			rc = NULL;
-			goto cleanups;
 		}
 		p = __va((ulong)(addr));
 		memcpy(ctx->data, p, bytes);
@@ -98,17 +95,17 @@ parser_init_guts(u64 addr, u32 bytes, BOOL is_local,
 		rgn = visor_memregion_create(addr, bytes);
 		if (!rgn) {
 			rc = NULL;
-			goto cleanups;
+			goto err_ctx;
 		}
 		if (visor_memregion_read(rgn, 0, ctx->data, bytes) < 0) {
 			rc = NULL;
-			goto cleanups;
+			goto err_ctx;
 		}
 	}
 	if (!has_standard_payload_header) {
 		ctx->byte_stream = TRUE;
 		rc = ctx;
-		goto cleanups;
+		goto err_rgn;
 	}
 	phdr = (struct spar_controlvm_parameters_header *)(ctx->data);
 	if (phdr->total_length != bytes) {
@@ -116,7 +113,7 @@ parser_init_guts(u64 addr, u32 bytes, BOOL is_local,
 		       __func__,
 		       (ulong)(phdr->total_length), (ulong)(bytes));
 		rc = NULL;
-		goto cleanups;
+		goto out_rgn;
 	}
 	if (phdr->total_length < phdr->header_length) {
 		ERRDRV("%s - total length < header length (%lu < %lu)",
@@ -124,7 +121,7 @@ parser_init_guts(u64 addr, u32 bytes, BOOL is_local,
 		       (ulong)(phdr->total_length),
 		       (ulong)(phdr->header_length));
 		rc = NULL;
-		goto cleanups;
+		goto err_rgn;
 	}
 	if (phdr->header_length <
 	    sizeof(struct spar_controlvm_parameters_header)) {
@@ -134,24 +131,22 @@ parser_init_guts(u64 addr, u32 bytes, BOOL is_local,
 		       (ulong)(sizeof(
 				struct spar_controlvm_parameters_header)));
 		rc = NULL;
-		goto cleanups;
+		goto err_rgn;
 	}
 
-	rc = ctx;
-cleanups:
-	if (rgn) {
+out_rgn:
+	if (rgn)
 		visor_memregion_destroy(rgn);
-		rgn = NULL;
-	}
-	if (rc) {
-		controlvm_payload_bytes_buffered += ctx->param_bytes;
-	} else {
-		if (ctx) {
-			parser_done(ctx);
-			ctx = NULL;
-		}
-	}
-	return rc;
+
+	return ctx;
+
+err_rgn:
+	if (rgn)
+		visor_memregion_destroy(rgn);
+
+err_ctx:
+	kfree(ctx);
+	return NULL;
 }
 
 struct parser_context_tag *
-- 
1.7.1

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel




[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux