Add a new field to in-core znode, z_rdev, to represent device nodes.

PR:		kern/159010
Reviewed by:	mm@
Approved by:	re (kib)
MFC after:	2 weeks
This commit is contained in:
Xin LI 2011-07-20 16:53:32 +00:00
parent 7b4f570ca1
commit b1ad061e42
3 changed files with 12 additions and 1 deletions

View File

@ -209,6 +209,7 @@ typedef struct znode {
boolean_t z_is_sa; /* are we native sa? */
/* FreeBSD-specific field. */
struct task z_task;
dev_t z_rdev;
} znode_t;

View File

@ -2694,7 +2694,7 @@ zfs_getattr(vnode_t *vp, vattr_t *vap, int flags, cred_t *cr,
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);
vap->va_rdev = zp->z_rdev;
vap->va_seq = zp->z_seq;
vap->va_flags = 0; /* FreeBSD: Reset chflags(2) flags. */

View File

@ -700,6 +700,16 @@ zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_buf_t *db, int blksz,
case VDIR:
zp->z_zn_prefetch = B_TRUE; /* z_prefetch default is enabled */
break;
case VBLK:
case VCHR:
{
uint64_t rdev;
VERIFY(sa_lookup(zp->z_sa_hdl, SA_ZPL_RDEV(zfsvfs),
&rdev, sizeof (rdev)) == 0);
zp->z_rdev = zfs_cmpldev(rdev);
}
break;
case VFIFO:
vp->v_op = &zfs_fifoops;
break;