[Gluster-devel] [PATCH 3/3 v4] vfs_glusterfs: Samba VFS module for glusterfs

Anand Avati avati at redhat.com
Fri May 24 05:38:12 UTC 2013


On 5/23/13 9:31 PM, Andrew Bartlett wrote:
> Sorry for not finding this before, but I just noticed this:

You couldn't because it was malloc() based in the previous patch. I 
changed it (wrongly) based on a review comment outside the mailing list. 
Thanks for catching! Will send out a v5 patch.

Avati

> 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
>





More information about the Gluster-devel mailing list