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 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html