patches for easier mirroring, to eliminate a special copy, to make www.freebsd.org/security a full copy of security.freebsd.org and be eventually be the same. For now files are just sitting there. The symlinks are missing. Discussed on: www (repository location) Discussed with: simon (so)
		
			
				
	
	
		
			78 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| Index: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
 | |
| ===================================================================
 | |
| --- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c	(revision 200583)
 | |
| +++ sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c	(working copy)
 | |
| @@ -143,16 +143,19 @@ zfs_znode_cache_constructor(void *buf, void *arg,
 | |
|  
 | |
|  	POINTER_INVALIDATE(&zp->z_zfsvfs);
 | |
|  	ASSERT(!POINTER_IS_VALID(zp->z_zfsvfs));
 | |
| -	ASSERT(vfsp != NULL);
 | |
|  
 | |
| -	error = getnewvnode("zfs", vfsp, &zfs_vnodeops, &vp);
 | |
| -	if (error != 0 && (kmflags & KM_NOSLEEP))
 | |
| -		return (-1);
 | |
| -	ASSERT(error == 0);
 | |
| -	vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
 | |
| -	zp->z_vnode = vp;
 | |
| -	vp->v_data = (caddr_t)zp;
 | |
| -	VN_LOCK_AREC(vp);
 | |
| +	if (vfsp != NULL) {
 | |
| +		error = getnewvnode("zfs", vfsp, &zfs_vnodeops, &vp);
 | |
| +		if (error != 0 && (kmflags & KM_NOSLEEP))
 | |
| +			return (-1);
 | |
| +		ASSERT(error == 0);
 | |
| +		vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
 | |
| +		zp->z_vnode = vp;
 | |
| +		vp->v_data = (caddr_t)zp;
 | |
| +		VN_LOCK_AREC(vp);
 | |
| +	} else {
 | |
| +		zp->z_vnode = NULL;
 | |
| +	}
 | |
|  
 | |
|  	list_link_init(&zp->z_link_node);
 | |
|  
 | |
| @@ -1435,7 +1438,7 @@ zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *
 | |
|  	nvpair_t	*elem;
 | |
|  	int		error;
 | |
|  	znode_t		*rootzp = NULL;
 | |
| -	vnode_t		*vp;
 | |
| +	vnode_t		vnode;
 | |
|  	vattr_t		vattr;
 | |
|  	znode_t		*zp;
 | |
|  
 | |
| @@ -1504,13 +1507,13 @@ zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *
 | |
|  	vattr.va_gid = crgetgid(cr);
 | |
|  
 | |
|  	rootzp = kmem_cache_alloc(znode_cache, KM_SLEEP);
 | |
| -	zfs_znode_cache_constructor(rootzp, &zfsvfs, 0);
 | |
| +	zfs_znode_cache_constructor(rootzp, NULL, 0);
 | |
|  	rootzp->z_unlinked = 0;
 | |
|  	rootzp->z_atime_dirty = 0;
 | |
|  
 | |
| -	vp = ZTOV(rootzp);
 | |
| -	vp->v_type = VDIR;
 | |
| -	VN_LOCK_ASHARE(vp);
 | |
| +	vnode.v_type = VDIR;
 | |
| +	vnode.v_data = rootzp;
 | |
| +	rootzp->z_vnode = &vnode;
 | |
|  
 | |
|  	bzero(&zfsvfs, sizeof (zfsvfs_t));
 | |
|  
 | |
| @@ -1539,16 +1542,10 @@ zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *
 | |
|  	ASSERT(error == 0);
 | |
|  	POINTER_INVALIDATE(&rootzp->z_zfsvfs);
 | |
|  
 | |
| -	VI_LOCK(vp);
 | |
| -	ZTOV(rootzp)->v_data = NULL;
 | |
| -	ZTOV(rootzp)->v_count = 0;
 | |
| -	ZTOV(rootzp)->v_holdcnt = 0;
 | |
| -	rootzp->z_vnode = NULL;
 | |
| -	VOP_UNLOCK(vp, 0);
 | |
| -	vdestroy(vp);
 | |
|  	dmu_buf_rele(rootzp->z_dbuf, NULL);
 | |
|  	rootzp->z_dbuf = NULL;
 | |
|  	mutex_destroy(&zfsvfs.z_znodes_lock);
 | |
| +	rootzp->z_vnode = NULL;
 | |
|  	kmem_cache_free(znode_cache, rootzp);
 | |
|  }
 | |
|  
 |