Print this page
7653 tmpfs: calling unlink() on a directory which isn't empty should fail

@@ -1103,12 +1103,11 @@
         rw_enter(&parent->tn_rwlock, RW_WRITER);
         rw_enter(&tp->tn_rwlock, RW_WRITER);
 
         if (tp->tn_type != VDIR ||
             (error = secpolicy_fs_linkdir(cred, dvp->v_vfsp)) == 0)
-                error = tdirdelete(parent, tp, nm, tp->tn_type == VDIR ?
-                    DR_RMDIR : DR_REMOVE, cred);
+                error = tdirdelete(parent, tp, nm, DR_REMOVE, cred);
 
         rw_exit(&tp->tn_rwlock);
         rw_exit(&parent->tn_rwlock);
         vnevent_remove(TNTOV(tp), dvp, nm, ct);
         tmpnode_rele(tp);

@@ -1426,24 +1425,10 @@
         if (vn_mountedvfs(vp) != NULL) {
                 error = EBUSY;
                 goto done;
         }
 
-        /*
-         * Check for an empty directory
-         * i.e. only includes entries for "." and ".."
-         */
-        if (self->tn_dirents > 2) {
-                error = EEXIST;         /* SIGH should be ENOTEMPTY */
-                /*
-                 * Update atime because checking tn_dirents is logically
-                 * equivalent to reading the directory
-                 */
-                gethrestime(&self->tn_atime);
-                goto done;
-        }
-
         error = tdirdelete(parent, self, nm, DR_RMDIR, cred);
 done:
         vn_vfsunlock(vp);
 done1:
         rw_exit(&self->tn_rwlock);