svn commit: r197177 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs

Pawel Jakub Dawidek pjd at FreeBSD.org
Sun Sep 13 21:40:36 UTC 2009


Author: pjd
Date: Sun Sep 13 21:40:36 2009
New Revision: 197177
URL: http://svn.freebsd.org/changeset/base/197177

Log:
  Support both case: when snapshot is already mounted and when it is not yet
  mounted.
  
  MFC after:	3 days

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c	Sun Sep 13 21:30:18 2009	(r197176)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c	Sun Sep 13 21:40:36 2009	(r197177)
@@ -1182,11 +1182,10 @@ zfs_fhtovp(vfs_t *vfsp, fid_t *fidp, vno
 	ZFS_ENTER(zfsvfs);
 
 	/*
-	 * On FreeBSD we are already called with snapshot's mount point
-	 * and not the mount point of its parent.
+	 * On FreeBSD we can get snapshot's mount point or its parent file
+	 * system mount point depending if snapshot is already mounted or not.
 	 */
-#ifndef __FreeBSD__
-	if (fidp->fid_len == LONG_FID_LEN) {
+	if (zfsvfs->z_parent == zfsvfs && fidp->fid_len == LONG_FID_LEN) {
 		zfid_long_t	*zlfid = (zfid_long_t *)fidp;
 		uint64_t	objsetid = 0;
 		uint64_t	setgen = 0;
@@ -1204,7 +1203,6 @@ zfs_fhtovp(vfs_t *vfsp, fid_t *fidp, vno
 			return (EINVAL);
 		ZFS_ENTER(zfsvfs);
 	}
-#endif
 
 	if (fidp->fid_len == SHORT_FID_LEN || fidp->fid_len == LONG_FID_LEN) {
 		zfid_short_t	*zfid = (zfid_short_t *)fidp;


More information about the svn-src-all mailing list