Messages in this thread | | | Subject | Re: SLUB defrag pull request? | From | Miklos Szeredi <> | Date | Mon, 13 Oct 2008 15:59:00 +0200 |
| |
On Mon, 13 Oct 2008, Nick Piggin wrote: > In many cases, yes it seems to. And some of the approaches even if > they work now seem like they *might* cause problematic constraints > in the design... Have Al and Christoph reviewed the dentry and inode > patches?
This d_invalidate() looks suspicious to me:
+/* + * Slab has dropped all the locks. Get rid of the refcount obtained + * earlier and also free the object. + */ +static void kick_dentries(struct kmem_cache *s, + int nr, void **v, void *private) +{ + struct dentry *dentry; + int i; + + /* + * First invalidate the dentries without holding the dcache lock + */ + for (i = 0; i < nr; i++) { + dentry = v[i]; + + if (dentry) + d_invalidate(dentry); + }
I think it's wrong to unhash dentries while they are possibly still being used. You can do the shrink_dcache_parent() here, but should leave the unhashing to be done by prune_one_dentry(), after it's been checked that there are no other users of the dentry.
Miklos
| |