tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Filesystem limits

On Sun, Jan 17, 2010 at 2:17 PM, Sad Clouds
<> wrote:
> On Sunday 17 January 2010 02:24:42 der Mouse wrote:
>> > Is there a portable way of finding out the limits for the maximum
>> > number of files and directories that can be created under a give
>> > directory?
>> I doubt it.  Traditional Unix has no such limits, and at least some of
>> the more popular filesystems NetBSD supports don't.  There are (and
>> have been) per-mount-point limits, set at filesystem create time, but
>> that's not very closely related.  (If you do want them, look at
>> statfs(2) and/or fstatfs(2) for an API, or df -i for command-line.)
> Maybe I should have rephrased my question, i.e. not "filesystem limits", but
> "per directory limits".
> I can't create more than 32766 subdirectories in a given directory. If I run a
> test program, which creates subdirectories (1, 2, 3...N) in a loop, after
> 32766 it exits with:
> p3smp$ ./a.out
> mkdir() error: : Too many links
> i = 32766
> Where is this "Too many links" coming from? Is it a filesystem limit, or a
> dynamically adjustable sysctl limit? Is there a way to increase this limit, or
> maybe it will substantially decrease performance when doing directory lookups?

Per errno(2):

     31 EMLINK Too many links.  The number of hard links to a single file has
             exceeded the maximum.  (The system-wide maximum number of hard
             links is 32767.  Each file system may impose a lower limit for
             files contained within it).

A few greps in the source tree yield:

sys/syslimits.h:#define LINK_MAX                32767   /* max file
link count */

As to why this is restricted on a system basis, I don't know.  I'd
guess that the on-disk field for the link counter is 16 bits long and
the global constant is an artifact from the time when BSD only
supported a single file system?

Julio Merino

Home | Main Index | Thread Index | Old Index