On Thu, 2013-09-05 at 18:21 +0000, Adamson, Andy wrote: > On Sep 5, 2013, at 1:48 PM, "Myklebust, Trond" <Trond.Myklebust@xxxxxxxxxx> > wrote: > >> +static void > >> +nfs4_shutdown_ds_clients(struct nfs_client *clp) > >> +{ > >> + struct nfs4_ds_server *dss; > >> + LIST_HEAD(shutdown_list); > >> + > >> + spin_lock(&clp->cl_lock); > >> + while (!list_empty(&clp->cl_ds_clients)) { > >> + dss = list_entry(clp->cl_ds_clients.next, > >> + struct nfs4_ds_server, list); > >> + list_move(&dss->list, &shutdown_list); > > > > Is this step necessary? We know that nobody other than us is referencing > > the nfs_client at this point. > > Because of the kfree under the spin lock - but perhaps that is no longer an issue? Do you need the spin lock at all here? No other threads are supposed to be accessing the nfs_client when we call ->free_client(). -- Trond Myklebust Linux NFS client maintainer NetApp Trond.Myklebust@xxxxxxxxxx www.netapp.com ��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥