On Fri, 21 Jul 2000, Marcus Watts wrote:

> Jeffrey Hutzelman <[EMAIL PROTECTED]> writes:
> > Date: Fri, 21 Jul 2000 14:14:26 -0400
> > From: Jeffrey Hutzelman <[EMAIL PROTECTED]>
> > To: Jeff Blaine <[EMAIL PROTECTED]>, Lyle Seaman <[EMAIL PROTECTED]>
> > cc: [EMAIL PROTECTED], [EMAIL PROTECTED]
> > Subject: Re: 103 character full pathname fails?
> > 
> > [I'm mailing relevant people directly in addition to copying the list, 
> > since otherwise it will be September before anyone sees my comments.  Grrr.]
> > 
> > 
> > On 07/21/00 13:34:12 -0400 Jeff Blaine <[EMAIL PROTECTED]> wrote:
> > 
> > > 'touch 84794578943985349' returns the following with truss (Solaris):
> > >
> > > stat64("84794578943985349", 0xFFBEF830)         Err#2 ENOENT
> > > creat64("84794578943985349", 0666)              Err#27 EFBIG
> > > touchwrite(2, " t o u c h", 5)                  = 5
> > > : write(2, " :  ", 2)                           = 2
> > > 84794578943985349write(2, " 8 4 7 9 4 5 7 8 9 4 3 9".., 17)     = 17
> > >  cannot create
> > > write(2, "   c a n n o t   c r e a".., 15)      = 15
> > > llseek(0, 0, SEEK_CUR)                          = 8208
> > > _exit(1)
> > >
> > > EFBIG is 'File too large' in /usr/include/sys/errno.h
> > >
> > > Same error code with strace under Red Hat 6.2
> > 
> > In many cases, the error codes you get from operations on AFS files must be 
> > interpreted based on the fileserver platform.  What platform is the 
> > fileserver in question, and what is errno 27 on that platform?
> > 
> > 
> > -- Jeffrey T. Hutzelman (N3NHS) <[EMAIL PROTECTED]>
> >    Sr. Research Systems Programmer
> >    School of Computer Science - Research Computing Facility
> >    Carnegie Mellon University - Pittsburgh, PA
> > 
> > 
> > 
> 
> The problem is not with large filenames.  I can do this:
>       touch 
>84794578943985349847945789439853498479457894398534984794578943985349847945789439853498479457894398534984794578943985349
> with no problems.  (That's a 119 character filename.)  'Course, I may not have
> the same version of solaris as you, and I almost certainly used a different version
> of AFS.
> 
> Since you've only included output from "truss", it's difficult to say if
> this is a problem with the cache manager or file server.  You might find
> it worthwhile to find a version of "tcpdump" that decodes fileserver RX
> packets and use that, or failing that, decode the packets by hand.
> 
> Before doing this, you should try varying the circumstances of the error
> to determine when it does and does not happen.  It may be dependent
> on the fileserver version#, the client version#, or could very likely
> be due to some problem with a particular directory or volume, and not
> true at large.  Random stupid questions: just how many files do you already
> have in that directory?  Also, what is the output from "csh -c limit",
> specially RLIMIT_FSIZE?  Are you using an NFS/AFS translator?
> 
> The cache manager appears to be willing to return EFBIG if:
> ...
>       (anything that makes a directory entry) if the directory is "full".
>               (Sorry, I don't know how many blobs can fit in a directory.)

Hm.  Yeah, that's probably what's happening.  A directory entry can hold
up to 16 characters of filename; remaining characters are held in
extension entries, which hold up to 32 characters each.  All of these
entries for a given filename must be contiguous and in the same page.
A page holds 64 entries (EPP), and modern fileservers allow up to 1023
pages in a directory (BIGMAXPAGES); these constants are declared in
dir/dir.h.


The directory module returns EFBIG if it cannot find a page in which
enough contiguous blobs are free.  This should be an unusual situation,
but it sounds like that's what's happening.

-- Jeff


Reply via email to