svn commit: r224636 -
stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Xin LI
delphij at FreeBSD.org
Wed Aug 3 18:11:54 UTC 2011
Author: delphij
Date: Wed Aug 3 18:11:53 2011
New Revision: 224636
URL: http://svn.freebsd.org/changeset/base/224636
Log:
MFC r224231,224251-224252:
Make ZFS work better with respect to device nodes.
PR: kern/159010
Modified:
stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
Directory Properties:
stable/8/sys/ (props changed)
stable/8/sys/amd64/include/xen/ (props changed)
stable/8/sys/cddl/contrib/opensolaris/ (props changed)
stable/8/sys/contrib/dev/acpica/ (props changed)
stable/8/sys/contrib/pf/ (props changed)
Modified: stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
==============================================================================
--- stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Wed Aug 3 14:29:20 2011 (r224635)
+++ stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Wed Aug 3 18:11:53 2011 (r224636)
@@ -2648,11 +2648,11 @@ zfs_getattr(vnode_t *vp, vattr_t *vap, i
uint32_t blksize;
u_longlong_t nblocks;
uint64_t links;
- uint64_t mtime[2], ctime[2], crtime[2];
+ uint64_t mtime[2], ctime[2], crtime[2], rdev;
xvattr_t *xvap = (xvattr_t *)vap; /* vap may be an xvattr_t * */
xoptattr_t *xoap = NULL;
boolean_t skipaclchk = (flags & ATTR_NOACLCHECK) ? B_TRUE : B_FALSE;
- sa_bulk_attr_t bulk[3];
+ sa_bulk_attr_t bulk[4];
int count = 0;
ZFS_ENTER(zfsvfs);
@@ -2663,6 +2663,9 @@ zfs_getattr(vnode_t *vp, vattr_t *vap, i
SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zfsvfs), NULL, &mtime, 16);
SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), NULL, &ctime, 16);
SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), NULL, &crtime, 16);
+ if (vp->v_type == VBLK || vp->v_type == VCHR)
+ SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_RDEV(zfsvfs), NULL,
+ &rdev, 8);
if ((error = sa_bulk_lookup(zp->z_sa_hdl, bulk, count)) != 0) {
ZFS_EXIT(zfsvfs);
@@ -2691,7 +2694,11 @@ zfs_getattr(vnode_t *vp, vattr_t *vap, i
mutex_enter(&zp->z_lock);
vap->va_type = IFTOVT(zp->z_mode);
vap->va_mode = zp->z_mode & ~S_IFMT;
-// vap->va_fsid = zp->z_zfsvfs->z_vfs->vfs_dev;
+#ifdef sun
+ vap->va_fsid = zp->z_zfsvfs->z_vfs->vfs_dev;
+#else
+ vap->va_fsid = vp->v_mount->mnt_stat.f_fsid.val[0];
+#endif
vap->va_nodeid = zp->z_id;
if ((vp->v_flag & VROOT) && zfs_show_ctldir(zp))
links = zp->z_links + 1;
@@ -2699,8 +2706,12 @@ zfs_getattr(vnode_t *vp, vattr_t *vap, i
links = zp->z_links;
vap->va_nlink = MIN(links, UINT32_MAX); /* nlink_t limit! */
vap->va_size = zp->z_size;
- vap->va_fsid = vp->v_mount->mnt_stat.f_fsid.val[0];
-// vap->va_rdev = zfs_cmpldev(pzp->zp_rdev);
+#ifdef sun
+ vap->va_rdev = vp->v_rdev;
+#else
+ if (vp->v_type == VBLK || vp->v_type == VCHR)
+ vap->va_rdev = zfs_cmpldev(rdev);
+#endif
vap->va_seq = zp->z_seq;
vap->va_flags = 0; /* FreeBSD: Reset chflags(2) flags. */
Modified: stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
==============================================================================
--- stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c Wed Aug 3 14:29:20 2011 (r224635)
+++ stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c Wed Aug 3 18:11:53 2011 (r224636)
@@ -700,7 +700,23 @@ zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_bu
case VDIR:
zp->z_zn_prefetch = B_TRUE; /* z_prefetch default is enabled */
break;
+#ifdef sun
+ case VBLK:
+ case VCHR:
+ {
+ uint64_t rdev;
+ VERIFY(sa_lookup(zp->z_sa_hdl, SA_ZPL_RDEV(zfsvfs),
+ &rdev, sizeof (rdev)) == 0);
+
+ vp->v_rdev = zfs_cmpldev(rdev);
+ }
+ break;
+#endif /* sun */
case VFIFO:
+#ifdef sun
+ case VSOCK:
+ case VDOOR:
+#endif /* sun */
vp->v_op = &zfs_fifoops;
break;
case VREG:
@@ -709,6 +725,14 @@ zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_bu
vp->v_op = &zfs_shareops;
}
break;
+#ifdef sun
+ case VLNK:
+ vn_setops(vp, zfs_symvnodeops);
+ break;
+ default:
+ vn_setops(vp, zfs_evnodeops);
+ break;
+#endif /* sun */
}
if (vp->v_type != VFIFO)
VN_LOCK_ASHARE(vp);
More information about the svn-src-all
mailing list