Re: [PATCH -tip v2] locking/pvqspinlock: Robustify init_qspinlock_stat()

2016-04-19 Thread Davidlohr Bueso

+   pr_info("Could not create 'qlockstat' debugfs entries\n");


Please ignore this, I was not meaning to change pr_warn level, this was
simply a stale version. Sending v3 *sigh*.


[PATCH -tip v2] locking/pvqspinlock: Robustify init_qspinlock_stat()

2016-04-19 Thread Davidlohr Bueso

Specifically around the debugfs file creation calls,
I have no idea if they could ever possibly fail, but
this is core code (debug aside) so lets at least
check the return value and inform anything fishy.

Signed-off-by: Davidlohr Bueso 
---
kernel/locking/qspinlock_stat.h | 22 ++
1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/kernel/locking/qspinlock_stat.h b/kernel/locking/qspinlock_stat.h
index 72722334237a..fa0863423a04 100644
--- a/kernel/locking/qspinlock_stat.h
+++ b/kernel/locking/qspinlock_stat.h
@@ -212,10 +212,8 @@ static int __init init_qspinlock_stat(void)
struct dentry *d_qstat = debugfs_create_dir("qlockstat", NULL);
int i;

-   if (!d_qstat) {
-   pr_warn("Could not create 'qlockstat' debugfs directory\n");
-   return 0;
-   }
+   if (!d_qstat)
+   goto out;

/*
 * Create the debugfs files
@@ -225,12 +223,20 @@ static int __init init_qspinlock_stat(void)
 * performance.
 */
for (i = 0; i < qstat_num; i++)
-   debugfs_create_file(qstat_names[i], 0400, d_qstat,
-  (void *)(long)i, &fops_qstat);
+   if (!debugfs_create_file(qstat_names[i], 0400, d_qstat,
+(void *)(long)i, &fops_qstat))
+   goto fail_undo;
+
+   if (!debugfs_create_file(qstat_names[qstat_reset_cnts], 0200, d_qstat,
+(void *)(long)qstat_reset_cnts, &fops_qstat))
+   goto fail_undo;

-   debugfs_create_file(qstat_names[qstat_reset_cnts], 0200, d_qstat,
-  (void *)(long)qstat_reset_cnts, &fops_qstat);
return 0;
+fail_undo:
+   debugfs_remove_recursive(d_qstat);
+out:
+   pr_info("Could not create 'qlockstat' debugfs entries\n");
+   return -ENOMEM;
}
fs_initcall(init_qspinlock_stat);

--
2.8.1