From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752567AbdLNEn5 (ORCPT ); Wed, 13 Dec 2017 23:43:57 -0500 Received: from mx2.suse.de ([195.135.220.15]:52725 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752511AbdLNEn4 (ORCPT ); Wed, 13 Dec 2017 23:43:56 -0500 X-Amavis-Alert: BAD HEADER SECTION, Duplicate header field: "To" From: NeilBrown To: Oleg Drokin , "James Simmons" , Andreas Dilger To: Greg Kroah-Hartman Date: Thu, 14 Dec 2017 15:43:43 +1100 Subject: [PATCH] staging: lustre: lnet: Fix recent breakage from list_for_each conversion cc: Haneen Mohammed cc: "linux-kernel@vger.kernel.org" , "lustre-devel@lists.lustre.org" Message-ID: <87a7ylor5s.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 Commit 8e55b6fd0660 ("staging: lustre: lnet: replace list_for_each with list_for_each_entry") was intended to be an idempotent change, but actually broke the behavior of ksocknal_add_peer() causing mounts to fa= il. The fact that it caused an existing "route2 =3D NULL;" to become redundant could have been a clue. The fact that the loop body set the new loop variable to NULL might also have been a clue The original code relied on "route2" being NULL if nothing was found. The new code would always set route2 to a non-NULL value if the list was empty, and would likely crash if the list was not empty. Restore correct functionality by using code-flow rather the value of "route2" to determine whether to use on old route, or to add a new one. Fixes: 8e55b6fd0660 ("staging: lustre: lnet: replace list_for_each with lis= t_for_each_entry") Signed-off-by: NeilBrown =2D-- .../staging/lustre/lnet/klnds/socklnd/socklnd.c | 23 ++++++++++--------= ---- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/= staging/lustre/lnet/klnds/socklnd/socklnd.c index 9c92a83f214a..634c0cc7909f 100644 =2D-- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c @@ -487,21 +487,18 @@ ksocknal_add_peer(struct lnet_ni *ni, struct lnet_pro= cess_id id, __u32 ipaddr, ksocknal_nid2peerlist(id.nid)); } =20 =2D route2 =3D NULL; list_for_each_entry(route2, &peer->ksnp_routes, ksnr_list) { =2D if (route2->ksnr_ipaddr =3D=3D ipaddr) =2D break; =2D =2D route2 =3D NULL; =2D } =2D if (!route2) { =2D ksocknal_add_route_locked(peer, route); =2D route->ksnr_share_count++; =2D } else { =2D ksocknal_route_decref(route); =2D route2->ksnr_share_count++; + if (route2->ksnr_ipaddr =3D=3D ipaddr) { + /* Route already exists, use the old one */ + ksocknal_route_decref(route); + route2->ksnr_share_count++; + goto out; + } } =2D + /* Route doesn't already exist, add the new one */ + ksocknal_add_route_locked(peer, route); + route->ksnr_share_count++; +out: write_unlock_bh(&ksocknal_data.ksnd_global_lock); =20 return 0; =2D-=20 2.14.0.rc0.dirty --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEG8Yp69OQ2HB7X0l6Oeye3VZigbkFAloyAYAACgkQOeye3VZi gbmfhhAAgCoo1/n2CvFh1yZ7MTx72rroEj2gAXv5CQiN4f49HHJlK4us4yu1z/XG TNVmuf8hJlI1hrQqaO0yMI74gI3HhpAskrxxlNeWpEEZ/IcKUVECv0NWibLcZkPr /5+iMjS6zhClWlTNpiLzlQ8HLrpVkEfTrmp5e/0aVFoT80ASJL0eBrACA2S0Fx+k GCr9uZqemOjE/xeCcpjCnkZfcbhZFDvfEqyRp9SXucAIM+qdnEZ5fEtO1T8KFhIa CLWxZPCP5l1pFGZoizZgYQrkhLVASDRYMeXGKFSsyGOx73t5i2k5MNk1sCLVQZ7S eqSwlpVUHzpYMV3j9OyLLl3yDR2ZxbL34EO0VstbyENiBPsiX7+cCcuZlfr10sON OentMIffetZMDCVVga99eUb6AxssUU8gzj7dfVKKy/M2D/0wZFWW2uXbijgsQN1F Pf9Pex/mXDVF/1hP7jrlqEFOEIcPtLKC8ZulUEaRH5VkzCuBNtWh3Zdq7Vl5ZfCF /HURbxO2GBP2r6QZ0686aJEujGEVFv+B6aZOEuayyIUC/7Lgn0Pa9M8oMM9ElFdy Y56QIUudwgEodvPEysOQCiS8CE33rJVJVpw/TVHoFaKN91BTRPzsDBhqihzp+rsc QQNBEBEb9BKTlrH18veVbeO7BKQuUIJk+Z2/8PFO5InC/OaxdcM= =07yY -----END PGP SIGNATURE----- --=-=-=--