rsync: readdir(.): Bad file descriptor (9)

Jim Carroll jim at carroll.com
Tue Nov 8 17:24:07 GMT 2005


Hi,

I've spent the better part of three weeks tracking into this problem. I
hope you don't mind a post here on smbfs, but I was hoping someone might
have some insight or ideas on where to look next.

Summary: trying to rsync folders across an smb mounted share with
EXACTLY 50 objects (folder or files), results in the error

	rsync: readdir(.): Bad file descriptor (9)

Details

The problem seems to be related to the number of objects in a folder.  

The problem can very easily be re-created by creating 50 files in a
samba share, and trying to rsync it to a FreeBSD 4.11 or Darwin box.

# mount_smbfs -I [ipaddr w2k] '//Administrator at w2k/C$' /mnt
# mkdir /mnt/dummy
# cd /mnt/dummy
# touch 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
49 50
# rsync -rn /mnt/dummy /var/tmp

Error message
building file list ... rsync: readdir(.): Bad file descriptor (9)


The source of the error message is /usr/src/sys/netsmb/smb_rq.c
Line 344

if (rqp->sr_vc->vc_hflags2 & SMB_FLAGS2_ERR_STATUS) {
    error = md_get_uint32le(mdp, &rqp->sr_error);
} else {
    error = md_get_uint8(mdp, &rqp->sr_errclass);
    error = md_get_uint8(mdp, &tb);
    error = md_get_uint16le(mdp, &rqp->sr_serror);
    if (!error)
        rperror = smb_maperror(rqp->sr_errclass, rqp->sr_serror);


I'm working through the netsmb source code, but it's slow going.

I ran the above example on 

# uname -a
FreeBSD 30.dhcp.hck.carroll.com 4.11-STABLE FreeBSD 4.11-STABLE #1: Tue
Nov  1 22:15:50 EST 2005
jim at 30.dhcp.hck.carroll.com:/usr/src/sys/compile/NC.DEBUG  i386


We also ran it on a Darwin machine

$ uname -a
Darwin 94.dhcp.hck.carroll.com 7.9.0 Darwin Kernel Version 7.9.0: Wed
Mar 30 20:11:17 PST 2005; root:xnu/xnu-517.12.7.obj~1/RELEASE_PPC  Power
Macintosh powerpc

Both machines reported the same error.

building file list ... rsync: readdir(.): Bad file descriptor (9)

What's particularly interesting, is other utilities can successfully
recurse into the directory without any problems (example: ls, find,
...).  I can only seem to create the problem using rsync.

In the beginning I was convinced it was an rsync bug, but after days of
using gdb and single stepping through rsync, I no longer think this is
the case.  It definitely is being exacerbated by rsync, but I'm fairly
certain the bug is in smbfs.

I've written a small command line utility that does

	opendir()
	readdir()
		lstat()

which is basically what rsync does, I get no errors.  

Any pointers, crazy ideas, off the wall theories, etc... would be
greatly appreciated.

---
Jim C.          | Carroll-Net, Inc.
201-488-4092    |
www.carroll.com | Application Service Provider


More information about the samba-technical mailing list