This is a re-submission of the patch I sent about a month ago. While working on my code I realized that d_drop() might race against __d_lookup(). __d_drop() (which is called by d_drop() after acquiring the dcache_lock) is accessing dentry->d_flags to set the DCACHE_UNHASHED flag. This shouldn't be done without holding dentry->d_lock, like stated in dcache.h: struct dentry { ... unsigned int d_flags; /* protected by d_lock */ ... }; Therefore d_drop() must acquire the dentry->d_lock. Likewise every use of __d_drop() must acquire that lock. This patch fixes d_drop() and every grep'able __d_drop() use. This patch is against today's http://linux.bkbits.net/linux-2.5. Comments please, Jan