Re: numa_get_mems_allowed bug

Michael Spiegel <[email protected]> Mon, 29 Nov 2010 14:19:29 -0500
Newsgroups org.kernel.vger.linux-numa
Message-ID <[email protected]>
To stimulate some discussion, here is the patch file for the issue.
It does the appropriate error checking.  The patch does not use
getpol(), my question was whether it should call the function or not.

--Michael

On Fri, Nov 26, 2010 at 10:24 PM, Michael Spiegel
<[email protected]> wrote:
> Happy Thanksgiving to all.  It appears that numa_get_mems_allowed()
> does not use the MPOL_F_MEMS_ALLOWED flag.  The return value I receive
> when calling this function is an empty nodemask.  I've put together a
> hack that uses MPOL_F_MEMS_ALLOWED, and I get the correct nodemask.
> The hack I put together does not do the proper error checking that is
> performed by getpol().  I'm not sure what is the best patch to fix the
> issue.  Perhaps add a third argument to getpol() that accepts an
> unsigned long flag?
>
> Cheers,
> --Michael
>
numactl-mems-allowed.patch (application/octet-stream, 518 B)
diff -ru numactl-2.0.6-rc3-clean/libnuma.c numactl-2.0.6-rc3/libnuma.c
--- numactl-2.0.6-rc3-clean/libnuma.c	2010-10-07 09:23:51.000000000 -0400
+++ numactl-2.0.6-rc3/libnuma.c	2010-11-29 14:13:56.823538600 -0500
@@ -1136,7 +1136,9 @@
 	 * can change, so query on each call.
 	 */
 	bmp = numa_allocate_nodemask();
-	getpol(NULL,  bmp);
+	if (get_mempolicy(NULL, bmp->maskp, bmp->size + 1, 0,
+				MPOL_F_MEMS_ALLOWED) < 0)
+		numa_error("get_mempolicy");
 	return bmp;
 }
 make_internal_alias(numa_get_mems_allowed);