[Midnightbsd-cvs] src [8477] trunk/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c: bailout early if directory is unlinked

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Sun Sep 18 18:28:41 EDT 2016


Revision: 8477
          http://svnweb.midnightbsd.org/src/?rev=8477
Author:   laffer1
Date:     2016-09-18 18:28:41 -0400 (Sun, 18 Sep 2016)
Log Message:
-----------
bailout early if directory is unlinked

Modified Paths:
--------------
    trunk/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c

Modified: trunk/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c
===================================================================
--- trunk/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c	2016-09-18 22:28:18 UTC (rev 8476)
+++ trunk/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c	2016-09-18 22:28:41 UTC (rev 8477)
@@ -374,8 +374,15 @@
 	znode_t *zp;
 	int error = 0;
 	uint64_t parent;
+	int unlinked;
 
 	if (name[0] == 0 || (name[0] == '.' && name[1] == 0)) {
+		mutex_enter(&dzp->z_lock);
+		unlinked = dzp->z_unlinked;
+		mutex_exit(&dzp->z_lock);
+		if (unlinked)
+			return (ENOENT);
+
 		*vpp = ZTOV(dzp);
 		VN_HOLD(*vpp);
 	} else if (name[0] == '.' && name[1] == '.' && name[2] == 0) {
@@ -394,6 +401,13 @@
 			    NULL, NULL, NULL);
 			return (error);
 		}
+
+		mutex_enter(&dzp->z_lock);
+		unlinked = dzp->z_unlinked;
+		mutex_exit(&dzp->z_lock);
+		if (unlinked)
+			return (ENOENT);
+
 		rw_enter(&dzp->z_parent_lock, RW_READER);
 		error = zfs_zget(zfsvfs, parent, &zp);
 		if (error == 0)



More information about the Midnightbsd-cvs mailing list