diff options
author | pjd <pjd@FreeBSD.org> | 2007-04-08 16:29:25 +0000 |
---|---|---|
committer | pjd <pjd@FreeBSD.org> | 2007-04-08 16:29:25 +0000 |
commit | 2b260dcd5e356a3d85c66dff3715260105c412f7 (patch) | |
tree | 414979d8bf91ece25474dc6b933621fc94bb051b /sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c | |
parent | 4b06e89211feda93bee19a93c165c0d4b9911622 (diff) | |
download | FreeBSD-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.c | 25 |
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) { |