Re: [PATCH] ppc4xx: ocm: fix errnous "failed to create file" errors
From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2018-11-01 11:47:08
Subsystem:
linux for powerpc (32-bit and 64-bit), the rest · Maintainers:
Madhavan Srinivasan, Linus Torvalds
Hi Christian, Christian Lamparter [off-list ref] writes:
quoted hunk ↗ jump to hunk
Previously, the kernel would complain: | debugfs ppc4xx ocm: failed to create file But the "info" file was still created and working. This is because debugfs_create_file() returns a pointer to a struct *dentry on success or -ENODEV when debugfs isn't available. This patch fixes both the debugfs_create_dir() and debugfs_create_file() check, so this will work as expected. Signed-off-by: Christian Lamparter <redacted>diff --git a/arch/powerpc/platforms/4xx/ocm.c b/arch/powerpc/platforms/4xx/ocm.c index 69d9f60d9fe5..e616c8636303 100644 --- a/arch/powerpc/platforms/4xx/ocm.c +++ b/arch/powerpc/platforms/4xx/ocm.c@@ -293,13 +293,14 @@ static int ocm_debugfs_init(void) { struct dentry *junk; - junk = debugfs_create_dir("ppc4xx_ocm", 0); - if (!junk) { + junk = debugfs_create_dir("ppc4xx_ocm", NULL); + if (IS_ERR_OR_NULL(junk)) { printk(KERN_ALERT "debugfs ppc4xx ocm: failed to create dir\n"); return -1; } - if (debugfs_create_file("info", 0644, junk, NULL, &ocm_debugfs_fops)) { + if (IS_ERR_OR_NULL(debugfs_create_file("info", 0644, junk, NULL, + &ocm_debugfs_fops))) { printk(KERN_ALERT "debugfs ppc4xx ocm: failed to create file\n"); return -1; }
Typically we would just make the whole function not compile when DEBUG_FS is disabled, eg:
diff --git a/arch/powerpc/platforms/4xx/ocm.c b/arch/powerpc/platforms/4xx/ocm.c
index f5bbd4563342..c5293a28545c 100644
--- a/arch/powerpc/platforms/4xx/ocm.c
+++ b/arch/powerpc/platforms/4xx/ocm.c@@ -286,6 +286,7 @@ static const struct file_operations ocm_debugfs_fops = { .release = single_release, }; +#ifdef CONFIG_DEBUG_FS static int ocm_debugfs_init(void) { struct dentry *junk;
@@ -303,6 +304,9 @@ static int ocm_debugfs_init(void) return 0; } +#else +static int ocm_debugfs_init(void) { return 0; } +#endif void *ppc4xx_ocm_alloc(phys_addr_t *phys, int size, int align, int flags, const char *owner)
I don't really mind, but I think the #ifdef approach is simpler to reason about. cheers