[PATCHES] vfs_gpfs: Remove unnecessary calls for handling paths

Jeremy Allison jra at samba.org
Fri May 25 20:12:46 UTC 2018


On Thu, May 24, 2018 at 04:57:33PM -0700, Christof Schmitt wrote:
> On Thu, May 24, 2018 at 04:31:01PM -0700, Jeremy Allison wrote:
> > On Thu, May 24, 2018 at 04:30:17PM -0700, Christof Schmitt via samba-technical wrote:
> > > Small small optimizations. get_full_smb_filename is not required as that
> > > only adds stream information. The full path in
> > > vfs_gpfs_get_real_filename can be construced through full_path_tos to
> > > avoid the talloc call.
> > > 
> > > Please review and push.
> > 
> > ENOPATCH :-).
> 
> Here :-)

LGTM. Pushed, with the minor change of initializing both
full_path and to_free to NULL in the last patch.

> From 946983218da9c2dd3db26ef4142d0b2f44dca2f1 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Tue, 22 May 2018 12:22:06 -0700
> Subject: [PATCH 1/3] vfs_gpfs: Remove wrong get_full_smb_filename from ntimes
>  function
> 
> Updating the timestamps requires the path to the file, but no stream
> information.
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/vfs_gpfs.c | 12 ++----------
>  1 file changed, 2 insertions(+), 10 deletions(-)
> 
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index a0fd48f..bd64b20 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -1879,23 +1879,15 @@ static int vfs_gpfs_ntimes(struct vfs_handle_struct *handle,
>  
>          struct gpfs_winattr attrs;
>          int ret;
> -        char *path = NULL;
> -        NTSTATUS status;
>  	struct gpfs_config_data *config;
>  
>  	SMB_VFS_HANDLE_GET_DATA(handle, config,
>  				struct gpfs_config_data,
>  				return -1);
>  
> -	status = get_full_smb_filename(talloc_tos(), smb_fname, &path);
> -	if (!NT_STATUS_IS_OK(status)) {
> -		errno = map_errno_from_nt_status(status);
> -		return -1;
> -	}
> -
>  	/* Try to use gpfs_set_times if it is enabled and available */
>  	if (config->settimes) {
> -		ret = smbd_gpfs_set_times_path(path, ft);
> +		ret = smbd_gpfs_set_times_path(smb_fname->base_name, ft);
>  
>  		if (ret == 0 || (ret == -1 && errno != ENOSYS)) {
>  			return ret;
> @@ -1928,7 +1920,7 @@ static int vfs_gpfs_ntimes(struct vfs_handle_struct *handle,
>          attrs.creationTime.tv_sec = ft->create_time.tv_sec;
>          attrs.creationTime.tv_nsec = ft->create_time.tv_nsec;
>  
> -	ret = gpfswrap_set_winattrs_path(discard_const_p(char, path),
> +	ret = gpfswrap_set_winattrs_path(smb_fname->base_name,
>  					 GPFS_WINATTR_SET_CREATION_TIME,
>  					 &attrs);
>          if(ret == -1 && errno != ENOSYS){
> -- 
> 1.8.3.1
> 
> 
> From d4d08b1dbe84620d8b92f66873f211955f021041 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Tue, 22 May 2018 12:25:42 -0700
> Subject: [PATCH 2/3] vfs_gpfs: Remove get_full_smb_filename from is_offline
>  check
> 
> No stream information is required here.
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/vfs_gpfs.c | 17 ++++-------------
>  1 file changed, 4 insertions(+), 13 deletions(-)
> 
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index bd64b20..c7eb81b 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -1994,8 +1994,6 @@ static bool vfs_gpfs_is_offline(struct vfs_handle_struct *handle,
>  				SMB_STRUCT_STAT *sbuf)
>  {
>  	struct gpfs_winattr attrs;
> -	char *path = NULL;
> -	NTSTATUS status;
>  	struct gpfs_config_data *config;
>  	int ret;
>  
> @@ -2007,24 +2005,17 @@ static bool vfs_gpfs_is_offline(struct vfs_handle_struct *handle,
>  		return false;
>  	}
>  
> -	status = get_full_smb_filename(talloc_tos(), fname, &path);
> -	if (!NT_STATUS_IS_OK(status)) {
> -		return false;
> -	}
> -
> -	ret = gpfswrap_get_winattrs_path(path, &attrs);
> +	ret = gpfswrap_get_winattrs_path(fname->base_name, &attrs);
>  	if (ret == -1) {
> -		TALLOC_FREE(path);
>  		return false;
>  	}
>  
>  	if ((attrs.winAttrs & GPFS_WINATTR_OFFLINE) != 0) {
> -		DEBUG(10, ("%s is offline\n", path));
> -		TALLOC_FREE(path);
> +		DBG_DEBUG("%s is offline\n", fname->base_name);
>  		return true;
>  	}
> -	DEBUG(10, ("%s is online\n", path));
> -	TALLOC_FREE(path);
> +
> +	DBG_DEBUG("%s is online\n", fname->base_name);
>  	return false;
>  }
>  
> -- 
> 1.8.3.1
> 
> 
> From cdc908006f2e099cb6305a7a771f291ba3e54c08 Mon Sep 17 00:00:00 2001
> From: Christof Schmitt <cs at samba.org>
> Date: Tue, 22 May 2018 12:52:58 -0700
> Subject: [PATCH 3/3] vfs_gpfs: Use full_path_tos instead of talloc_asprintf
> 
> full_path_tos avoids the talloc call for most cases; use that instead of
> talloc_asprintf.
> 
> Signed-off-by: Christof Schmitt <cs at samba.org>
> ---
>  source3/modules/vfs_gpfs.c | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
> index c7eb81b..3e4b090 100644
> --- a/source3/modules/vfs_gpfs.c
> +++ b/source3/modules/vfs_gpfs.c
> @@ -243,8 +243,9 @@ static int vfs_gpfs_get_real_filename(struct vfs_handle_struct *handle,
>  				      char **found_name)
>  {
>  	int result;
> -	char *full_path;
> -	char real_pathname[PATH_MAX+1];
> +	char *full_path, *to_free;
> +	char real_pathname[PATH_MAX+1], tmpbuf[PATH_MAX];
> +	size_t full_path_len;
>  	int buflen;
>  	bool mangled;
>  	struct gpfs_config_data *config;
> @@ -264,8 +265,9 @@ static int vfs_gpfs_get_real_filename(struct vfs_handle_struct *handle,
>  						      mem_ctx, found_name);
>  	}
>  
> -	full_path = talloc_asprintf(talloc_tos(), "%s/%s", path, name);
> -	if (full_path == NULL) {
> +	full_path_len = full_path_tos(path, name, tmpbuf, sizeof(tmpbuf),
> +				      &full_path, &to_free);
> +	if (full_path_len == -1) {
>  		errno = ENOMEM;
>  		return -1;
>  	}
> @@ -275,7 +277,7 @@ static int vfs_gpfs_get_real_filename(struct vfs_handle_struct *handle,
>  	result = gpfswrap_get_realfilename_path(full_path, real_pathname,
>  						&buflen);
>  
> -	TALLOC_FREE(full_path);
> +	TALLOC_FREE(to_free);
>  
>  	if ((result == -1) && (errno == ENOSYS)) {
>  		return SMB_VFS_NEXT_GET_REAL_FILENAME(
> -- 
> 1.8.3.1
> 




More information about the samba-technical mailing list