Bug 49052 - i386 version of gcc-4.5 fails to compile C or Fortran files on CIFS mounts
Summary: i386 version of gcc-4.5 fails to compile C or Fortran files on CIFS mounts
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: unknown
: P3 major
Target Milestone: 4.6.0
Assignee: Not yet assigned to anyone
URL: https://bugs.launchpad.net/ubuntu/+so...
Keywords:
Depends on:
Blocks:
 
Reported: 2011-05-18 20:26 UTC by Fabio
Modified: 2011-05-19 09:01 UTC (History)
0 users

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Fabio 2011-05-18 20:26:12 UTC
A user of us ran into this on his locally managed Ubuntu Natty i386 machine and I could reproduce it as follows:

auriga:~# mkdir /mnt/tmp
auriga:~# mount.cifs -o user=abe,rw,mand,uid=abe,gid=isg //unixdata/isg /mnt/tmp
Password:
auriga:~# su - abe
U !514 Z1 ?0 L1 abe@auriga:pts/8 (-su) 16:42:32 [~] > cd /mnt/tmp/cifs-test
U !515 Z2 ?0 L1 abe@auriga:pts/8 (-su) 16:42:41 [/mnt/tmp/cifs-test] > ls -l
total 12
-rwxr-xr-x 0 abe isg 25 2011-05-18 16:30 test.c*
U !516 Z3 ?0 L1 abe@auriga:pts/8 (-su) 16:42:48 [/mnt/tmp/cifs-test] > cat test.c
int main() {
        return 0;
}
U !517 Z4 ?0 L1 abe@auriga:pts/8 (-su) 16:42:51 [/mnt/tmp/cifs-test] > gcc -o test test.c
cc1: fatal error: test.c: Value too large for defined data type
compilation terminated.
U !518 Z5 ?1 L1 abe@auriga:pts/8 (-su) 16:43:00 [/mnt/tmp/cifs-test] > touch foo.f
U !519 Z6 ?0 L1 abe@auriga:pts/8 (-su) 16:43:51 [/mnt/tmp/cifs-test] > gfortran foo.f
Error: Can't open file 'foo.f'
<built-in>:0:0: fatal error: can't open input file: foo.f
compilation terminated.
U !520 Z7 ?1 L1 abe@auriga:pts/8 (-su) 16:56:49 [/mnt/tmp/cifs-test] > lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 11.04
Release: 11.04
Codename: natty
U !521 Z8 ?0 L1 abe@auriga:pts/8 (-su) 16:58:01 [/mnt/tmp/cifs-test] > COLUMNS=80 dpkg -l cifs-utils gcc-4.5
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Description
+++-==============-==============-============================================
ii cifs-utils 2:4.5-2 Common Internet File System utilities
ii gcc-4.5 4.5.2-8ubuntu4 The GNU C compiler
U !522 Z9 ?0 L1 abe@auriga:pts/8 (-su) 16:58:33 [/mnt/tmp/cifs-test] > uname -a
Linux auriga 2.6.38-8-generic-pae #42-Ubuntu SMP Mon Apr 11 05:17:09 UTC 2011 i686 i686 i386 GNU/Linux
U !523 Z10 ?0 L1 abe@auriga:pts/8 (-su) 16:59:02 [/mnt/tmp/cifs-test] >

This is also reproducible on Debian Sid/Squeeze with gcc-4.1 through gcc-4.5 (but not the default gcc-4.6) on i386. cifs-utils is at version 2:4.9-1 there. I'll file according bug reports there later, too, and will reference them here.

(The mount options "mand" or "rw" aren't relevant, also happens with "nomand" or "ro".)

This is not reproducible in the following cases:

* with Ubuntu Natty amd64 (so it seems to be architecture-dependent)
* with Ubuntu Maverick amd64 and gcc-4.4 (probably because of amd64, not because of gcc-4.4)
* with Debian Sid i386 and gcc-4.6
* if I copy the files (e.g. with rsync -a) from the CIFS mounted file system to /tmp and compile them there
* if I use NFS instead of a CIFS mount
* if I use sshfs instead of a CIFS mount (this is also the current workaround we recommended our user as he can't do NFS mounts)

I couldn't check it on Lucid as mount.cifs bails out with "Mounting the DFS root for domain not implemented yet". And I don't have a Maverick box around.

I suspect the issue to be either in gcc-4.5 or cifs-utils, but I'm not sure in which of them.


original report on Launchpad:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.5/+bug/784705
Comment 1 Fabio 2011-05-18 20:28:39 UTC
Sorry if not a bug in gcc, but i'm not an expert.
Thanks in advance
Fabio
Comment 2 Richard Biener 2011-05-19 08:58:43 UTC
The issue is that gcc < 4.6 does not have large file support enabled and so
on 32bit hosts with 64bit file systems you can get this if the inode number
does not fit in the 32bit stat structure.  That's what we have seen on
32bit userland with 64bit kernels and big fs.

Should be fixed for 4.6.
Comment 3 Janne Blomqvist 2011-05-19 09:01:30 UTC
Not a GCC bug. 

As an aside, CIFS mounts work quite well IF the server supports the "CIFS Unix extensions"; Samba supports those, but IIRC the Windows CIFS server doesn't. Without the Unix extensions, the mounts behave very POSIX-unlike in some situations which makes many applications break, apparently including GCC. HTH, HAND.