summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-07-03 03:16:53 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-07-03 10:55:51 -0400
commit43e23b6c0b0151e308acbd6530bb80e2d2e53161 (patch)
tree0a075e6ff4dfd069c047f55d47c0e691cfacdfea
parentfb59b7824da884e042f44dad9c713f221ded93c9 (diff)
debugfs: log errors when something goes wrong
As it is not recommended that debugfs calls be checked, it was pointed out that major errors should still be logged somewhere so that developers and users have a chance to figure out what went wrong. To help with this, error logging has been added to the debugfs core so that it is not needed to be present in every individual file that calls debugfs. Reported-by: Mark Brown <broonie@kernel.org> Reported-by: Takashi Iwai <tiwai@suse.de> Reviewed-by: Mark Brown <broonie@kernel.org> Reviewed-by: Takashi Iwai <tiwai@suse.de> Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Link: https://lore.kernel.org/r/20190703071653.2799-2-gregkh@linuxfoundation.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--fs/debugfs/inode.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
index acef14ad53db..c3638ac81cb6 100644
--- a/fs/debugfs/inode.c
+++ b/fs/debugfs/inode.c
@@ -2,8 +2,9 @@
2/* 2/*
3 * inode.c - part of debugfs, a tiny little debug file system 3 * inode.c - part of debugfs, a tiny little debug file system
4 * 4 *
5 * Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com> 5 * Copyright (C) 2004,2019 Greg Kroah-Hartman <greg@kroah.com>
6 * Copyright (C) 2004 IBM Inc. 6 * Copyright (C) 2004 IBM Inc.
7 * Copyright (C) 2019 Linux Foundation <gregkh@linuxfoundation.org>
7 * 8 *
8 * debugfs is for people to use instead of /proc or /sys. 9 * debugfs is for people to use instead of /proc or /sys.
9 * See ./Documentation/core-api/kernel-api.rst for more details. 10 * See ./Documentation/core-api/kernel-api.rst for more details.
@@ -292,8 +293,10 @@ static struct dentry *start_creating(const char *name, struct dentry *parent)
292 293
293 error = simple_pin_fs(&debug_fs_type, &debugfs_mount, 294 error = simple_pin_fs(&debug_fs_type, &debugfs_mount,
294 &debugfs_mount_count); 295 &debugfs_mount_count);
295 if (error) 296 if (error) {
297 pr_err("Unable to pin filesystem for file '%s'\n", name);
296 return ERR_PTR(error); 298 return ERR_PTR(error);
299 }
297 300
298 /* If the parent is not specified, we create it in the root. 301 /* If the parent is not specified, we create it in the root.
299 * We need the root dentry to do this, which is in the super 302 * We need the root dentry to do this, which is in the super
@@ -307,6 +310,7 @@ static struct dentry *start_creating(const char *name, struct dentry *parent)
307 dentry = lookup_one_len(name, parent, strlen(name)); 310 dentry = lookup_one_len(name, parent, strlen(name));
308 if (!IS_ERR(dentry) && d_really_is_positive(dentry)) { 311 if (!IS_ERR(dentry) && d_really_is_positive(dentry)) {
309 dput(dentry); 312 dput(dentry);
313 pr_err("File '%s' already present!\n", name);
310 dentry = ERR_PTR(-EEXIST); 314 dentry = ERR_PTR(-EEXIST);
311 } 315 }
312 316
@@ -349,8 +353,11 @@ static struct dentry *__debugfs_create_file(const char *name, umode_t mode,
349 return dentry; 353 return dentry;
350 354
351 inode = debugfs_get_inode(dentry->d_sb); 355 inode = debugfs_get_inode(dentry->d_sb);
352 if (unlikely(!inode)) 356 if (unlikely(!inode)) {
357 pr_err("out of free dentries, can not create file '%s'\n",
358 name);
353 return failed_creating(dentry); 359 return failed_creating(dentry);
360 }
354 361
355 inode->i_mode = mode; 362 inode->i_mode = mode;
356 inode->i_private = data; 363 inode->i_private = data;
@@ -511,8 +518,11 @@ struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
511 return dentry; 518 return dentry;
512 519
513 inode = debugfs_get_inode(dentry->d_sb); 520 inode = debugfs_get_inode(dentry->d_sb);
514 if (unlikely(!inode)) 521 if (unlikely(!inode)) {
522 pr_err("out of free dentries, can not create directory '%s'\n",
523 name);
515 return failed_creating(dentry); 524 return failed_creating(dentry);
525 }
516 526
517 inode->i_mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO; 527 inode->i_mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO;
518 inode->i_op = &simple_dir_inode_operations; 528 inode->i_op = &simple_dir_inode_operations;
@@ -550,8 +560,11 @@ struct dentry *debugfs_create_automount(const char *name,
550 return dentry; 560 return dentry;
551 561
552 inode = debugfs_get_inode(dentry->d_sb); 562 inode = debugfs_get_inode(dentry->d_sb);
553 if (unlikely(!inode)) 563 if (unlikely(!inode)) {
564 pr_err("out of free dentries, can not create automount '%s'\n",
565 name);
554 return failed_creating(dentry); 566 return failed_creating(dentry);
567 }
555 568
556 make_empty_dir_inode(inode); 569 make_empty_dir_inode(inode);
557 inode->i_flags |= S_AUTOMOUNT; 570 inode->i_flags |= S_AUTOMOUNT;
@@ -606,6 +619,8 @@ struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
606 619
607 inode = debugfs_get_inode(dentry->d_sb); 620 inode = debugfs_get_inode(dentry->d_sb);
608 if (unlikely(!inode)) { 621 if (unlikely(!inode)) {
622 pr_err("out of free dentries, can not create symlink '%s'\n",
623 name);
609 kfree(link); 624 kfree(link);
610 return failed_creating(dentry); 625 return failed_creating(dentry);
611 } 626 }