Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 396457 - sys-apps/coreutils-8.7: mkdir cannot create loooong directory names ?
Summary: sys-apps/coreutils-8.7: mkdir cannot create loooong directory names ?
Status: RESOLVED UPSTREAM
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: [OLD] Core system (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: Gentoo's Team for Core System packages
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-12-29 21:07 UTC by Toralf Förster
Modified: 2012-01-01 18:50 UTC (History)
0 users

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Toralf Förster gentoo-dev 2011-12-29 21:07:06 UTC
Here's the response of the maintainer of mlocate wrt to
https://bugs.gentoo.org/show_bug.cgi?id=395483 :

From the user's point of view, this test failure should not be a practical problem; "depth230" means a path name longer than 8000 characters.  You should be able to use the resulting updatedb/mlocate binaries just fine.

Looking at what needs to be fixed - both "updatedb" and "locate" output nothing on stderr, and the test output looks reasonable given the preceding error messages, so it seems that updatedb and locate are able to process the deep hierarchy correctly; the only bug is in mkdir (at a wild guess, a fixed-size buffer with size around 8 kB).

Could you report this to the maintainer of the component that provides mkdir (probably coreutils), and try to get it fixed there, please?  It is always possible to lower the depth in the test, however I'd like to avoid that if at all possible - if the test is limited to < 8kB for the sake of other programs, it will no longer detect an 8 kB buffer in mlocate.

Thanks again,
   Mirek

Reproducible: Always




n22 ~ # emerge --info sys-apps/coreutils
Portage 2.1.10.41 (default/linux/x86/10.0/desktop/kde, gcc-4.5.3, glibc-2.13-r4, 3.1.6 i686)
=================================================================
                        System Settings
=================================================================
System uname: Linux-3.1.6-i686-Intel-R-_Core-TM-2_Duo_CPU_P8600_@_2.40GHz-with-gentoo-2.0.3
Timestamp of tree: Thu, 29 Dec 2011 20:15:01 +0000
ccache version 3.1.6 [enabled]
app-shells/bash:          4.1_p9
dev-java/java-config:     2.1.11-r3
dev-lang/python:          2.7.2-r3, 3.1.4-r3
dev-util/ccache:          3.1.6
dev-util/cmake:           2.8.4-r1
dev-util/pkgconfig:       0.26
sys-apps/baselayout:      2.0.3
sys-apps/openrc:          0.9.4
sys-apps/sandbox:         2.5
sys-devel/autoconf:       2.13, 2.68
sys-devel/automake:       1.9.6-r3, 1.10.3, 1.11.1
sys-devel/binutils:       2.21.1-r1
sys-devel/gcc:            4.5.3-r1
sys-devel/gcc-config:     1.4.1-r1
sys-devel/libtool:        2.4-r1
sys-devel/make:           3.82-r1
sys-kernel/linux-headers: 2.6.39 (virtual/os-headers)
sys-libs/glibc:           2.13-r4
Repositories: gentoo betagarden toralf
ACCEPT_KEYWORDS="x86"
ACCEPT_LICENSE="*"
CBUILD="i686-pc-linux-gnu"
CFLAGS="-O2 -march=native -pipe"
CHOST="i686-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/share/config /usr/share/gnupg/qualified.txt /var/lib/hsqldb"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/env.d/java/ /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/php/apache2-php5.3/ext-active/ /etc/php/cgi-php5.3/ext-active/ /etc/php/cli-php5.3/ext-active/ /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo"
CXXFLAGS="-O2 -march=native -pipe"
DISTDIR="/usr/portage/distfiles"
EMERGE_DEFAULT_OPTS="--autounmask=n --quiet-build=y --keep-going=y"
FEATURES="assume-digests binpkg-logs ccache compress-build-logs distlocks ebuild-locks fixlafiles news parallel-fetch protect-owned sandbox sfperms strict test unknown-features-warn unmerge-logs unmerge-orphans userfetch"
FFLAGS=""
GENTOO_MIRRORS="http://mirror.leaseweb.com/gentoo/ http://gentoo.mirror.dkm.cz/pub/gentoo/ http://ftp.snt.utwente.nl/pub/os/linux/gentoo http://gentoo.mneisen.org/ http://www.gtlib.gatech.edu/pub/gentoo"
LANG="en_US.utf8"
LDFLAGS="-Wl,-O1 -Wl,--as-needed"
LINGUAS="en en_GB"
MAKEOPTS="-j2"
PKGDIR="/usr/portage/packages"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY="/var/lib/layman/betagarden /usr/local/portage"
SYNC="rsync://linux.rz.ruhr-uni-bochum.de/gentoo-portage"
USE="X a52 aac acl acpi alsa apache2 berkdb bittorrent bluetooth branding bzip2 cairo cdda cdr classic cli consolekit cracklib crypt css cups cxx dbus declarative dri dts dvb dvd dvdr emboss encode exif fam fastbuild fat ffmpeg firefox flac fortran gdbm gdu gif git gmp gphoto2 gpm gtk hyphenation iconv ipv6 java jpeg kde kipi kqemu kvm lastfm lcms ldap libnotify lirc logrotate mad mbox mmx mng modules mp3 mp4 mpeg mudflap mysql mysqli ncurses nls nptl nptlonly nsplugin ntfs ogg opengl openmp pam pango pcre pdf phonon plasma png policykit ppds pppd qt3support qt4 rdesktop readline sdl semantic-desktop session sieve spell sse sse2 sse3 ssl ssse3 startup-notification svg sysfs tcpd thinkpad tiff tk transparent-proxy truetype udev unicode usb vaapi vim-syntax vnc vorbis wmf x264 x86 xcb xcomposite xinerama xml xorg xpm xscreensaver xulrunner xv xvid xvmc zlib" ALSA_CARDS="hda-intel" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" APACHE2_MODULES="actions alias auth_basic auth_digest authn_anon authn_dbd authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi dav dav_fs dav_lock dbd deflate dir disk_cache env expires ext_filter file_cache filter headers ident imagemap include info log_config logio mem_cache mime mime_magic negotiation proxy proxy_ajp proxy_balancer proxy_connect proxy_http rewrite setenvif so speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan stage tables krita karbon braindump" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx" INPUT_DEVICES="evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LINGUAS="en en_GB" LIRC_DEVICES="devinput inputlirc" PHP_TARGETS="php5-3" QEMU_SOFTMMU_TARGETS="i386 x86_64" QEMU_USER_TARGETS="i386 x86_64" RUBY_TARGETS="ruby18" USERLAND="GNU" VIDEO_CARDS="intel" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"
Unset:  CPPFLAGS, CTARGET, INSTALL_MASK, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS

=================================================================
                        Package Settings
=================================================================

sys-apps/coreutils-8.7 was built with the following:
USE="acl (consolekit) gmp nls (policykit) unicode -caps (-selinux) -static -vanilla -xattr"
CFLAGS="-O2 -march=native -pipe -g -ggdb"
CXXFLAGS="-O2 -march=native -pipe -g -ggdb"
Comment 1 Toralf Förster gentoo-dev 2011-12-29 21:26:00 UTC
Well, the limit is <= 255 :

tfoerste@n22 ~/tmp $ mkdir `perl -e 'print "a" x 256'`
mkdir: cannot create directory `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa': File name too long
Comment 2 SpanKY gentoo-dev 2011-12-31 08:16:36 UTC
your specific example is not a bug in mkdir, or any other userland software.  this is the kernel rejecting your path.  simply strace it:
  $ strace -e mkdir mkdir `perl -e 'print "a" x 256'`
  mkdir("...", 0777) = -1 ENAMETOOLONG (File name too long)

but that is the length for a *single* component in the filename.  it is not the max length for all the components summed together.  notice how this works:
  $ rm -rf a
  $ mkdir -p `perl -e 'print "a/" x 256'`
  $ ls -R a/
  $ rm -rf a

i'm not entirely convinced the mlocate test failure has been properly diagnosed
Comment 3 Toralf Förster gentoo-dev 2011-12-31 10:22:03 UTC
right, this works :

$> mkdir -p `perl -e 'my $d = "d" x 15; print "$d/" x 255'`

but this gives an error :

mkdir -p `perl -e 'my $d = "d" x 16; print "$d/" x 255'`

informing upstream ...
Comment 4 SpanKY gentoo-dev 2011-12-31 20:22:34 UTC
your 2nd invocation works fine for me.  as does ratcheting it up:
  $ mkdir -p `perl -e 'my $d = "d" x 16; print "$d/" x 2550'`
  $ find dddddddddddddddd/ | wc
     2550    2550 55292926
Comment 5 Toralf Förster gentoo-dev 2012-01-01 10:45:22 UTC
(In reply to comment #4)
> your 2nd invocation works fine for me.  as does ratcheting it up:
>   $ mkdir -p `perl -e 'my $d = "d" x 16; print "$d/" x 2550'`
>   $ find dddddddddddddddd/ | wc
>      2550    2550 55292926

Yes, but doesn't 

$>ls -lR dd* 2>&1 1>/dev/null | grep "File name too long"

give an output for you ?
Comment 6 SpanKY gentoo-dev 2012-01-01 18:02:20 UTC
(In reply to comment #5)

yes, `ls` reports ENAMETOOLONG via its open(), but that's because `ls` builds up the entire path and passes it to open().

mkdir does chdir();mkdir() so its max is only ever the current component since that is really all it ever has to care about.

that said, i'm not sure what your point is wrt ls ?  i wouldn't necessarily call this a bug in `ls`.
Comment 7 Toralf Förster gentoo-dev 2012-01-01 18:50:09 UTC
correct, thinko at my side.