From: Mathieu Desnoyers <compudj@krystal.dyndns.org>
To: Greg Kroah-Hartman <greg@kroah.com>
Cc: ltt-dev@shafik.org, linux-kernel@vger.kernel.org
Subject: Debugfs : inotify, multiple calls to debugfs_create_file, remove
Date: Mon, 20 Nov 2006 13:18:38 -0500 [thread overview]
Message-ID: <20061120181838.GB7328@Krystal> (raw)
Hi Greg,
I just had to add inotify support to my LTTng consumer so I could inform it
of the presence of new CPUs (for CPU hotplug). I noticed that no
notification event was being sent when a debugfs file is created from within
the kernel through debugfs_create. There are probably other notifications
missing, but here is the patch adding the one I care about. Should it be added
in libfs or in debugfs ?
A second problem I noticed is when a caller calls debugfs_create_file more than
once : the result is that the debugfs_remove will fail. I guess the second call
to debugfs_create_file increments the reference counts (there is not fix for
this issue in my patch).
Third problem : a failing call to debugfs_remove keeps the filesystem pinned.
(fixed by calling simple_release_fs in the error path).
The third problem : When a process is in a directory, the call to simple_rmdir
will fail. Debugfs does not use its return value. I noticed that calling
simple_unlink on a directory when simple_rmdir fails removes the directory that
would otherwise be left there. I am not sure if this approach is correct
through.
This patch is against Linux 2.6.18.
Regards,
Mathieu
diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
index e8ae304..d88203f 100644
--- a/fs/debugfs/inode.c
+++ b/fs/debugfs/inode.c
@@ -23,6 +23,7 @@ #include <linux/pagemap.h>
#include <linux/init.h>
#include <linux/namei.h>
#include <linux/debugfs.h>
+#include <linux/fsnotify.h>
#define DEBUGFS_MAGIC 0x64626720
@@ -156,7 +157,8 @@ static int debugfs_create_by_name(const
} else
error = PTR_ERR(dentry);
mutex_unlock(&parent->d_inode->i_mutex);
-
+ if (!error)
+ fsnotify_create(parent->d_inode, *dentry);
return error;
}
@@ -204,7 +206,10 @@ struct dentry *debugfs_create_file(const
error = debugfs_create_by_name(name, mode, parent, &dentry);
if (error) {
+ /* FIXME : a failing call to debugfs_create_file leaves a
+ * stalled entry after a remove. */
dentry = NULL;
+ simple_release_fs(&debugfs_mount, &debugfs_mount_count);
goto exit;
}
@@ -265,6 +270,7 @@ EXPORT_SYMBOL_GPL(debugfs_create_dir);
void debugfs_remove(struct dentry *dentry)
{
struct dentry *parent;
+ int ret = 0;
if (!dentry)
return;
@@ -277,8 +283,12 @@ void debugfs_remove(struct dentry *dentr
if (debugfs_positive(dentry)) {
if (dentry->d_inode) {
if (S_ISDIR(dentry->d_inode->i_mode))
- simple_rmdir(parent->d_inode, dentry);
+ ret = simple_rmdir(parent->d_inode, dentry);
else
+ ret = simple_unlink(parent->d_inode, dentry);
+ /* simple_rmdir failed because the directory
+ * is used. Force deletion. */
+ if (ret)
simple_unlink(parent->d_inode, dentry);
dput(dentry);
}
OpenPGP public key: http://krystal.dyndns.org:8080/key/compudj.gpg
Key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
next reply other threads:[~2006-11-20 18:18 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-20 18:18 Mathieu Desnoyers [this message]
2006-11-22 5:27 ` Debugfs : inotify, multiple calls to debugfs_create_file, remove Greg KH
2006-11-23 7:47 ` Mathieu Desnoyers
2006-11-23 7:51 ` [PATCH 1/5] DebugFS : inotify create/mkdir support Mathieu Desnoyers
2006-11-24 8:13 ` Greg KH
2006-11-24 13:39 ` Mathieu Desnoyers
2006-11-24 18:45 ` [PATCH 1/5] DebugFS : inotify create/mkdir support, 2.6.19-rc6 Mathieu Desnoyers
2006-11-23 7:52 ` [PATCH 2/5] DebugFS : coding style fixes Mathieu Desnoyers
2006-11-24 18:46 ` [PATCH 2/5] DebugFS : coding style fixes, 2.6.19-rc6 Mathieu Desnoyers
2006-11-23 8:00 ` [PATCH 3/5] DebugFS : file/directory creation error handling, 2.6.18 Mathieu Desnoyers
2006-11-24 18:48 ` [PATCH 3/5] DebugFS : file/directory creation error handling, 2.6.19-rc6 Mathieu Desnoyers
2006-11-23 8:12 ` [PATCH 4/5] DebugFS : file/directory creation error handling, 2.6.18 Mathieu Desnoyers
2006-11-24 18:50 ` [PATCH 4/5] DebugFS : file/directory creation error handling, 2.6.19-rc6 Mathieu Desnoyers
2006-11-23 8:22 ` [PATCH 5/5] libfs : file/directory removal fix, 2.6.18 Mathieu Desnoyers
2006-11-23 8:50 ` Al Viro
2006-11-23 9:01 ` Al Viro
2006-11-23 17:28 ` Mathieu Desnoyers
2006-11-23 17:25 ` Mathieu Desnoyers
2006-11-23 17:54 ` [PATCH 5/5] DebugFS " Mathieu Desnoyers
2006-11-24 18:51 ` [PATCH 5/5] DebugFS : file/directory removal fix, 2.6.19-rc6 Mathieu Desnoyers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061120181838.GB7328@Krystal \
--to=compudj@krystal.dyndns.org \
--cc=greg@kroah.com \
--cc=linux-kernel@vger.kernel.org \
--cc=ltt-dev@shafik.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox