Messages in this thread | | | From | "Rafael J. Wysocki" <> | Date | Wed, 3 Jul 2019 11:10:44 +0200 | Subject | Re: [PATCH 2/2] debugfs: log errors when something goes wrong |
| |
On Wed, Jul 3, 2019 at 9:17 AM Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > > 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> > Cc: "Rafael J. Wysocki" <rafael@kernel.org> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Generally speaking
Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> --- > fs/debugfs/inode.c | 25 ++++++++++++++++++++----- > 1 file changed, 20 insertions(+), 5 deletions(-) > > diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c > index f04c8475d9a1..7f43c8acfcbf 100644 > --- a/fs/debugfs/inode.c > +++ b/fs/debugfs/inode.c > @@ -2,8 +2,9 @@ > /* > * inode.c - part of debugfs, a tiny little debug file system > * > - * Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com> > + * Copyright (C) 2004,2019 Greg Kroah-Hartman <greg@kroah.com> > * Copyright (C) 2004 IBM Inc. > + * Copyright (C) 2019 Linux Foundation <gregkh@linuxfoundation.org> > * > * debugfs is for people to use instead of /proc or /sys. > * See ./Documentation/core-api/kernel-api.rst for more details. > @@ -294,8 +295,10 @@ static struct dentry *start_creating(const char *name, struct dentry *parent) > > error = simple_pin_fs(&debug_fs_type, &debugfs_mount, > &debugfs_mount_count); > - if (error) > + if (error) { > + pr_err("Unable to pin filesystem for file '%s'\n", name);
But I'm not sure about the log level here. Particularly, why would pr_info() not work?
> return ERR_PTR(error); > + } > > /* If the parent is not specified, we create it in the root. > * We need the root dentry to do this, which is in the super > @@ -309,6 +312,7 @@ static struct dentry *start_creating(const char *name, struct dentry *parent) > dentry = lookup_one_len(name, parent, strlen(name)); > if (!IS_ERR(dentry) && d_really_is_positive(dentry)) { > dput(dentry); > + pr_err("File '%s' already present!\n", name); > dentry = ERR_PTR(-EEXIST); > } > > @@ -351,8 +355,11 @@ static struct dentry *__debugfs_create_file(const char *name, umode_t mode, > return dentry; > > inode = debugfs_get_inode(dentry->d_sb); > - if (unlikely(!inode)) > + if (unlikely(!inode)) { > + pr_err("out of free dentries, can not create file '%s'\n", > + name); > return failed_creating(dentry); > + } > > inode->i_mode = mode; > inode->i_private = data; > @@ -513,8 +520,11 @@ struct dentry *debugfs_create_dir(const char *name, struct dentry *parent) > return dentry; > > inode = debugfs_get_inode(dentry->d_sb); > - if (unlikely(!inode)) > + if (unlikely(!inode)) { > + pr_err("out of free dentries, can not create directory '%s'\n", > + name); > return failed_creating(dentry); > + } > > inode->i_mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO; > inode->i_op = &simple_dir_inode_operations; > @@ -552,8 +562,11 @@ struct dentry *debugfs_create_automount(const char *name, > return dentry; > > inode = debugfs_get_inode(dentry->d_sb); > - if (unlikely(!inode)) > + if (unlikely(!inode)) { > + pr_err("out of free dentries, can not create automount '%s'\n", > + name); > return failed_creating(dentry); > + } > > make_empty_dir_inode(inode); > inode->i_flags |= S_AUTOMOUNT; > @@ -608,6 +621,8 @@ struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent, > > inode = debugfs_get_inode(dentry->d_sb); > if (unlikely(!inode)) { > + pr_err("out of free dentries, can not create symlink '%s'\n", > + name); > kfree(link); > return failed_creating(dentry); > } > -- > 2.22.0 >
| |