diff options
| author | Joyce McIntosh <joyce.mcintosh@nexenta.com> | 2018-02-27 09:06:32 -0800 |
|---|---|---|
| committer | Gordon Ross <gwr@nexenta.com> | 2019-08-22 17:44:31 -0400 |
| commit | 87b817582bc68a9992ad7109bd09617975ea4725 (patch) | |
| tree | 3f2c82edcf3b0eb0911e03be3ba72e4bd7e50669 /usr/src/cmd/smbsrv | |
| parent | 44bf619d328827ce5eca6833fcd5c69f1592e578 (diff) | |
| download | illumos-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.c | 20 |
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); |
