[Gluster-devel] regarding fsetattr
hi, When I run the following program on fuse mount it fails with ENOENT. When I look at the mount logs, it prints error for setattr instead of fsetattr. Wondering anyone knows why the fop comes as setattr instead of fsetattr. Log: [2014-05-29 09:33:38.658023] W [fuse-bridge.c:1056:fuse_setattr_cbk] 0-glusterfs-fuse: 2569: SETATTR() gfid:ae44dd74-ff45-42a8-886e-b4ce2373a267 = -1 (No such file or directory) Program: #include stdio.h #include unistd.h #include sys/types.h #include sys/stat.h #include fcntl.h #include errno.h #include string.h int main () { int ret = 0; int fd=open(a.txt, O_CREAT|O_RDWR); if (fd 0) printf (open failed: %s\n, strerror(errno)); ret = unlink(a.txt); if (ret 0) printf (unlink failed: %s\n, strerror(errno)); if (write (fd, abc, 3) 0) printf (Not able to print %s\n, strerror (errno)); ret = fchmod (fd, S_IRUSR|S_IWUSR|S_IXUSR); if (ret 0) printf (fchmod failed %s\n, strerror(errno)); return 0; } Pranith ___ Gluster-devel mailing list Gluster-devel@gluster.org http://supercolony.gluster.org/mailman/listinfo/gluster-devel
Re: [Gluster-devel] regarding fsetattr
- Original Message - From: Pranith Kumar Karampuri pkara...@redhat.com To: jGluster Devel gluster-devel@gluster.org Cc: Brian Foster bfos...@redhat.com Sent: Thursday, May 29, 2014 3:08:33 PM Subject: regarding fsetattr hi, When I run the following program on fuse mount it fails with ENOENT. When I look at the mount logs, it prints error for setattr instead of fsetattr. Wondering anyone knows why the fop comes as setattr instead of fsetattr. Log: [2014-05-29 09:33:38.658023] W [fuse-bridge.c:1056:fuse_setattr_cbk] 0-glusterfs-fuse: 2569: SETATTR() gfid:ae44dd74-ff45-42a8-886e-b4ce2373a267 = -1 (No such file or directory) Program: #include stdio.h #include unistd.h #include sys/types.h #include sys/stat.h #include fcntl.h #include errno.h #include string.h int main () { int ret = 0; int fd=open(a.txt, O_CREAT|O_RDWR); if (fd 0) printf (open failed: %s\n, strerror(errno)); ret = unlink(a.txt); if (ret 0) printf (unlink failed: %s\n, strerror(errno)); if (write (fd, abc, 3) 0) printf (Not able to print %s\n, strerror (errno)); ret = fchmod (fd, S_IRUSR|S_IWUSR|S_IXUSR); if (ret 0) printf (fchmod failed %s\n, strerror(errno)); return 0; } Based on vijay's inputs I checked in fuse-brige and this is what I see: 1162if (fsi-valid FATTR_FH 1163!(fsi-valid (FATTR_ATIME|FATTR_MTIME))) { 1164/* We need no loc if kernel sent us an fd and 1165 * we are not fiddling with times */ 1166state-fd = FH_TO_FD (fsi-fh); (gdb) 1167fuse_resolve_fd_init (state, state-resolve, state-fd); 1168} else { 1169fuse_resolve_inode_init (state, state-resolve, finh-nodeid); 1170} 1171 (gdb) p fsi-valid $4 = 1 (gdb) p (fsi-valid FATTR_FH) $5 = 0 (gdb) fsi-valid doesn't have FATTR_FH. Who is supposed to set it? Pranith Pranith ___ Gluster-devel mailing list Gluster-devel@gluster.org http://supercolony.gluster.org/mailman/listinfo/gluster-devel
Re: [Gluster-devel] regarding fsetattr
- Original Message - From: Pranith Kumar Karampuri pkara...@redhat.com To: jGluster Devel gluster-devel@gluster.org Sent: Thursday, May 29, 2014 3:37:37 PM Subject: Re: [Gluster-devel] regarding fsetattr - Original Message - From: Pranith Kumar Karampuri pkara...@redhat.com To: jGluster Devel gluster-devel@gluster.org Cc: Brian Foster bfos...@redhat.com Sent: Thursday, May 29, 2014 3:08:33 PM Subject: regarding fsetattr hi, When I run the following program on fuse mount it fails with ENOENT. When I look at the mount logs, it prints error for setattr instead of fsetattr. Wondering anyone knows why the fop comes as setattr instead of fsetattr. Log: [2014-05-29 09:33:38.658023] W [fuse-bridge.c:1056:fuse_setattr_cbk] 0-glusterfs-fuse: 2569: SETATTR() gfid:ae44dd74-ff45-42a8-886e-b4ce2373a267 = -1 (No such file or directory) Program: #include stdio.h #include unistd.h #include sys/types.h #include sys/stat.h #include fcntl.h #include errno.h #include string.h int main () { int ret = 0; int fd=open(a.txt, O_CREAT|O_RDWR); if (fd 0) printf (open failed: %s\n, strerror(errno)); ret = unlink(a.txt); if (ret 0) printf (unlink failed: %s\n, strerror(errno)); if (write (fd, abc, 3) 0) printf (Not able to print %s\n, strerror (errno)); ret = fchmod (fd, S_IRUSR|S_IWUSR|S_IXUSR); if (ret 0) printf (fchmod failed %s\n, strerror(errno)); return 0; } Based on vijay's inputs I checked in fuse-brige and this is what I see: 1162 if (fsi-valid FATTR_FH 1163 !(fsi-valid (FATTR_ATIME|FATTR_MTIME))) { 1164 /* We need no loc if kernel sent us an fd and 1165 * we are not fiddling with times */ 1166 state-fd = FH_TO_FD (fsi-fh); (gdb) 1167 fuse_resolve_fd_init (state, state-resolve, state-fd); 1168 } else { 1169 fuse_resolve_inode_init (state, state-resolve, finh-nodeid); 1170 } 1171 (gdb) p fsi-valid $4 = 1 (gdb) p (fsi-valid FATTR_FH) $5 = 0 (gdb) fsi-valid doesn't have FATTR_FH. Who is supposed to set it? had a discussion with brian foster on IRC. The issue is that gluster depends on client fd to be passed down to perform the operations where as setattr is sent on an inode from vfs to fuse and since gluster doesn't have any reference to inode once unlink happens, this issue is seen. I will have one more conversation with brian to find what needs to be fixed. Pranith. Pranith Pranith ___ Gluster-devel mailing list Gluster-devel@gluster.org http://supercolony.gluster.org/mailman/listinfo/gluster-devel ___ Gluster-devel mailing list Gluster-devel@gluster.org http://supercolony.gluster.org/mailman/listinfo/gluster-devel