On Tue, 2011-07-12 at 11:51 +0800, Ian Kent wrote: > On Mon, 2011-06-20 at 15:45 +0800, Ian Kent wrote: > > Hi all, > > > > I'm having difficulty working out how delegation release threads are > > synchronized with umount. > > > > For an information about the problem please see > > https://bugzilla.kernel.org/show_bug.cgi?id=30882 and in particular > > comment #28. > > > > Can someone please give me a description of the sequence of events at > > umount (aka. nfs4_kill_super() function calls). In particular how does > > nfs_free_server() know that if nfs_super_return_all_delegations() starts > > a thread that it is finished before freeing the server struct. > > No response in almost a month. everyone must be really busy. > > But does no-one know how this works? > > Trond, could you have a look at the above bug and offer your input > please. The only code that seems dubious there is the line clp = NFS_SERVER(delegation->inode)->nfs_client; Both the delegation and the nfs_client are guaranteed to still be around whenever nfs_expire_unreferenced_delegations() is called: the RCU protection of the clp->cl_superblock and server->delegations lists ensures that. However the delegation->inode is not guaranteed to still exist... The obvious fix is to pass the struct nfs_server as a parameter to nfs_mark_return_delegation() instead of trying to derive it from the inode. Cheers Trond -- Trond Myklebust Linux NFS client maintainer NetApp Trond.Myklebust@xxxxxxxxxx www.netapp.com -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html