~> mkdir -p 
X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X
~> rsync-2.5.6 -r X localhost:$PWD/X2
opendir(X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X/X):
 Too many open files
rsync error: some files could not be transferred (code 23) at main.c(620)
~> uname -sr
SunOS 5.9
~> ulimit -n
64


There are two problems here:

1. When walking the directory structure, rsync keeps all directories above
   open.  When the current process' max number of files is reached, the
   party is over.

   Suggestion: wrap opendir and have it read the entire directory at once.

2. The directory is being walked without ckdir-ing into subdirectories.
   That's a severe performance penalty for deep directories.

   Alternatively, at least on Solaris, use fstatat(2) for stat-ing the
   files.

Morten
-- 
To unsubscribe or change options: http://lists.samba.org/mailman/listinfo/rsync
Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html

Reply via email to