[Gluster-devel] A problem with fstat64 system call on nfs.
Александр Берсенев
bay at hackerdom.ru
Thu Mar 17 11:35:57 UTC 2011
I am experimenting with glusterfs on cluster.
I have a ~20 glusterfs servers. They communicating between each other
via Infiniband.
One of client machine have no Infiniband board, so I mounted the
glusterfs volume on this client machine via nfs.
I used this command:
mount -t nfs server:/share /mount
When I try to do fstat64 on any file from the nfs mount, the stat call
fails because of stack corruption.
Here is a small source of a fstat test:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/file.h>
#include <sys/stat.h>
int main(int argc, char **argv){
if(argc!=2) {
printf("Usage: ./progname <file>");
exit(1);
}
int h=open(argv[1], O_RDONLY);
if(h<0) {
printf("Open failed\n");
exit(1);
}
struct stat s;
int f=fstat(h,&s);
if(f<0) {
printf("Stat failed\n");
exit(1);
}
printf("Size: %d\n",s.st_size);
return 0;
}
When I compiling this source with this command: gcc -m32 1.c , all
fstat64 calls from nfs mount is fails:
[u1333 at um64 bay]$ ./a.out aaaaaa
Stat failed
But with non-gluster nfs mount and local files the program is working correctly:
[u1333 at um64 bay]$ ./a.out /etc/passwd
Size: 1743
When I compiling this source with another command: gcc -m64 1.c , all
is working. Strace shows fstat calls instead of fstat64.
[u1333 at um64 bay]$ ./a.out aaaaaa
Size: 2
[u1333 at um64 bay]$ ./a.out /etc/passwd
Size: 1743
Steps for reproduce:
1) Mount glusterfs via nfs.
2) Compile a source with -m32
3) Execute ./a.out <file on nfs>
Is it glusterfs bug?
---
Alexander Bersenev(Russia)
More information about the Gluster-devel
mailing list