Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 7 Sep 2009 21:58:54 +0000 (UTC)
From:      Pawel Jakub Dawidek <pjd@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r196954 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Message-ID:  <200909072158.n87LwsQR027945@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: pjd
Date: Mon Sep  7 21:58:54 2009
New Revision: 196954
URL: http://svn.freebsd.org/changeset/base/196954

Log:
  If we have to use avl_find(), optimize a bit and use avl_insert() instead of
  avl_add() (the latter is actually a wrapper around avl_find() + avl_insert()).
  
  Fix similar case in the code that is currently commented out.

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c	Mon Sep  7 21:46:51 2009	(r196953)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c	Mon Sep  7 21:58:54 2009	(r196954)
@@ -669,9 +669,12 @@ zfsctl_snapdir_remove(vnode_t *dvp, char
 	if (sep) {
 		avl_remove(&sdp->sd_snaps, sep);
 		err = zfsctl_unmount_snap(sep, MS_FORCE, cr);
-		if (err)
-			avl_add(&sdp->sd_snaps, sep);
-		else
+		if (err) {
+			avl_index_t where;
+
+			if (avl_find(&sdp->sd_snaps, sep, &where) == NULL)
+				avl_insert(&sdp->sd_snaps, sep, where);
+		} else
 			err = dmu_objset_destroy(snapname);
 	} else {
 		err = ENOENT;
@@ -1344,6 +1347,8 @@ zfsctl_umount_snapshots(vfs_t *vfsp, int
 		if (vn_ismntpt(sep->se_root)) {
 			error = zfsctl_unmount_snap(sep, fflags, cr);
 			if (error) {
+				avl_index_t where;
+
 				/*
 				 * Before reinserting snapshot to the tree,
 				 * check if it was actually removed. For example
@@ -1351,8 +1356,8 @@ zfsctl_umount_snapshots(vfs_t *vfsp, int
 				 * have an error here, but there will be no need
 				 * to reinsert snapshot.
 				 */
-				if (avl_find(&sdp->sd_snaps, sep, NULL) == NULL)
-					avl_add(&sdp->sd_snaps, sep);
+				if (avl_find(&sdp->sd_snaps, sep, &where) == NULL)
+					avl_insert(&sdp->sd_snaps, sep, where);
 				break;
 			}
 		}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200909072158.n87LwsQR027945>