Messages in this thread | | | Date | Wed, 31 Dec 2003 12:49:07 -0800 | From | Javier Fernandez-Ivern <> | Subject | Re: File change notification |
| |
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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |