[Gluster-devel] [PATCH 3/3 v4] vfs_glusterfs: Samba VFS module for glusterfs
Andrew Bartlett
abartlet at samba.org
Fri May 24 04:31:33 UTC 2013
Sorry for not finding this before, but I just noticed this:
On Thu, 2013-05-23 at 22:30 -0400, Anand Avati wrote:
> static char *vfs_gluster_getwd(struct vfs_handle_struct *handle)
> +{
> + char *cwd;
> + char *ret;
> +
> + cwd = TALLOC_ZERO(NULL, PATH_MAX+1);
> + if (!cwd)
> + return NULL;
> +
> + ret = glfs_getcwd(handle->data, cwd, PATH_MAX);
> + if (!ret)
> + TALLOC_FREE(cwd);
> + return ret;
> +}
While you would expect that getwd would return a talloc-based result, it
doesn't actually:
The other userspace filesystem ceph does:
static char *cephwrap_getwd(struct vfs_handle_struct *handle)
{
const char *cwd = ceph_getcwd(handle->data);
DEBUG(10, ("[CEPH] getwd(%p) = %s\n", handle, cwd));
return SMB_STRDUP(cwd);
}
vfs_default does:
static char *vfswrap_getwd(vfs_handle_struct *handle)
{
char *result;
START_PROFILE(syscall_getwd);
result = sys_getwd();
END_PROFILE(syscall_getwd);
return result;
}
(and sys_getwd() in system.c is malloc based).
The best fix would be to convert the callers and VFS API to use talloc
(and pass in a talloc context). There are only two, in
source3/smbd/vfs.c:vfs_GetWd(), and
source3/torture/cmd_vfs.c:cmd_getwd(). The former really wants a talloc
result anyway!
Andrew Bartlett
--
Andrew Bartlett http://samba.org/~abartlet/
Authentication Developer, Samba Team http://samba.org
More information about the Gluster-devel
mailing list