David Howells <dhowells@xxxxxxxxxx> wrote: > I am seeing the occasional: > > CIFS: trying to dequeue a deleted mid > > but I haven't managed to work out how I get to that yet. That turned out to be due to EFAULT occurring in sock_recvmsg() called from cifs_readv_from_socket() because it was handed an iovec-class iov_iter. It went through: if (length <= 0) { cifs_dbg(FYI, "Received no data or error: %d\n", length); cifs_reconnect(server, false); return -ECONNABORTED; } which called cifs_abort_connection() which forcibly marked the MIDs as deleted. However, they got dequeued later which triggered the message. Telling netfs's DIO read to turn it into a bvec-class iov_iter instead stopped that happening, but it's may be a latent problem. I also found the causes of the occasional "server overflowed SMB3 credits" messages that I've been seeing: Firstly, the data read path was returning credits both when freeing the subrequest and at the end of smb2_readv_callback(). I made the former conditional on not doing the latter. Secondly, cifs_write_back_from_locked_page() was returning credits, even if ->async_writev() was successful. I made that only do it on error. And now it gets through generic/013 for me. David