staging: unisys: visorchannel: Improved cleanup code
authorTapasweni Pathak <tapaswenipathak@gmail.com>
Sat, 25 Oct 2014 05:16:02 +0000 (10:46 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 28 Oct 2014 07:41:43 +0000 (15:41 +0800)
kfree on NULL pointer is a no-op.

This patch used the following semantic patch to find an instance where NULL
check is present before kfree

// <smpl>
@@ expression E; @@
- if (E != NULL) { kfree(E); }
+ kfree(E);
@@ expression E; @@
- if (E != NULL) { kfree(E); E = NULL; }
+ kfree(E);
+ E = NULL;
// </smpl>

Code is made more simpler by breaking up of sequence of kmallocs and adding
some more exit labels.
Removed unnecessary initialization of buf and fmtbuf to NULL as they are local
variables.

Suggested-by: Arnd Bergmann <arnd@arndb.de>
Suggested-by: Julia Lawall <julia.lawall@lip6.fr>
Signed-off-by: Tapasweni Pathak <tapaswenipathak@gmail.com>
Acked-by: Julia Lawall <julia.lawall@lip6.fr>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/unisys/visorchannel/visorchannel_funcs.c

index c24052b13fd2e0cbf0f2c653c2754ac39978246a..5fbd5ada52e9e104a95981067b7b71eabd2d59b7 100644 (file)
@@ -650,15 +650,17 @@ visorchannel_dump_section(VISORCHANNEL *chan, char *s,
 
        fmtbufsize = 100 * COVQ(len, 16);
        buf = kmalloc(len, GFP_KERNEL|__GFP_NORETRY);
+       if (!buf)
+               return;
        fmtbuf = kmalloc(fmtbufsize, GFP_KERNEL|__GFP_NORETRY);
-       if (buf == NULL || fmtbuf == NULL)
-               goto Away;
+       if (!fmtbuf)
+               goto fmt_failed;
 
        errcode = visorchannel_read(chan, off, buf, len);
        if (errcode < 0) {
                ERRDRV("%s failed to read %s from channel errcode=%d",
                       s, __func__, errcode);
-               goto Away;
+               goto read_failed;
        }
        seq_printf(seq, "channel %s:\n", s);
        tbuf = buf;
@@ -670,14 +672,9 @@ visorchannel_dump_section(VISORCHANNEL *chan, char *s,
                len -= 16;
        }
 
-Away:
-       if (buf != NULL) {
-               kfree(buf);
-               buf = NULL;
-       }
-       if (fmtbuf != NULL) {
-               kfree(fmtbuf);
-               fmtbuf = NULL;
-       }
+read_failed:
+       kfree(fmtbuf);
+fmt_failed:
+       kfree(buf);
 }
 EXPORT_SYMBOL_GPL(visorchannel_dump_section);