Messages in this thread | | | Date | Thu, 24 Jul 2008 18:22:22 -0400 (EDT) | From | Steven Rostedt <> | Subject | Re: [patch 02/17] Kernel Tracepoints |
| |
On Thu, 24 Jul 2008, Mathieu Desnoyers wrote: > > > + > > > + if (nr_probes - nr_del == 0) { > > > + /* N -> 0, (N > 1) */ > > > + entry->funcs = NULL; > > > + entry->refcount = 0; > > > + debug_print_probes(entry); > > > + return old; > > > + } else { > > > + int j = 0; > > > + /* N -> M, (N > 1, M > 0) */ > > > + /* + 1 for NULL */ > > > + new = kzalloc((nr_probes - nr_del + 1) > > > + * sizeof(void *), GFP_KERNEL); > > > + if (new == NULL) > > > + return ERR_PTR(-ENOMEM); > > > > Hmm, on failure of allocating a new array, we could simply use the > > old array, and remove the one probe from it instead of just failing. > > > > Nay, because of RCU constraints. So we have the readers in the current > RCU window who need to see the old version, and readers of the following > window who need to see the next version. Both can live at the same time > on the system. We cannot reuse the same memory to perform the array > shrink without corrupting the data seen by the previous readers. We > really have to perform a copy here.
Ah, good point. I forgot the whole RCU factor here.
-- Steve
| |