Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+20 -5
+20 -5
fs/debugfs/inode.c
··· 2 2 /* 3 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 6 * Copyright (C) 2004 IBM Inc. 7 + * Copyright (C) 2019 Linux Foundation <gregkh@linuxfoundation.org> 7 8 * 8 9 * debugfs is for people to use instead of /proc or /sys. 9 10 * See ./Documentation/core-api/kernel-api.rst for more details. ··· 293 292 294 293 error = simple_pin_fs(&debug_fs_type, &debugfs_mount, 295 294 &debugfs_mount_count); 296 - if (error) 295 + if (error) { 296 + pr_err("Unable to pin filesystem for file '%s'\n", name); 297 297 return ERR_PTR(error); 298 + } 298 299 299 300 /* If the parent is not specified, we create it in the root. 300 301 * We need the root dentry to do this, which is in the super ··· 310 307 dentry = lookup_one_len(name, parent, strlen(name)); 311 308 if (!IS_ERR(dentry) && d_really_is_positive(dentry)) { 312 309 dput(dentry); 310 + pr_err("File '%s' already present!\n", name); 313 311 dentry = ERR_PTR(-EEXIST); 314 312 } 315 313 ··· 353 349 return dentry; 354 350 355 351 inode = debugfs_get_inode(dentry->d_sb); 356 - if (unlikely(!inode)) 352 + if (unlikely(!inode)) { 353 + pr_err("out of free dentries, can not create file '%s'\n", 354 + name); 357 355 return failed_creating(dentry); 356 + } 358 357 359 358 inode->i_mode = mode; 360 359 inode->i_private = data; ··· 518 511 return dentry; 519 512 520 513 inode = debugfs_get_inode(dentry->d_sb); 521 - if (unlikely(!inode)) 514 + if (unlikely(!inode)) { 515 + pr_err("out of free dentries, can not create directory '%s'\n", 516 + name); 522 517 return failed_creating(dentry); 518 + } 523 519 524 520 inode->i_mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO; 525 521 inode->i_op = &simple_dir_inode_operations; ··· 560 550 return dentry; 561 551 562 552 inode = debugfs_get_inode(dentry->d_sb); 563 - if (unlikely(!inode)) 553 + if (unlikely(!inode)) { 554 + pr_err("out of free dentries, can not create automount '%s'\n", 555 + name); 564 556 return failed_creating(dentry); 557 + } 565 558 566 559 make_empty_dir_inode(inode); 567 560 inode->i_flags |= S_AUTOMOUNT; ··· 619 606 620 607 inode = debugfs_get_inode(dentry->d_sb); 621 608 if (unlikely(!inode)) { 609 + pr_err("out of free dentries, can not create symlink '%s'\n", 610 + name); 622 611 kfree(link); 623 612 return failed_creating(dentry); 624 613 }