Hide Forgot
* 4 server distribute-replicate * IOT server side, WB client side [root@client03 test]# touch a b c d [root@client03 test]# mkdir x y z [root@client03 test]# touch x/{1,2,3} y/{1,2,3,4} z/1 [root@client03 test]# ls -R .: a b c d x y z ./x: 1 2 3 ./y: 1 2 3 4 ./z: 1 * Using strace, we noticed differences between commands run on mountpoint and the backend: [root@client03 test]# strace /bin/ls --color .. lstat("b", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 lstat("c", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 lstat("x", {st_mode=S_IFDIR|0755, st_size=4118, ...}) = 0 lstat("y", {st_mode=S_IFDIR|0755, st_size=4126, ...}) = 0 lstat("z", {st_mode=S_IFDIR|0755, st_size=4102, ...}) = 0 getdents(3, /* 1 entries */, 131072) = 24 lstat("d", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 getdents(3, /* 0 entries */, 131072) = 0 munmap(0x2adae8b4d000, 135168) = 0 close(3) = 0 .. [root@brick6 ~]# cd /jbod/pavan/exp26rc4/client03/test [root@brick6 test]# strace /bin/ls --color .. lstat("b", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 lstat("c", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 getdents(3, /* 0 entries */, 4096) = 0 close(3) = 0 .. * We believe this is because we are not setting d_type from readdir. From the readdir manpage: .. struct dirent { ino_t d_ino; /* inode number */ off_t d_off; /* offset to the next dirent */ unsigned short d_reclen; /* length of this record */ unsigned char d_type; /* type of file */ char d_name[256]; /* filename */ }; According to POSIX, the dirent structure contains a field char d_name[] of unspecified size, with at most NAME_MAX characters preceding the terminating null byte. POSIX.1-2001 also documents the field ino_t d_ino as an XSI extension. Use of other fields will harm the portability of your programs. ..
Patch for review: http://patches.gluster.com/patch/1266/
PATCH: http://patches.gluster.com/patch/1266 in master (mount/fuse: Set d_type in readdir_cbk using the stat buf for the entry.)