Hi,

   I've had the following patch installed for some time
now.

   Basically, we ran into a situation where files being
generated/stored to a fileserver from client A and then
handed by out by ftp from a different client host was failing.

   The following patch handles the recoverable ESTALE
situation. Trace/debug output is done when the logging
level is 2 or more as is done elsewhere.

   It is also worth noting that ESTALE is not documented
as a valid errno return from open().

Thanks,
John

The patch can also be found online at:

http://people.freebsd.org/~jwd/ftpd.estale.patch


Index: ftpd.c
===================================================================
RCS file: /home/ncvs/src/libexec/ftpd/ftpd.c,v
retrieving revision 1.99
diff -u -r1.99 ftpd.c
--- ftpd.c      25 Feb 2002 16:39:34 -0000      1.99
+++ ftpd.c      3 Mar 2002 13:25:00 -0000
@@ -1478,7 +1478,15 @@
        time_t start;
 
        if (cmd == 0) {
-               fin = fopen(name, "r"), closefunc = fclose;
+               int try = 0;
+               while ((fin = fopen(name,"r")) == NULL && errno == ESTALE && try < 3 ) 
+{
+                       sleep(++try);
+                       if (logging > 1)
+                               syslog(LOG_INFO,"get fopen(\"%s\"): %m: attempting 
+retry",name);
+               }
+               if (fin == NULL && logging > 1)
+                       syslog(LOG_INFO,"get fopen(\"%s\"): %m",name);   
+               closefunc = fclose;
                st.st_size = 0;
        } else {
                char line[BUFSIZ];



To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to