Trond Myklebust wrote: The procedure for returning delegations is supposed to work as follows: 1. Remove the nfsi->delegation so that it is no longer visible to new open() requests 2. write back any dirty data to the server 3. Reclaim any locks 4. Reclaim any open stateids (using CLAIM_DELEGATE_CUR) 5. delegreturn While there may indeed be the odd READ or WRITE that races between 4. and 5., so that the server receives the delegation stateid after the delegreturn, that shouldn't matter: the server returns an error, and the client should retry using the new open stateid. What is failing to work correctly here? That helps, thanks. I'll see if I can figure out what's going wrong. At the server, I see a delegreturn followed by a setattr using the returned stateid. The server returns BAD_STATEID. I'll look to see if the client then retries. At the client, I see a non-null nfsi->delegation after the delgreturn, and the application gets a EIO. There is a pcap here: http://www.citi.umich.edu/projects/nfsv4/pnfs/block/bad-deleg.pcap The stateid is 1880654d0300970000000400, the delegreturn is in packet 5589, the client tries to use it for setattr in packet 5596. I showed this to Andy and Fred earlier, they may already be looking at it. The client is running Benny's pnfs-all-latest. -- 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