--- a/usr/src/uts/common/fs/dcfs/dc_vnops.c Tue Jun 29 12:42:37 2010 -0400
+++ b/usr/src/uts/common/fs/dcfs/dc_vnops.c Tue Jun 29 12:17:39 2010 -0700
@@ -205,6 +205,7 @@
static int dc_seek(struct vnode *, offset_t, offset_t *, caller_context_t *);
static int dc_frlock(struct vnode *, int, struct flock64 *, int, offset_t,
struct flk_callback *, struct cred *, caller_context_t *);
+static int dc_realvp(struct vnode *, struct vnode **, caller_context_t *);
static int dc_getpage(struct vnode *, offset_t, size_t, uint_t *,
struct page **, size_t, struct seg *, caddr_t, enum seg_rw,
struct cred *, caller_context_t *);
@@ -231,6 +232,7 @@
VOPNAME_FID, { .vop_fid = dc_fid },
VOPNAME_SEEK, { .vop_seek = dc_seek },
VOPNAME_FRLOCK, { .vop_frlock = dc_frlock },
+ VOPNAME_REALVP, { .vop_realvp = dc_realvp },
VOPNAME_GETPAGE, { .vop_getpage = dc_getpage },
VOPNAME_PUTPAGE, { .vop_putpage = dc_putpage },
VOPNAME_MAP, { .vop_map = dc_map },
@@ -511,6 +513,18 @@
return (dc_getblock_miss(vp, off, len, ppp, seg, addr, rw, cr));
}
+static int
+dc_realvp(vnode_t *vp, vnode_t **vpp, caller_context_t *ct)
+{
+ struct vnode *rvp;
+
+ vp = VTODC(vp)->dc_subvp;
+ if (VOP_REALVP(vp, &rvp, ct) == 0)
+ vp = rvp;
+ *vpp = vp;
+ return (0);
+}
+
/*ARGSUSED10*/
static int
dc_getpage(struct vnode *vp, offset_t off, size_t len, uint_t *protp,