diff --git a/src/plugins/task/affinity/cpuset.c b/src/plugins/task/affinity/cpuset.c
index f7bbaf84f80e765e65c35797acbc66ef37435b52..405c93015821bafceee185b189bfeb9149190de4 100644
--- a/src/plugins/task/affinity/cpuset.c
+++ b/src/plugins/task/affinity/cpuset.c
@@ -38,6 +38,8 @@
 \*****************************************************************************/
 
 #include "affinity.h"
+static bool cpuset_prefix_set = false;
+static char *cpuset_prefix = "";
 
 static void _cpuset_to_cpustr(const cpu_set_t *mask, char *str)
 {
@@ -69,11 +71,26 @@ int	slurm_build_cpuset(char *base, char *path, uid_t uid, gid_t gid)
 
 	/* Copy "cpus" contents from parent directory
 	 * "cpus" must be set before any tasks can be added. */
-	snprintf(file_path, sizeof(file_path), "%s/cpus", base);
+	snprintf(file_path, sizeof(file_path), "%s/%scpus",
+		 base, cpuset_prefix);
+
 	fd = open(file_path, O_RDONLY);
 	if (fd < 0) {
-		error("open(%s): %m", file_path);
-		return -1;
+		if (!cpuset_prefix_set) {
+			cpuset_prefix_set = 1;
+			cpuset_prefix = "cpuset.";
+			snprintf(file_path, sizeof(file_path), "%s/%scpus",
+				 base, cpuset_prefix);
+			fd = open(file_path, O_RDONLY);
+			if (fd < 0) {
+				cpuset_prefix = "";
+				error("open(%s): %m", file_path);
+				return -1;
+			}
+		} else {
+			error("open(%s): %m", file_path);
+			return -1;
+		}
 	}
 	rc = read(fd, mstr, sizeof(mstr));
 	close(fd);
@@ -81,7 +98,8 @@ int	slurm_build_cpuset(char *base, char *path, uid_t uid, gid_t gid)
 		error("read(%s): %m", file_path);
 		return -1;
 	}
-	snprintf(file_path, sizeof(file_path), "%s/cpus", path);
+	snprintf(file_path, sizeof(file_path), "%s/%scpus",
+		 path, cpuset_prefix);
 	fd = open(file_path, O_CREAT | O_WRONLY, 0700);
 	if (fd < 0) {
 		error("open(%s): %m", file_path);
@@ -96,7 +114,8 @@ int	slurm_build_cpuset(char *base, char *path, uid_t uid, gid_t gid)
 
 	/* Copy "mems" contents from parent directory, if it exists.
 	 * "mems" must be set before any tasks can be added. */
-	snprintf(file_path, sizeof(file_path), "%s/mems", base);
+	snprintf(file_path, sizeof(file_path), "%s/%smems",
+		 base, cpuset_prefix);
 	fd = open(file_path, O_RDONLY);
 	if (fd < 0) {
 		error("open(%s): %m", file_path);
@@ -108,7 +127,8 @@ int	slurm_build_cpuset(char *base, char *path, uid_t uid, gid_t gid)
 		error("read(%s): %m", file_path);
 		return -1;
 	}
-	snprintf(file_path, sizeof(file_path), "%s/mems", path);
+	snprintf(file_path, sizeof(file_path), "%s/%smems",
+		 path, cpuset_prefix);
 	fd = open(file_path, O_CREAT | O_WRONLY, 0700);
 	if (fd < 0) {
 		error("open(%s): %m", file_path);
@@ -155,7 +175,8 @@ int	slurm_set_cpuset(char *base, char *path, pid_t pid, size_t size,
 	}
 
 	/* Set "cpus" per user request */
-	snprintf(file_path, sizeof(file_path), "%s/cpus", path);
+	snprintf(file_path, sizeof(file_path), "%s/%scpus",
+		 path, cpuset_prefix);
 	_cpuset_to_cpustr(mask, mstr);
 	fd = open(file_path, O_CREAT | O_WRONLY, 0700);
 	if (fd < 0) {
@@ -171,7 +192,8 @@ int	slurm_set_cpuset(char *base, char *path, pid_t pid, size_t size,
 
 	/* copy "mems" contents from parent directory, if it exists.
 	 * "mems" must be set before any tasks can be added. */
-	snprintf(file_path, sizeof(file_path), "%s/mems", base);
+	snprintf(file_path, sizeof(file_path), "%s/%smems",
+		 base, cpuset_prefix);
 	fd = open(file_path, O_RDONLY);
 	if (fd < 0) {
 		error("open(%s): %m", file_path);
@@ -182,7 +204,8 @@ int	slurm_set_cpuset(char *base, char *path, pid_t pid, size_t size,
 			error("read(%s): %m", file_path);
 			return -1;
 		}
-		snprintf(file_path, sizeof(file_path), "%s/mems", path);
+		snprintf(file_path, sizeof(file_path), "%s/%smems",
+			 path, cpuset_prefix);
 		fd = open(file_path, O_CREAT | O_WRONLY, 0700);
 		if (fd < 0) {
 			error("open(%s): %m", file_path);
@@ -231,7 +254,8 @@ int	slurm_get_cpuset(char *path, pid_t pid, size_t size, cpu_set_t *mask)
 	char file_path[PATH_MAX];
 	char mstr[1 + CPU_SETSIZE * 4];
 
-	snprintf(file_path, sizeof(file_path), "%s/cpus", path);
+	snprintf(file_path, sizeof(file_path), "%s/%scpus",
+		 path, cpuset_prefix);
 	fd = open(file_path, O_RDONLY);
 	if (fd < 0) {
 		error("open(%s): %m", file_path);
@@ -269,7 +293,8 @@ int	slurm_memset_available(void)
 	char file_path[PATH_MAX];
 	struct stat buf;
 
-	snprintf(file_path, sizeof(file_path), "%s/mems", CPUSET_DIR);
+	snprintf(file_path, sizeof(file_path), "%s/%smems",
+		 CPUSET_DIR, cpuset_prefix);
 	return stat(file_path, &buf);
 }
 
@@ -280,7 +305,8 @@ int	slurm_set_memset(char *path, nodemask_t *new_mask)
 	int fd, i, max_node;
 	ssize_t rc;
 
-	snprintf(file_path, sizeof(file_path), "%s/mems", path);
+	snprintf(file_path, sizeof(file_path), "%s/%smems",
+		 path, cpuset_prefix);
 	fd = open(file_path, O_CREAT | O_RDWR, 0700);
 	if (fd < 0) {
 		error("open(%s): %m", file_path);