summaryrefslogtreecommitdiff
path: root/usr/src/cmd/smbsrv
diff options
context:
space:
mode:
authorJoyce McIntosh <joyce.mcintosh@nexenta.com>2018-02-27 09:06:32 -0800
committerGordon Ross <gwr@nexenta.com>2019-08-22 17:44:31 -0400
commit87b817582bc68a9992ad7109bd09617975ea4725 (patch)
tree3f2c82edcf3b0eb0911e03be3ba72e4bd7e50669 /usr/src/cmd/smbsrv
parent44bf619d328827ce5eca6833fcd5c69f1592e578 (diff)
downloadillumos-joyent-87b817582bc68a9992ad7109bd09617975ea4725.tar.gz
11032 Time spent sharing SMB filesystems could be reduced by optimizing smb_getdataset for default mount points
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com> Reviewed by: Evan Layton <evan.layton@nexenta.com> Reviewed by: Reviewed by: Matt Barden <matt.barden@nexenta.com> Reviewed by: Jean McCormack <jean.mccormack@nexenta.com> Reviewed by: Gordon Ross <gordon.ross@nexenta.com> Reviewed by: Garrett D'Amore <garrett@damore.org> Approved by: Garrett D'Amore <garrett@damore.org>
Diffstat (limited to 'usr/src/cmd/smbsrv')
-rw-r--r--usr/src/cmd/smbsrv/smbd/smbd_vss.c20
1 files changed, 13 insertions, 7 deletions
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);