summaryrefslogtreecommitdiffstats
path: root/kernel/gcov/fs.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/gcov/fs.c')
-rw-r--r--kernel/gcov/fs.c24
1 files changed, 2 insertions, 22 deletions
diff --git a/kernel/gcov/fs.c b/kernel/gcov/fs.c
index 6e40ff6be083..e5eb5ea7ea59 100644
--- a/kernel/gcov/fs.c
+++ b/kernel/gcov/fs.c
@@ -64,7 +64,6 @@ struct gcov_node {
64static const char objtree[] = OBJTREE; 64static const char objtree[] = OBJTREE;
65static const char srctree[] = SRCTREE; 65static const char srctree[] = SRCTREE;
66static struct gcov_node root_node; 66static struct gcov_node root_node;
67static struct dentry *reset_dentry;
68static LIST_HEAD(all_head); 67static LIST_HEAD(all_head);
69static DEFINE_MUTEX(node_lock); 68static DEFINE_MUTEX(node_lock);
70 69
@@ -387,8 +386,6 @@ static void add_links(struct gcov_node *node, struct dentry *parent)
387 goto out_err; 386 goto out_err;
388 node->links[i] = debugfs_create_symlink(deskew(basename), 387 node->links[i] = debugfs_create_symlink(deskew(basename),
389 parent, target); 388 parent, target);
390 if (!node->links[i])
391 goto out_err;
392 kfree(target); 389 kfree(target);
393 } 390 }
394 391
@@ -450,11 +447,6 @@ static struct gcov_node *new_node(struct gcov_node *parent,
450 parent->dentry, node, &gcov_data_fops); 447 parent->dentry, node, &gcov_data_fops);
451 } else 448 } else
452 node->dentry = debugfs_create_dir(node->name, parent->dentry); 449 node->dentry = debugfs_create_dir(node->name, parent->dentry);
453 if (!node->dentry) {
454 pr_warn("could not create file\n");
455 kfree(node);
456 return NULL;
457 }
458 if (info) 450 if (info)
459 add_links(node, parent->dentry); 451 add_links(node, parent->dentry);
460 list_add(&node->list, &parent->children); 452 list_add(&node->list, &parent->children);
@@ -761,32 +753,20 @@ void gcov_event(enum gcov_action action, struct gcov_info *info)
761/* Create debugfs entries. */ 753/* Create debugfs entries. */
762static __init int gcov_fs_init(void) 754static __init int gcov_fs_init(void)
763{ 755{
764 int rc = -EIO;
765
766 init_node(&root_node, NULL, NULL, NULL); 756 init_node(&root_node, NULL, NULL, NULL);
767 /* 757 /*
768 * /sys/kernel/debug/gcov will be parent for the reset control file 758 * /sys/kernel/debug/gcov will be parent for the reset control file
769 * and all profiling files. 759 * and all profiling files.
770 */ 760 */
771 root_node.dentry = debugfs_create_dir("gcov", NULL); 761 root_node.dentry = debugfs_create_dir("gcov", NULL);
772 if (!root_node.dentry)
773 goto err_remove;
774 /* 762 /*
775 * Create reset file which resets all profiling counts when written 763 * Create reset file which resets all profiling counts when written
776 * to. 764 * to.
777 */ 765 */
778 reset_dentry = debugfs_create_file("reset", 0600, root_node.dentry, 766 debugfs_create_file("reset", 0600, root_node.dentry, NULL,
779 NULL, &gcov_reset_fops); 767 &gcov_reset_fops);
780 if (!reset_dentry)
781 goto err_remove;
782 /* Replay previous events to get our fs hierarchy up-to-date. */ 768 /* Replay previous events to get our fs hierarchy up-to-date. */
783 gcov_enable_events(); 769 gcov_enable_events();
784 return 0; 770 return 0;
785
786err_remove:
787 pr_err("init failed\n");
788 debugfs_remove(root_node.dentry);
789
790 return rc;
791} 771}
792device_initcall(gcov_fs_init); 772device_initcall(gcov_fs_init);