6938757 SMB and NFS referrals not working correctly
authorMark Shellenbaum <Mark.Shellenbaum@Sun.COM>
Wed, 31 Mar 2010 15:46:12 -0600
changeset 12050 5879aa161e65
parent 12049 5f14b1b5f869
child 12051 42edfa0c459c
6938757 SMB and NFS referrals not working correctly 6939680 zfs_sa_upgrade can leak slink pointer 6939859 zfs maps first SID incorrectly when no fuid table exists
usr/src/cmd/zdb/zdb.c
usr/src/uts/common/fs/zfs/zfs_fuid.c
usr/src/uts/common/fs/zfs/zfs_sa.c
usr/src/uts/common/fs/zfs/zfs_znode.c
--- a/usr/src/cmd/zdb/zdb.c	Wed Mar 31 15:31:10 2010 -0600
+++ b/usr/src/cmd/zdb/zdb.c	Wed Mar 31 15:46:12 2010 -0600
@@ -19,8 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  */
 
 #include <stdio.h>
@@ -1240,9 +1239,10 @@
 	sa_handle_t *hdl;
 	uint64_t xattr, rdev, gen;
 	uint64_t uid, gid, mode, fsize, parent, links;
+	uint64_t pflags;
 	uint64_t acctm[2], modtm[2], chgtm[2], crtm[2];
 	time_t z_crtime, z_atime, z_mtime, z_ctime;
-	sa_bulk_attr_t bulk[11];
+	sa_bulk_attr_t bulk[12];
 	int idx = 0;
 	int error;
 
@@ -1285,6 +1285,8 @@
 	    crtm, 16);
 	SA_ADD_BULK_ATTR(bulk, idx, sa_attr_table[ZPL_CTIME], NULL,
 	    chgtm, 16);
+	SA_ADD_BULK_ATTR(bulk, idx, sa_attr_table[ZPL_FLAGS], NULL,
+	    &pflags, 8);
 
 	if (sa_bulk_lookup(hdl, bulk, idx)) {
 		(void) sa_handle_destroy(hdl);
@@ -1318,6 +1320,7 @@
 	(void) printf("\tsize	%llu\n", (u_longlong_t)fsize);
 	(void) printf("\tparent	%llu\n", (u_longlong_t)parent);
 	(void) printf("\tlinks	%llu\n", (u_longlong_t)links);
+	(void) printf("\tpflags	%llx\n", (u_longlong_t)pflags);
 	if (sa_lookup(hdl, sa_attr_table[ZPL_XATTR], &xattr,
 	    sizeof (uint64_t)) == 0)
 		(void) printf("\txattr	%llu\n", (u_longlong_t)xattr);
--- a/usr/src/uts/common/fs/zfs/zfs_fuid.c	Wed Mar 31 15:31:10 2010 -0600
+++ b/usr/src/uts/common/fs/zfs/zfs_fuid.c	Wed Mar 31 15:46:12 2010 -0600
@@ -19,8 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  */
 
 #include <sys/zfs_context.h>
@@ -376,7 +375,7 @@
 
 	rw_enter(&zfsvfs->z_fuid_lock, RW_READER);
 
-	if (zfsvfs->z_fuid_obj)
+	if (zfsvfs->z_fuid_obj || zfsvfs->z_fuid_dirty)
 		domain = zfs_fuid_idx_domain(&zfsvfs->z_fuid_idx, idx);
 	else
 		domain = nulldomain;
--- a/usr/src/uts/common/fs/zfs/zfs_sa.c	Wed Mar 31 15:31:10 2010 -0600
+++ b/usr/src/uts/common/fs/zfs/zfs_sa.c	Wed Mar 31 15:46:12 2010 -0600
@@ -19,8 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
  */
 
 #include <sys/types.h>
@@ -289,8 +288,10 @@
 		else {
 			dmu_buf_t *dbp;
 			if (dmu_buf_hold(zfsvfs->z_os, zp->z_id, 0,
-			    FTAG, &dbp))
+			    FTAG, &dbp)) {
+				kmem_free(slink, zp->z_size + 1);
 				return;
+			}
 			bcopy(dbp->db_data, slink, zp->z_size);
 			dmu_buf_rele(dbp, FTAG);
 		}
--- a/usr/src/uts/common/fs/zfs/zfs_znode.c	Wed Mar 31 15:31:10 2010 -0600
+++ b/usr/src/uts/common/fs/zfs/zfs_znode.c	Wed Mar 31 15:46:12 2010 -0600
@@ -19,8 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  */
 
 /* Portions Copyright 2007 Jeremy Teo */
@@ -987,12 +986,12 @@
 		(*zpp)->z_sa_hdl = sa_hdl;
 	}
 
+	(*zpp)->z_pflags = pflags;
+	(*zpp)->z_mode = mode;
+
 	if (vap->va_mask & AT_XVATTR)
 		zfs_xvattr_set(*zpp, (xvattr_t *)vap, tx);
 
-	(*zpp)->z_pflags = pflags;
-	(*zpp)->z_mode = mode;
-
 	if (obj_type == DMU_OT_ZNODE ||
 	    acl_ids->z_aclp->z_version < ZFS_ACL_VERSION_FUID) {
 		err = zfs_aclset_common(*zpp, acl_ids->z_aclp, cr, tx);