Messages in this thread | | | Date | Thu, 2 Oct 2008 15:17:45 -0700 | From | Greg KH <> | Subject | Re: [PATCH] Remove completion from struct klist_node |
| |
On Thu, Oct 02, 2008 at 03:43:08PM -0600, Matthew Wilcox wrote: > > Removing the completion from klist_node reduces its size from 64 bytes > to 28 on x86-64. To maintain the semantics of klist_remove(), we add > a single list of klist nodes which are pending deletion and scan them. > > Signed-off-by: Matthew Wilcox <willy@linux.intel.com> > > include/linux/klist.h | 2 -- > lib/klist.c | 48 ++++++++++++++++++++++++++++++++++++++++++++---- > 2 files changed, 44 insertions(+), 6 deletions(-) > > diff --git a/include/linux/klist.h b/include/linux/klist.h > index 06c338e..989a335 100644 > --- a/include/linux/klist.h > +++ b/include/linux/klist.h > @@ -13,7 +13,6 @@ > #define _LINUX_KLIST_H > > #include <linux/spinlock.h> > -#include <linux/completion.h> > #include <linux/kref.h> > #include <linux/list.h> > > @@ -41,7 +40,6 @@ struct klist_node { > struct klist *n_klist; > struct list_head n_node; > struct kref n_ref; > - struct completion n_removed; > }; > > extern void klist_add_tail(struct klist_node *n, struct klist *k); > diff --git a/lib/klist.c b/lib/klist.c > index cca37f9..2b609ee 100644 > --- a/lib/klist.c > +++ b/lib/klist.c > @@ -36,7 +36,7 @@ > > #include <linux/klist.h> > #include <linux/module.h> > - > +#include <linux/sched.h> > > /** > * klist_init - Initialize a klist structure. > @@ -77,7 +77,6 @@ static void add_tail(struct klist *k, struct klist_node *n) > static void klist_node_init(struct klist *k, struct klist_node *n) > { > INIT_LIST_HEAD(&n->n_node); > - init_completion(&n->n_removed); > kref_init(&n->n_ref); > n->n_klist = k; > if (k->get) > @@ -140,12 +139,36 @@ void klist_add_before(struct klist_node *n, struct klist_node *pos) > } > EXPORT_SYMBOL_GPL(klist_add_before); > > +struct klist_waiter { > + struct klist_waiter *next; > + struct klist_node *node; > + struct task_struct *process; > + int woken; > +};
Why not use the built-in list.h functions here?
Other than that, looks good, thanks.
greg k-h
| |