On Wed, May 12, 2010 at 09:19:34AM +0300, Benny Halevy wrote: > On May. 12, 2010, 7:26 +0300, Benny Halevy <bhalevy@xxxxxxxxxxx> wrote: > > On May. 12, 2010, 5:40 +0300, " J. Bruce Fields" <bfields@xxxxxxxxxxxxxx> wrote: > >> Something still doesn't look quite right: a sequence operation > >> increments cl_count from 1 to 2; then, say, an exchangeid in another > >> thread expires the client, dropping cl_count from 2 to 1; then the > >> laundromat runs, sees cl_count 1, and decides it can expire the > >> client. Meanwhile, the original compound is still running. > >> > >> Am I missing something? > > > > Yeah. exchange_id doesn't touch cl_refcount. It may call expire_client > > explicitly which will unhash the client but will not destroy it if cl_refcount > 0 > > the laundromat won't the client either after that since it's not on the lru list > > any more (and even if it would, it's refcount is still great than zero so it would > > have been ignored) > > Sorry, I misspoken. exchange_id may decrement cl_refcount via expire_client() > but still the laundromat won't see it as expire_client will have already removed the > client from client_lru. So the only potential problems are with operations that reach the client through the pointer in the session, so such operations may need to do something special. OK. --b. -- 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