diff --git a/src/slurmctld/state_save.c b/src/slurmctld/state_save.c
index 4ba689ca9d455f1fa97d095d6f164172427ab5ec..a6c893b7b83dc72a7063a45f759be5b06c3e1d5c 100644
--- a/src/slurmctld/state_save.c
+++ b/src/slurmctld/state_save.c
@@ -61,23 +61,27 @@ static bool run_save_thread = true;
  * RET 0 on success or -1 on error */
 extern int fsync_and_close(int fd, char *file_type)
 {
-	int rc = 0;
-	int retval;
+	int rc = 0, retval, pos;
 
-	while ((retval = fsync(fd)) && (errno == EINTR))
-		;
-	if (retval != 0) {
-		rc = retval;
-		error("fsync() error writing %s state save file: %m", 
-		      file_type);
+	for (retval = 1, pos = 1; retval && pos < 4; pos++) {
+		retval = fsync(fd);
+		if (retval && (errno != EINTR)) {
+			error("fsync() error writing %s state save file: %m", 
+			      file_type);
+		}
 	}
-
-	while ((retval = close(fd)) && (errno == EINTR))
-		;
-	if (retval != 0) {
+	if (retval)
 		rc = retval;
-		error("close () error on %s state save file: %m", file_type);
+
+	for (retval = 1, pos = 1; retval && pos < 4; pos++) {
+		retval = close(fd);
+		if (retval && (errno != EINTR)) {
+			error("close () error on %s state save file: %m", 
+			      file_type);
+		}
 	}
+	if (retval)
+		rc = retval;
 
 	return rc;
 }