--- /usr/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c.orig	2009-07-20 23:16:42.000000000 +0400
+++ /usr/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c	2010-02-20 01:23:45.112613715 +0300
@@ -962,7 +962,6 @@
  *
  *	you own the directory,
  *	you own the entry,
- *	the entry is a plain file and you have write access,
  *	or you are privileged (checked in secpolicy...).
  *
  * The function returns 0 if remove access is granted.
@@ -984,9 +983,7 @@
 	downer = zfs_fuid_map_id(zfsvfs, zdp->z_phys->zp_uid, cr, ZFS_OWNER);
 	fowner = zfs_fuid_map_id(zfsvfs, zp->z_phys->zp_uid, cr, ZFS_OWNER);
 
-	if ((uid = crgetuid(cr)) == downer || uid == fowner ||
-	    (ZTOV(zp)->v_type == VREG &&
-	    zfs_zaccess(zp, ACE_WRITE_DATA, 0, B_FALSE, cr) == 0))
+	if ((uid = crgetuid(cr)) == downer || uid == fowner)
 		return (0);
 	else
 		return (secpolicy_vnode_remove(ZTOV(zp), cr));
