From: David Laight <David.Laight@ACULAB.COM>
To: 'Dan Carpenter' <dan.carpenter@oracle.com>,
Jakob Koschel <jakobkoschel@gmail.com>
Cc: Joseph Qi <joseph.qi@linux.alibaba.com>,
Mark Fasheh <mark@fasheh.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
"ocfs2-devel@oss.oracle.com" <ocfs2-devel@oss.oracle.com>,
Joel Becker <jlbec@evilplan.org>,
Andrew Morton <akpm@linux-foundation.org>,
"Geert Uytterhoeven" <geert@linux-m68k.org>,
Masahiro Yamada <masahiroy@kernel.org>,
Miguel Ojeda <ojeda@kernel.org>, Mike Rapoport <rppt@kernel.org>,
"Brian Johannesmeyer" <bjohannesmeyer@gmail.com>,
Cristiano Giuffrida <c.giuffrida@vu.nl>,
"Bos, H.J." <h.j.bos@vu.nl>
Subject: RE: [PATCH] ocfs2: fix check if list iterator did find an element
Date: Mon, 21 Mar 2022 16:00:10 +0000 [thread overview]
Message-ID: <75180dd18a3f460891cd93f7fcb3aa1c@AcuMS.aculab.com> (raw)
In-Reply-To: <20220321135435.GL336@kadam>
From: Dan Carpenter
> Sent: 21 March 2022 13:55
> On Mon, Mar 21, 2022 at 02:34:34PM +0100, Jakob Koschel wrote:
> > >> @@ -556,11 +556,11 @@ static void *lockres_seq_start(struct seq_file *m, loff_t *pos)
> > >> }
> > >> }
> > >>
> > >> - list_for_each_entry(res, track_list, tracking) {
> > >> - if (&res->tracking == &dlm->tracking_list)
> > >> - res = NULL;
> > >> - else
> > >> - dlm_lockres_get(res);
> > >> + list_for_each_entry(iter, track_list, tracking) {
> > >> + if (&iter->tracking != &dlm->tracking_list) {
>
> This is an open coded version of:
>
> if (!list_entry_is_head(iter, &dlm->tracking_list, tracking)) {
Doesn't list_for_each_entry() terminate before that happens?
So this code is probably still horribly broken.
My worry about bugs with these lists isn't really the code
that uses list_for_each_entry() - they are fairly easy to
locate, read and fix.
The problem is all the other code that is scanning these
list in other more obscure ways.
It really isn't a list structure that is easy to use at all.
It's only slight advantage is that you can unlink an item
without knowing the list head.
(Which can stop buggy code generating cross-linked lists.)
Unless you actually need to traverse backwards the 'back
pointer points to forwards pointer' list is much better.
Even if you have to maintain a 'pointer to last' to get
FIFO operation.
The other option is to double-link the items into a loop and
have a 'head' that points to the first item.
Both these loops have 'pointer to items' to don't need
container_of() and get better type checking from the compiler.
David
>
> Ideally someone would come through with enough confidence to just delete
> it but the second best option is to just make it readable...
>
> regards,
> dan carpenter
>
> > >> + dlm_lockres_get(iter);
> > >> + res = iter;
> > >> + }
> > >> break;
> > >> }
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)
next prev parent reply other threads:[~2022-03-21 16:00 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-19 20:31 Jakob Koschel
2022-03-21 1:50 ` Joseph Qi
2022-03-21 13:34 ` Jakob Koschel
2022-03-21 13:54 ` Dan Carpenter
2022-03-21 16:00 ` David Laight [this message]
2022-03-21 16:22 ` Dan Carpenter
2022-03-22 2:15 ` Joseph Qi
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=75180dd18a3f460891cd93f7fcb3aa1c@AcuMS.aculab.com \
--to=david.laight@aculab.com \
--cc=akpm@linux-foundation.org \
--cc=bjohannesmeyer@gmail.com \
--cc=c.giuffrida@vu.nl \
--cc=dan.carpenter@oracle.com \
--cc=geert@linux-m68k.org \
--cc=h.j.bos@vu.nl \
--cc=jakobkoschel@gmail.com \
--cc=jlbec@evilplan.org \
--cc=joseph.qi@linux.alibaba.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mark@fasheh.com \
--cc=masahiroy@kernel.org \
--cc=ocfs2-devel@oss.oracle.com \
--cc=ojeda@kernel.org \
--cc=rppt@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®