[Samba] cli_push returned NT_STATUS_IO_TIMEOUT

Bram fnzon at lists.wizbit.be
Mon Sep 19 04:36:56 MDT 2011


Hello all,


I'm having a problem with smbclient after an upgrade from 3.0.37 to  
3.5.3 (I also tested 3.5.11 and 3.6.0).

The client uses a command similar to:

   tar -cz /some/directory | smbclient '\\server_ip\share' -N -c 'put  
- "\directory\filename"'

After that the client checks the exit status to determine if the  
transfer succeeded or failed.

The server is running samba 3.2.5.


With samba-3.0.37 this worked without problem;

With samba-3.5.3 the transfer regularly fails. The moment that is  
fails is different... normally it should transfer about 16GB of data  
but I have seen it fail after 2GB, 8GB and after 13GB.


Looking at a tcpdump shows:
- at 04:00:07: a packet is send from the client to the server that  
contains data (wireshark identifies it as 'Write AndX Request')
- at 04:00:07: a packet is send from the server to the client to  
confirm the data (wireshark identifies it as 'Write AndX Response')
- at 04:00:14: a packet is send from the client to the server which  
contains a 'Close Request'.

Reproducing it is somewhat successful and somewhat unsuccessful:

When I replace the 'tar -cz' command with a command that sleeps 20  
seconds then I'm able to reproduce the error. With a delay of 19  
seconds this is not reproducible;
But this is not the same as the real command since this shows a delay  
of only 7 seconds.


The test script used is attached to this mail.
What it does:
* It outputs a list of 'a'
* It sleeps 20 seconds
* It outputs a list of 'b'.


Running it with samba-3.5.3:
$ perl test.pl 20  | smbclient '\\server_ip\share' -N -c 'put -  
"\directory\filename"' ; echo $?
Sending data 'a'
Anonymous login successful
Domain=[......] OS=[Unix] Server=[Samba 3.2.5]
Sending data 'a' done
Sleep done
Sending data 'b'
cli_push returned NT_STATUS_IO_TIMEOUT
putting file - as \directory\filename (100.4 kb/s) (average 100.4 kb/s)


The last lines of a smbclient -d10:

dos_clean_name [\\directory\filename]
unix_clean_name [\directory\filename]
Sending data 'a' done
Sleep done
Sending data 'b'
putting file - as \directory\filename Running timed event  
"tevent_req_timedout" 0xb8032c58
cli_push returned NT_STATUS_IO_TIMEOUT
(99.6 kb/s) (average 99.6 kb/s)
write_socket(4,39)
write_socket(4,39) wrote 39



Running it with samba-3.6.0:

$ perl test.pl 20  | smbclient '\\server_ip\share' -N -c 'put -  
"\directory\filename"' ; echo $?
Sending data 'a'
WARNING: The security=share option is deprecated
Anonymous login successful
Domain=[......] OS=[Unix] Server=[Samba 3.2.5]
Sending data 'a' done
Sleep done
Sending data 'b'
cli_push returned NT_STATUS_IO_TIMEOUT
putting file - as \directory\filename (100.1 kb/s) (average 100.1 kb/s)



The last lines of a smbclient -d10:
[2011/09/19 12:02:20,  0] libsmb/clidfs.c:227(do_connect)
   Domain=[.....] OS=[Unix] Server=[Samba 3.2.5]
[2011/09/19 12:02:20,  4] libsmb/clidfs.c:233(do_connect)
    session setup ok
[2011/09/19 12:02:20, 10] libsmb/clitrans.c:299(cli_trans_format)
   num_setup=1, max_setup=0, param_total=44, this_param=44,  
max_param=2, data_total=0, this_data=0, max_data=16644,  
param_offset=68, param_pad=0, param_disp=0, data_offset=112,  
data_pad=0, data_disp=0
[2011/09/19 12:02:20,  4] libsmb/clidfs.c:276(do_connect)
    tconx ok
[2011/09/19 12:02:20,  3] lib/util.c:435(dos_clean_name)
   dos_clean_name [\\directory\filename]
[2011/09/19 12:02:20,  3] lib/util.c:487(unix_clean_name)
   unix_clean_name [\directory\filename]
[2011/09/19 12:02:20,  1] client/client.c:1872(do_put)
   putting file - as \ndirectory\filename Running timed event  
"tevent_req_timedout" 0xb80399a0
cli_push returned NT_STATUS_IO_TIMEOUT
[2011/09/19 12:02:40,  1] client/client.c:1911(do_put)
   (100.3 kb/s) (average 100.3 kb/s)



Some questions:

a) can others reproduce this?

b) is it expected that the exit status of smbclient is 0?
The transfer failed so I, sort of, expected an exit status of 1 (or at  
least != 0)

c) is this timeout expected?
To me 'tevent_req_timedout' suggest that it is a timeout added when  
sending a request.
Shouldn't the timeout/timer/.. be cleared when the response on the  
request is received?

d) is it possible to change the value of the timeout?



Best regards,

Bram




More information about the samba mailing list