diff --git a/src/slurmd/slurmstepd/task.c b/src/slurmd/slurmstepd/task.c
index 0137fdc7edb5f01c90be2a63c84f375a8f60ba99..549512c4b371b87890461e2b4e6dace174835277 100644
--- a/src/slurmd/slurmstepd/task.c
+++ b/src/slurmd/slurmstepd/task.c
@@ -480,16 +480,20 @@ _make_tmpdir(slurmd_job_t *job)
 	if (!(tmpdir = getenvp(job->env, "TMPDIR")))
 		setenvf(&job->env, "TMPDIR", "/tmp"); /* task may want it set */
 	else if (mkdir(tmpdir, 0700) < 0) {
-		if (errno == EEXIST) {
-			struct stat st;
-
-			if (stat(tmpdir, &st) == 0 && /* does user have access? */
-			    S_ISDIR(st.st_mode) && /* is it a directory? */
-			    ((st.st_mode & S_IWOTH) || /* can user write there? */
-			     (st.st_uid == job->uid && (st.st_mode & S_IWUSR))))
-				return;
-		}
-		error("Unable to create TMPDIR [%s]: %m", tmpdir);
+		struct stat st;
+		int mkdir_errno = errno;
+		
+		if (stat(tmpdir, &st)) { /* does the file exist ? */
+			/* show why we were not able to create it */
+			error("Unable to create TMPDIR [%s]: %s", 
+			      tmpdir, strerror(mkdir_errno));
+		} else if (!S_ISDIR(st.st_mode)) {  /* is it a directory? */
+			error("TMPDIR [%s] is not a directory", tmpdir);
+		} else if (eaccess(tmpdir, X_OK|W_OK)) /* check permissions */
+			error("TMPDIR [%s] is not writeable", tmpdir);
+		else
+			return;
+
 		error("Setting TMPDIR to /tmp");
 		setenvf(&job->env, "TMPDIR", "/tmp");
 	}