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