On Sun, Mar 23, 2008 at 6:34 PM, Robert P. J. Day <[EMAIL PROTECTED]> wrote:
> On Sun, 23 Mar 2008, Robert P. J. Day wrote:
>
> ... snip ...
>
>
> > an obvious fix is, once you do the splice, initialize that list
> > header to designate an empty list, and in fact, there's a list
> > function that does just that:
> >
> > =====
> > static inline void list_splice_init(struct list_head *list,
> > struct list_head *head)
> > {
> > if (!list_empty(list)) {
> > __list_splice(list, head);
> > INIT_LIST_HEAD(list); <-- that solves the problem
> > }
> > }
> > =====
> >
> > which makes me wonder ... why aren't *all* list splices treated that
> > way? what is the value of using just the first form and leaving that
> > potentially dangerous head element lying around? in short, as long as
> > i've understood this correctly, it would seem to make more sense for
> > all list_splice() calls to be list_splice_init() instead, for safety.
> > or did i screw something up?
>
> just to follow up on this post, i was wondering why anyone would call
> list_splice() *without* doing a list head init on that detached list
> head element just to play it safe, so i did a grep for calls to
> list_splice() under drivers and, lo and behold, here's the very first
> example that showed up (drivers/ieee1394/ohci1394.c):
>
> ...
> list_splice(&d->fifo_list, &packet_list);
> list_splice(&d->pending_list, &packet_list);
> INIT_LIST_HEAD(&d->fifo_list);
> INIT_LIST_HEAD(&d->pending_list);
> ...
Interesting point Robert, I agree. However not every call to
list_splice is accompanied by a call to INIT_LIST_HEAD in the current
code (26.24.2) and I can see this *seem to be buggy* call in some of
the important files like VM and cache. One such example is in
kmem_cache_shrink
shrink_page_list
etc. and lot of others. Wonder how they work unless we are missing
something :-)
>
> exactly. i'm betting that code was written before
> list_splice_init() was written, so that's the sort of thing that
> *could* be rewritten as two calls to list_splice_init(). i'm
> wondering how many other examples of the above there are. i'm betting
> lots. :-)
>
>
>
> rday
> --
>
> ========================================================================
> Robert P. J. Day
> Linux Consulting, Training and Annoying Kernel Pedantry:
> Have classroom, will lecture.
>
> http://crashcourse.ca Waterloo, Ontario, CANADA
> ========================================================================
>
> --
> To unsubscribe from this list: send an email with
> "unsubscribe kernelnewbies" to [EMAIL PROTECTED]
> Please read the FAQ at http://kernelnewbies.org/FAQ
>
>
--
Thanks & Regards,
********************************************
Manish Katiyar ( http://mkatiyar.googlepages.com )
3rd Floor, Fair Winds Block
EGL Software Park
Off Intermediate Ring Road
Bangalore 560071, India
***********************************************
--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to [EMAIL PROTECTED]
Please read the FAQ at http://kernelnewbies.org/FAQ