From 87b817582bc68a9992ad7109bd09617975ea4725 Mon Sep 17 00:00:00 2001 From: Joyce McIntosh Date: Tue, 27 Feb 2018 09:06:32 -0800 Subject: 11032 Time spent sharing SMB filesystems could be reduced by optimizing smb_getdataset for default mount points Reviewed by: Sanjay Nadkarni Reviewed by: Evan Layton Reviewed by: Reviewed by: Matt Barden Reviewed by: Jean McCormack Reviewed by: Gordon Ross Reviewed by: Garrett D'Amore Approved by: Garrett D'Amore --- usr/src/cmd/smbsrv/smbd/smbd_vss.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'usr/src/cmd/smbsrv') diff --git a/usr/src/cmd/smbsrv/smbd/smbd_vss.c b/usr/src/cmd/smbsrv/smbd/smbd_vss.c index 759c696513..b0d114631d 100644 --- a/usr/src/cmd/smbsrv/smbd/smbd_vss.c +++ b/usr/src/cmd/smbsrv/smbd/smbd_vss.c @@ -21,7 +21,7 @@ /* * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright 2014 Nexenta Systems, Inc. All rights reserved. + * Copyright 2018 Nexenta Systems, Inc. All rights reserved. * Copyright 2016 Martin Matuska. All rights reserved. */ @@ -110,11 +110,13 @@ smbd_vss_get_count(const char *path, uint32_t *count) bzero(&vss_count, sizeof (smbd_vss_count_t)); *count = 0; - if (smb_getdataset(path, dataset, MAXPATHLEN) != 0) + if ((libhd = libzfs_init()) == NULL) return (-1); - if ((libhd = libzfs_init()) == NULL) + if (smb_getdataset(libhd, path, dataset, MAXPATHLEN) != 0) { + libzfs_fini(libhd); return (-1); + } if ((zfshd = zfs_open(libhd, dataset, ZFS_TYPE_DATASET)) == NULL) { libzfs_fini(libhd); @@ -165,16 +167,18 @@ smbd_vss_get_snapshots(const char *path, uint32_t count, vss_uint64_date.gd_count = count; vss_uint64_date.gd_return_count = 0; vss_uint64_date.gd_gmt_array = malloc(count * sizeof (uint64_t)); + if (vss_uint64_date.gd_gmt_array == NULL) return; - if (smb_getdataset(path, dataset, MAXPATHLEN) != 0) { + if ((libhd = libzfs_init()) == NULL) { free(vss_uint64_date.gd_gmt_array); return; } - if ((libhd = libzfs_init()) == NULL) { + if (smb_getdataset(libhd, path, dataset, MAXPATHLEN) != 0) { free(vss_uint64_date.gd_gmt_array); + libzfs_fini(libhd); return; } @@ -251,11 +255,13 @@ smbd_vss_map_gmttoken(const char *path, char *gmttoken, time_t toktime, vss_map_gmttoken.mg_snapname = snapname; *snapname = '\0'; - if (smb_getdataset(path, dataset, MAXPATHLEN) != 0) + if ((libhd = libzfs_init()) == NULL) return (-1); - if ((libhd = libzfs_init()) == NULL) + if (smb_getdataset(libhd, path, dataset, MAXPATHLEN) != 0) { + libzfs_fini(libhd); return (-1); + } if ((zfshd = zfs_open(libhd, dataset, ZFS_TYPE_DATASET)) == NULL) { libzfs_fini(libhd); -- cgit v1.2.3