diff --git a/src/slurmctld/partition_mgr.c b/src/slurmctld/partition_mgr.c
index 9ffff62ea8765fd217b5efde4f7e6a48802db5d1..e0cb0bc7699179b54410abd50db26a34488dafb0 100644
--- a/src/slurmctld/partition_mgr.c
+++ b/src/slurmctld/partition_mgr.c
@@ -360,14 +360,16 @@ int load_all_part_state(void)
 	} else {
 		data_allocated = BUF_SIZE;
 		data = xmalloc(data_allocated);
-		while ((data_read =
-			read(state_fd, &data[data_size],
-			     BUF_SIZE)) == BUF_SIZE) {
-			data_size += data_read;
-			data_allocated += BUF_SIZE;
+		while (1) {
+			data_read = read(state_fd, &data[data_size], BUF_SIZE);
+			if ((data_read == -1) && (errno == EINTR))
+				continue;
+			if (data_read == 0)     /* eof */
+				break;
+			data_size      += data_read;
+			data_allocated += data_read;
 			xrealloc(data, data_allocated);
 		}
-		data_size += data_read;
 		close(state_fd);
 		if (data_read < 0)
 			error("Error reading file %s: %m", state_file);