On Sat, 09 Jun 2012 09:06:28 +0200 Marco Stornelli <marco.storne...@gmail.com> wrote:
> Il 09/06/2012 02:28, Andrew Morton ha scritto: > > On Fri, 8 Jun 2012 16:46:47 -0700 Linus > > Torvalds<torva...@linux-foundation.org> wrote: > > > >> Of course, if you just mean having a VFS wrapper that does > >> > >> static void vfs_inode_kmem_cache_destroy(struct kmem_cache *cachep) > >> { > >> rcu_barrier(); > >> kmem_cache_destroy(cachep); > >> } > >> > >> then we could do that. Not much better than what Kirill's patch did, > >> but at least we could have that comment in just one single place. > > > > That's conceptually what I meant. But it has the problem that new and > > out-of-tree filesystems might forget to do it. Which is why I suggest > > adding a kmem_cache* argument to unregister_filesystem() for this. > > > > It's a bit awkward, and the fs can pass in NULL if it knows what it's > > doing. But it's reliable. > > -- > > The call of rcu_barrier should be mandatory for the "unload fs module" > problem, right? If the fs is compiled statically maybe we could avoid > it, but (eventually) this kind of decision is per-fs, so this could be a > clue that the call of rcu_barrier maybe is inside each fs not in VFS. > No, this is unrelated to module unloading and the problem affects statically linked filesystems also. The requirement is that all inodes which are pending rcu freeing be flushed (and freed) before their cache is destroyed in kmem_cache_destroy(). And... it seems that I misread what's going on. The individual filesystems are doing the rcu freeing of their inodes, so it is appropriate that they also call rcu_barrier() prior to running kmem_cache_free(). Which is what Kirill's patch does. oops. -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html