Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 11 Mar 2017 16:00:49 +0000 (UTC)
From:      Andriy Gapon <avg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r315076 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Message-ID:  <201703111600.v2BG0nsq029058@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: avg
Date: Sat Mar 11 16:00:49 2017
New Revision: 315076
URL: https://svnweb.freebsd.org/changeset/base/315076

Log:
  zfs: provide a special vptocnp method for the .zfs vnode
  
  vop_stdvptocnp() doesn't work properly if .zfs directory is hidden.
  
  Reported by:	swills, des
  Tested by:	des
  MFC after:	1 week
  MFC with:	r314048

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

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c	Sat Mar 11 15:57:36 2017	(r315075)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c	Sat Mar 11 16:00:49 2017	(r315076)
@@ -706,6 +706,28 @@ zfsctl_root_readdir(ap)
 	return (0);
 }
 
+static int
+zfsctl_root_vptocnp(struct vop_vptocnp_args *ap)
+{
+	static const char dotzfs_name[4] = ".zfs";
+	vnode_t *dvp;
+	int error;
+
+	if (*ap->a_buflen < sizeof (dotzfs_name))
+		return (SET_ERROR(ENOMEM));
+
+	error = vn_vget_ino_gen(ap->a_vp, zfsctl_fs_root_vnode, NULL,
+	    LK_SHARED, &dvp);
+	if (error != 0)
+		return (SET_ERROR(error));
+
+	VOP_UNLOCK(dvp, 0);
+	*ap->a_vpp = dvp;
+	*ap->a_buflen -= sizeof (dotzfs_name);
+	bcopy(dotzfs_name, ap->a_buf + *ap->a_buflen, sizeof (dotzfs_name));
+	return (0);
+}
+
 static struct vop_vector zfsctl_ops_root = {
 	.vop_default =	&default_vnodeops,
 	.vop_open =	zfsctl_common_open,
@@ -719,6 +741,7 @@ static struct vop_vector zfsctl_ops_root
 	.vop_reclaim =	zfsctl_common_reclaim,
 	.vop_fid =	zfsctl_common_fid,
 	.vop_print =	zfsctl_common_print,
+	.vop_vptocnp =	zfsctl_root_vptocnp,
 };
 
 static int



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201703111600.v2BG0nsq029058>