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;
                        }
                }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to