Chuck: Under Orangefs 2.8.6, the errors that you described with pvfs2-ls (and kernel ls) no longer exist. Is it possible for you to use the latest Orangefs 2.8.6? If so, use this SVN command:
svn co http://www.orangefs.org/svn/orangefs/branches/stable. Also with OrangeFS 2.8.6, we have a new user library that you may want to use instead of the PVFS_SYS calls that I described earlier. If you can tell me what you are trying to do, I can help you decide which way to go. Thanks, Becky On Mon, Oct 15, 2012 at 1:47 PM, Chuck Cranor <[email protected]> wrote: > hi- > > I believe I've found a bug in path handling in OrangeFS 2.8.4. > I don't know if it impacts newer versions, but it is easy to test. > If you make a directory and then make a subdirectory with the same > name in it, then stat gets confused when it encounters filenames with > extra slashes in it. In other words, try this: > > > # cat /etc/pvfs2tab > tcp://p9ea1:3334/pvfs2-fs /pvfsarea/pp pvfs2 defaults,noauto 0 0 > # pvfs2-mkdir /pvfsarea/pp/testdir > # pvfs2-mkdir /pvfsarea/pp/testdir/testdir > # pvfs2-ls /pvfsarea/pp/testdir/some_random_string > PVFS_sys_lookup: No such file or directory (error class: 0) > # pvfs2-ls /pvfsarea/pp//testdir/some_random_string > # > # pvfs2-ls /pvfsarea/pp/testdir/another_random_string > PVFS_sys_lookup: No such file or directory (error class: 0) > # pvfs2-ls /pvfsarea/pp////testdir/another_random_string > # > > note that "pvfs2-ls" does not generate an error if I add the extra "/" > characters (and it should!). > > > > While I am here, where is the documentation/man pages for the libpvfs2 > API? I was looking at the pvfs2fuse as an example of using this API, > but I'm unclear on when I need to call PVFS_Request_free() and > PVFS_util_release_sys_attr(). > > > For example, with PVFS_Request_free(), in pvfs2fuse.c in the function > pvfs_fuse_read() it calls: > > PVFS_Request_contiguous(count, PVFS_BYTE, &mem_req); > > That function appears to malloc() mem_req in PVFS_Request_hvector(). > pvfs_fuse_read() then goes on to call "ret = PVFS_sys_read()" and based > on the return value it does: > > if (ret == 0) > { > PVFS_Request_free(&mem_req); > return(resp_io.total_completed); > } > else > return PVFS_ERROR_TO_ERRNO_N( ret ); > > the PVFS_Request_free() function appears to free mem_req, but it is > only called if PVFS_sys_read() returns 0. > > My question: who frees mem_req if PVFS_sys_read() returns a non-zero value? > > > Next: PVFS_util_release_sys_attr(). pvfs2fuse.c calls PVFS_sys_getattr() > with PVFS_ATTR_SYS_ALL_NOHINT in 3 places: > 1. pvfs_fuse_getattr_pfhp() > 2. pvfs_fuse_readlink() > 3. pvfs_fuse_access() > > in the first case, pvfs_fuse_getattr_pfhp(), it calls > PVFS_util_release_sys_attr(attrs) before returning (attrs is > shorthand for &getattr_response.attr). > > But in the second and third cases (readlink/access), it does not > call PVFS_util_release_sys_attr() at all, and I'm not clear on > why this is different from the pvfs_fuse_getattr_pfhp() case? > > > Can anyone clarify when PVFS_Request_free() and > PVFS_util_release_sys_attr() > needs to be called (and maybe provide a pointer to docs so I can better > check my own code). > > thanks, > chuck > > _______________________________________________ > Pvfs2-users mailing list > [email protected] > http://www.beowulf-underground.org/mailman/listinfo/pvfs2-users > -- Becky Ligon OrangeFS Support and Development Omnibond Systems Anderson, South Carolina
_______________________________________________ Pvfs2-users mailing list [email protected] http://www.beowulf-underground.org/mailman/listinfo/pvfs2-users
