ASYNC operation

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

 



Hello Steve,

We have a report where users using async reads by setting the directive
"aio read size = 4096"
in smb.conf. The user uses SMB3.

When using large rsize/wsize, we hit the problem where we have the
following messages

Feb  8 15:03:28 storage-qe13 kernel: CIFS VFS: SMB response too long
(1048656 bytes)
Feb  8 15:03:28 storage-qe13 kernel: CIFS VFS: Send error in read = -11

It looks like the Reads in the cifs module does not follow the async io
steps described in  
https://msdn.microsoft.com/en-us/library/cc246721.aspx

Looking at the tcpdump, just before the client reconnects to the
server, I see a read response with status set to STATUS_PENDING. The
async_id for the smb2_hdr is set. 
This response is received and processed by cifs_readv_receive() which
doesn't not know about the STATUS_PENDING response. It proceeds to
discard the readv response, returns an error and clears the MID.
The subsequent async response for the call then reaches the client.
Since the client has already discarded the MID from the earlier call,
it can no longer find any corresponding MIDs in the pending MID list.
The response is then handled by standard_receive3() which considers it
to be too large.
The connection is closed and the client attempts to reconnect to the
server.

The client then should subsequently retry the read call and should
receive the necessary response.

To reproduce: 
On the server, add the following conf
aio read size = 4096
and restart server. 
Server version used in my test samba-4.1.12-23.el7_1.x86_64.

On the client: using kernel 4.5.0-0.rc1.git2.1.fc24.x86_64

1)  mount with the mount options
rsize=1048576,wsize=1048576,vers=3.0 

2) Create a file to use to read
dd if=/dev/zero of=test bs=1M count=1024

3) Start read and keep a tab on dmesg
# dd if=test of=/dev/null 

Are there any plans on adding this functionality to the cifs module? 

Sachin Prabhu
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



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

  Powered by Linux