Re: cifs conversion to netfslib

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux