From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751507AbdBME4X (ORCPT ); Sun, 12 Feb 2017 23:56:23 -0500 Received: from mx2.suse.de ([195.135.220.15]:53244 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751143AbdBME4W (ORCPT ); Sun, 12 Feb 2017 23:56:22 -0500 From: NeilBrown To: Byungchul Park , peterz@infradead.org, mingo@kernel.org, koverstreet@google.com, neilb@suse.de, nab@linux-iscsi.org, viro@zeniv.linux.org.uk Date: Mon, 13 Feb 2017 15:56:08 +1100 Cc: ying.huang@intel.com, oleg@redhat.com, asias@redhat.com, shli@kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] llist: Don't reinvent the wheel but use existing llist API In-Reply-To: <1486959013-26105-1-git-send-email-byungchul.park@lge.com> References: <1486959013-26105-1-git-send-email-byungchul.park@lge.com> Message-ID: <87r3324rkn.fsf@notabene.neil.brown.name> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable On Mon, Feb 13 2017, Byungchul Park wrote: > Although llist provides proper APIs, they are not used. Make them used. > > Signed-off-by: Byungchul Park > --- > drivers/md/bcache/closure.c | 15 ++------------- > drivers/md/raid5.c | 4 +--- > drivers/vhost/scsi.c | 9 ++------- > fs/file_table.c | 12 +++++------- > fs/namespace.c | 12 +++++------- > include/linux/llist.h | 3 +++ > kernel/irq_work.c | 6 +----- > kernel/sched/core.c | 13 ++----------- > mm/vmalloc.c | 8 +++----- > 9 files changed, 24 insertions(+), 58 deletions(-) > ... > diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c > index 36c13e4..c82243a 100644 > --- a/drivers/md/raid5.c > +++ b/drivers/md/raid5.c > @@ -359,11 +359,9 @@ static int release_stripe_list(struct r5conf *conf, >=20=20 > head =3D llist_del_all(&conf->released_stripes); > head =3D llist_reverse_order(head); > - while (head) { > + llist_for_each_entry(sh, head, release_list) { > int hash; >=20=20 > - sh =3D llist_entry(head, struct stripe_head, release_list); > - head =3D llist_next(head); > /* sh could be readded after STRIPE_ON_RELEASE_LIST is cleard */ > smp_mb(); > clear_bit(STRIPE_ON_RELEASE_LIST, &sh->state); This one is wrong (I haven't checked the rest). As soon a STRIPE_ON_RELEASE_LIST is cleared, the llist_node can be reused, so we need to call llist_next *before* the rest of the code. You have moved the call to afterwards. You could possibly change it to use llist_for_each_entry_safe() NeilBrown --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEG8Yp69OQ2HB7X0l6Oeye3VZigbkFAlihPGgACgkQOeye3VZi gbkvQw//cb3FXe3WGbhWbZZg2mzYNqCC54T+Ffy6OBBRL9wAZDz3gM57PN9va2Ce zpbyRDpOWewaIqeN5bmcXDo5h0QSejefrNd1FGzej7YiZRymU50FNLZbDmBi8lE7 dlTb+27iJTCCfAm5TLo07KgvSelGoKK12LuIiBFpaC0eM6J7oZmC7emupOspdzD9 7CrHBOHwG+SY4cEilOVNWslQMjip78xTlyRsDQdR554wQiRnQQxOC1fRCc3FrAbo l4m406IehRd+5eaM8NJTL9hMfO5PmGmwJV2LA9GaCPd/rF0FT6KLQqIu6v3s5rbA Oyms2/WriGhrKB4xc3kIv4mgXtLUa2llASpRvHY1+HKcS+QB23uThJ3+NLOTbhwm E+9MK2faOomehIr1iqq0TD4sAnYtS3rVF3WJ8qSt8pv1qimXvT8jLkJlWPc5xedY 9qhHB1tDXKd7CMkzhJsnRpKXlErYXANV7OoteRW/uakMoxRbPQBPLPEoPXzdvSNL 1z0qG/kLZPO68hGfYXWh+KuprzVkEHmNd7RS4sn7XT3thk6ctfOp6inb/xgkr0mT w+f2HkB5oeWo/w/vmiSuXMf3wR95P7TXkSdOSqJ0v/dq8Ami911HcWJWIE5sZk9s 8j/MPPaJpnIjonv+VHzGaNhhpzDh1w7nvWzaW5QMT0/tqxDu66Q= =/sGJ -----END PGP SIGNATURE----- --=-=-=--