summaryrefslogtreecommitdiffstats
path: root/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2007-04-08 16:29:25 +0000
committerpjd <pjd@FreeBSD.org>2007-04-08 16:29:25 +0000
commit2b260dcd5e356a3d85c66dff3715260105c412f7 (patch)
tree414979d8bf91ece25474dc6b933621fc94bb051b /sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c
parent4b06e89211feda93bee19a93c165c0d4b9911622 (diff)
downloadFreeBSD-src-2b260dcd5e356a3d85c66dff3715260105c412f7.zip
FreeBSD-src-2b260dcd5e356a3d85c66dff3715260105c412f7.tar.gz
MFp4: Synchronize with recent OpenSolaris changes.
Diffstat (limited to 'sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c')
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c
index 97779a2..5e563b6 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -207,6 +207,29 @@ dsl_dir_name(dsl_dir_t *dd, char *buf)
}
}
+/* Calculate name legnth, avoiding all the strcat calls of dsl_dir_name */
+int
+dsl_dir_namelen(dsl_dir_t *dd)
+{
+ int result = 0;
+
+ if (dd->dd_parent) {
+ /* parent's name + 1 for the "/" */
+ result = dsl_dir_namelen(dd->dd_parent) + 1;
+ }
+
+ if (!MUTEX_HELD(&dd->dd_lock)) {
+ /* see dsl_dir_name */
+ mutex_enter(&dd->dd_lock);
+ result += strlen(dd->dd_myname);
+ mutex_exit(&dd->dd_lock);
+ } else {
+ result += strlen(dd->dd_myname);
+ }
+
+ return (result);
+}
+
int
dsl_dir_is_private(dsl_dir_t *dd)
{
OpenPOWER on IntegriCloud