[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