OSDN Git Service

fs/ocfs2/cluster/netdebug.c: use seq_open_private() not seq_open()
authorRob Jones <rob.jones@codethink.co.uk>
Thu, 9 Oct 2014 22:25:07 +0000 (15:25 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 10 Oct 2014 02:25:47 +0000 (22:25 -0400)
Reduce boilerplate code by using seq_open_private() instead of seq_open()

Note that the code in and using sc_common_open() has been quite
extensively changed.  Not least because there was a latent memory leak in
the code as was: if sc_common_open() failed, the previously allocated
buffer was not freed.

Signed-off-by: Rob Jones <rob.jones@codethink.co.uk>
Cc: Joel Becker <jlbec@evilplan.org>
Cc: Mark Fasheh <mfasheh@suse.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/ocfs2/cluster/netdebug.c

index 73ba819..27d1242 100644 (file)
@@ -185,29 +185,13 @@ static const struct seq_operations nst_seq_ops = {
 static int nst_fop_open(struct inode *inode, struct file *file)
 {
        struct o2net_send_tracking *dummy_nst;
-       struct seq_file *seq;
-       int ret;
 
-       dummy_nst = kmalloc(sizeof(struct o2net_send_tracking), GFP_KERNEL);
-       if (dummy_nst == NULL) {
-               ret = -ENOMEM;
-               goto out;
-       }
-       dummy_nst->st_task = NULL;
-
-       ret = seq_open(file, &nst_seq_ops);
-       if (ret)
-               goto out;
-
-       seq = file->private_data;
-       seq->private = dummy_nst;
+       dummy_nst = __seq_open_private(file, &nst_seq_ops, sizeof(*dummy_nst));
+       if (!dummy_nst)
+               return -ENOMEM;
        o2net_debug_add_nst(dummy_nst);
 
-       dummy_nst = NULL;
-
-out:
-       kfree(dummy_nst);
-       return ret;
+       return 0;
 }
 
 static int nst_fop_release(struct inode *inode, struct file *file)
@@ -412,33 +396,27 @@ static const struct seq_operations sc_seq_ops = {
        .show = sc_seq_show,
 };
 
-static int sc_common_open(struct file *file, struct o2net_sock_debug *sd)
+static int sc_common_open(struct file *file, int ctxt)
 {
+       struct o2net_sock_debug *sd;
        struct o2net_sock_container *dummy_sc;
-       struct seq_file *seq;
-       int ret;
 
-       dummy_sc = kmalloc(sizeof(struct o2net_sock_container), GFP_KERNEL);
-       if (dummy_sc == NULL) {
-               ret = -ENOMEM;
-               goto out;
-       }
-       dummy_sc->sc_page = NULL;
+       dummy_sc = kzalloc(sizeof(*dummy_sc), GFP_KERNEL);
+       if (!dummy_sc)
+               return -ENOMEM;
 
-       ret = seq_open(file, &sc_seq_ops);
-       if (ret)
-               goto out;
+       sd = __seq_open_private(file, &sc_seq_ops, sizeof(*sd));
+       if (!sd) {
+               kfree(dummy_sc);
+               return -ENOMEM;
+       }
 
-       seq = file->private_data;
-       seq->private = sd;
+       sd->dbg_ctxt = ctxt;
        sd->dbg_sock = dummy_sc;
-       o2net_debug_add_sc(dummy_sc);
 
-       dummy_sc = NULL;
+       o2net_debug_add_sc(dummy_sc);
 
-out:
-       kfree(dummy_sc);
-       return ret;
+       return 0;
 }
 
 static int sc_fop_release(struct inode *inode, struct file *file)
@@ -453,16 +431,7 @@ static int sc_fop_release(struct inode *inode, struct file *file)
 
 static int stats_fop_open(struct inode *inode, struct file *file)
 {
-       struct o2net_sock_debug *sd;
-
-       sd = kmalloc(sizeof(struct o2net_sock_debug), GFP_KERNEL);
-       if (sd == NULL)
-               return -ENOMEM;
-
-       sd->dbg_ctxt = SHOW_SOCK_STATS;
-       sd->dbg_sock = NULL;
-
-       return sc_common_open(file, sd);
+       return sc_common_open(file, SHOW_SOCK_STATS);
 }
 
 static const struct file_operations stats_seq_fops = {
@@ -474,16 +443,7 @@ static const struct file_operations stats_seq_fops = {
 
 static int sc_fop_open(struct inode *inode, struct file *file)
 {
-       struct o2net_sock_debug *sd;
-
-       sd = kmalloc(sizeof(struct o2net_sock_debug), GFP_KERNEL);
-       if (sd == NULL)
-               return -ENOMEM;
-
-       sd->dbg_ctxt = SHOW_SOCK_CONTAINERS;
-       sd->dbg_sock = NULL;
-
-       return sc_common_open(file, sd);
+       return sc_common_open(file, SHOW_SOCK_CONTAINERS);
 }
 
 static const struct file_operations sc_seq_fops = {