Re: File change notification

From: Javier Fernandez-Ivern
Date: Wed Dec 31 2003 - 16:00:08 EST


Rüdiger Klaehn wrote:

Rudiger, I've been reading your code to try and understand it, and I found one think I'm not so sure about:

+++ develop/fs/dnotify.c 2003-12-31 16:59:36.000000000 +0100
@@ -153,8 +153,9 @@
void dnotify_parent(struct dentry *dentry, unsigned long event)
{
struct dentry *parent;
-
spin_lock(&dentry->d_lock);
+ /* call inotify for this dentry */
+ inotify_dentrychange(dentry,event);

...

+/*
+ * This function should be called when something changes about a dentry, such
+ * as attributes, creating, deleting, renaming etc.
+ */
+void inotify_dentrychange(struct dentry *dentry,unsigned long event)
+{
+ in_info info;
+ struct dentry *parent;
+ memset(&info,0,sizeof(in_info));
+ info.event=event;
+ spin_lock(&dentry->d_lock);

inotify_dentrychange() is called from dnotify_parent() with the dentry->d_lock spinlock held. However, it also tries to attain the spinlock. Wouldn't this deadlock? I thought spinlocks were not recursive.

Please let me know if I'm not understanding this...I'm a locking newbie.

--
Javier Fernandez-Ivern
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/