Thread (22 messages) 22 messages, 4 authors, 2011-02-22

Re: [PATCH 3/4] cpuset: Fix unchecked calls to NODEMASK_ALLOC()

From: Li Zefan <hidden>
Date: 2011-02-18 02:46:36
Also in: lkml

Paul Menage wrote:
On Thu, Feb 17, 2011 at 2:46 PM, Andrew Morton
[off-list ref] wrote:
quoted
On Thu, 17 Feb 2011 09:50:09 +0800
Li Zefan [off-list ref] wrote:
quoted
+/*
+ * In functions that can't propogate errno to users, to avoid declaring a
+ * nodemask_t variable, and avoid using NODEMASK_ALLOC that can return
+ * -ENOMEM, we use this global cpuset_mems.
+ *
+ * It should be used with cgroup_lock held.
I'll do s/should/must/ - that would be a nasty bug.

I'd be more comfortable about the maintainability of this optimisation
if we had

       WARN_ON(!cgroup_is_locked());

at each site.
Agreed - that was my first thought on reading the patch. How about:

static nodemask_t *cpuset_static_nodemask() {
Then this should be 'noinline', otherwise we'll have one copy for each
function that calls it.
  static nodemask_t nodemask;
  WARN_ON(!cgroup_is_locked());
  return &nodemask;
}

and then just call cpuset_static_nodemask() in the various locations
being patched?
I think a defect of this is people might call it twice in one function
but don't know it returns the same variable?

For example in cpuset_attach():

void cpuset_attach(...)
{
	nodemask_t *from = cpuset_static_nodemask();
	nodemask_t *to = cpuset_static_nodemask();
	...
}

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help