6861073 dcfs panics when asked to make a hard link
authorAndrew Balfour <Andrew.Balfour@Sun.COM>
Tue, 29 Jun 2010 12:17:39 -0700
changeset 12729 c5742d0d507e
parent 12728 8cbcb3d0424a
child 12730 cb9032e66478
6861073 dcfs panics when asked to make a hard link
usr/src/uts/common/fs/dcfs/dc_vnops.c
--- 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,