Re: [Gluster-devel] regarding fsetattr

2014-05-29 Thread Pranith Kumar Karampuri


- 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

2014-05-29 Thread Pranith Kumar Karampuri


- 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