Messages in this thread | | | From | hooanon05@yahoo ... | Subject | Re: Q: NFSD readdir in linux-2.6.28 | Date | Fri, 20 Mar 2009 00:45:09 +0900 |
| |
Matthew Wilcox: > > I _think_ it's sufficient to make the affected callers of > > lookup_one_len() lock the parent's i_mutex for themselves before calling > > it. I'll take a closer look... > > Should we also add this? ::: > @@ -1244,6 +1244,7 @@ struct dentry *lookup_one_len(const char *name, struct dentry *base, int len) > int err; > struct qstr this; > > + BUG_ON(!mutex_is_locked(&base->d_inode->i_mutex)); > err = __lookup_one_len(name, &this, base, len);
That was how I found this problem actually. :-) I implemented very similar debug code in aufs which is compiled when CONFIG_AUFS_DEBUG is enabled.
(in aufs header files) #ifdef CONFIG_AUFS_DEBUG #define AuDebugOn(a) BUG_ON(a) ::: #endif
/* to debug easier, do not make them inlined functions */ #define MtxMustLock(mtx) AuDebugOn(!mutex_is_locked(mtx)) #define IMustLock(i) MtxMustLock(&(i)->i_mutex)
(in ->lookup of aufs) static struct dentry *aufs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd) { ::: IMustLock(dir);
J. R. Okajima
| |