From: Roland Dreier <rdreier@cisco.com>
To: Pete Zaitcev <zaitcev@redhat.com>
Cc: "Satyam Sharma" <satyam.sharma@gmail.com>,
"Matthias Kaehlcke" <matthias.kaehlcke@gmail.com>,
axboe@kernel.dk, linux-usb-devel@lists.sourceforge.net,
linux-kernel@vger.kernel.org, akpm@linux-foundation.org
Subject: Re: [PATCH] drivers/block/ub.c: use list_for_each_entry()
Date: Wed, 30 May 2007 16:42:41 -0700 [thread overview]
Message-ID: <adaodk1q3ny.fsf@cisco.com> (raw)
In-Reply-To: <20070530163236.8bd5640c.zaitcev@redhat.com> (Pete Zaitcev's message of "Wed, 30 May 2007 16:32:36 -0700")
> > > The negative is the sheer number of helper functions in list.h. Personally,
> > > I find it difficult to retain a working knowledge of them. Iterators are
> > > particularly nasty that way. I'm thinking about dropping all of these
> > > list_for_each_with_murky_argument_requirements_and_odd_side_effects()
> > > and use plain for(;;), as a courtesy to someone who has to read the
> > > code years down the road.
> >
> > I think I disagree with this reasoning. If I'm reading your code and
> > I see, say, list_for_each_entry_safe(), I can be pretty confident that
> > your loop works correctly. If you write your own for loop, then I
> > have to check that you actually got the linked list walking right.
>
> You have to check that I used list_for_each_entry_safe correctly too,
> which is harder. Are you aware that we had (and probably still have)
> dozens of cases where the use of list_for_each_entry_safe was buggy?
> Most of them involved IHV programmers being lured into false sense
> of security by the _safe suffix and getting their locking wrong.
>
> You could not find a better way to blow up your own argument
> than to mention list_for_each_entry_safe(), which is anything but.
> Matthias' use of list_for_each_entry() actually IS safe, which is
> why I am not NAKing it. Andrew has accepted it already. I just
> think we aren't winning squat here.
Well, actually, I chose list_for_each_entry_safe() quite conscious of
the locking issues. If I see list_XXX_safe() then I know that I need
to be suspicious when reviewing code -- the same way seeing "atomic_t"
makes me think "is there any reason to use atomic_t??"
If I just see
for (pos = list_entry((head)->next, typeof(*pos), member),
n = list_entry(pos->member.next, typeof(*pos), member);
&pos->member != (head);
pos = n, n = list_entry(n->member.next, typeof(*n), member))
then what am I to think?
- R.
next prev parent reply other threads:[~2007-05-30 23:42 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-30 8:47 [PATCH] drivers/block/ub.c: use list_for_each_entry() Matthias Kaehlcke
2007-05-30 19:38 ` Pete Zaitcev
2007-05-30 20:28 ` Matthias Kaehlcke
2007-05-30 21:14 ` Satyam Sharma
2007-05-30 23:08 ` Pete Zaitcev
2007-05-30 23:14 ` Roland Dreier
2007-05-30 23:32 ` Pete Zaitcev
2007-05-30 23:42 ` Roland Dreier [this message]
2007-05-31 0:05 ` Pete Zaitcev
2007-05-31 4:28 ` Roland Dreier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=adaodk1q3ny.fsf@cisco.com \
--to=rdreier@cisco.com \
--cc=akpm@linux-foundation.org \
--cc=axboe@kernel.dk \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb-devel@lists.sourceforge.net \
--cc=matthias.kaehlcke@gmail.com \
--cc=satyam.sharma@gmail.com \
--cc=zaitcev@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.