Print this page
NEX-16159 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>
SMB-136 Snapshots not visible in Windows previous versions
*** 19,29 ****
* CDDL HEADER END
*/
/*
* Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
! * Copyright 2014 Nexenta Systems, Inc. All rights reserved.
* Copyright 2016 Martin Matuska. All rights reserved.
*/
#include <synch.h>
#include <pthread.h>
--- 19,29 ----
* CDDL HEADER END
*/
/*
* Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
! * Copyright 2018 Nexenta Systems, Inc. All rights reserved.
* Copyright 2016 Martin Matuska. All rights reserved.
*/
#include <synch.h>
#include <pthread.h>
*** 108,122 ****
smbd_vss_count_t vss_count;
bzero(&vss_count, sizeof (smbd_vss_count_t));
*count = 0;
! if (smb_getdataset(path, dataset, MAXPATHLEN) != 0)
return (-1);
! if ((libhd = libzfs_init()) == NULL)
return (-1);
if ((zfshd = zfs_open(libhd, dataset, ZFS_TYPE_DATASET)) == NULL) {
libzfs_fini(libhd);
return (-1);
}
--- 108,124 ----
smbd_vss_count_t vss_count;
bzero(&vss_count, sizeof (smbd_vss_count_t));
*count = 0;
! if ((libhd = libzfs_init()) == NULL)
return (-1);
! 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);
return (-1);
}
*** 163,182 ****
count = SMBD_VSS_SNAPSHOT_MAX;
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) {
free(vss_uint64_date.gd_gmt_array);
return;
}
! if ((libhd = libzfs_init()) == NULL) {
free(vss_uint64_date.gd_gmt_array);
return;
}
if ((zfshd = zfs_open(libhd, dataset, ZFS_TYPE_DATASET)) == NULL) {
free(vss_uint64_date.gd_gmt_array);
--- 165,186 ----
count = SMBD_VSS_SNAPSHOT_MAX;
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 ((libhd = libzfs_init()) == NULL) {
free(vss_uint64_date.gd_gmt_array);
return;
}
! if (smb_getdataset(libhd, path, dataset, MAXPATHLEN) != 0) {
free(vss_uint64_date.gd_gmt_array);
+ libzfs_fini(libhd);
return;
}
if ((zfshd = zfs_open(libhd, dataset, ZFS_TYPE_DATASET)) == NULL) {
free(vss_uint64_date.gd_gmt_array);
*** 249,263 ****
vss_map_gmttoken.mg_snaptime = toktime;
vss_map_gmttoken.mg_snapname = snapname;
*snapname = '\0';
! if (smb_getdataset(path, dataset, MAXPATHLEN) != 0)
return (-1);
! if ((libhd = libzfs_init()) == NULL)
return (-1);
if ((zfshd = zfs_open(libhd, dataset, ZFS_TYPE_DATASET)) == NULL) {
libzfs_fini(libhd);
return (-1);
}
--- 253,269 ----
vss_map_gmttoken.mg_snaptime = toktime;
vss_map_gmttoken.mg_snapname = snapname;
*snapname = '\0';
! if ((libhd = libzfs_init()) == NULL)
return (-1);
! 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);
return (-1);
}