From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932925AbdDGADl (ORCPT ); Thu, 6 Apr 2017 20:03:41 -0400 Received: from mx2.suse.de ([195.135.220.15]:50217 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754145AbdDGADe (ORCPT ); Thu, 6 Apr 2017 20:03:34 -0400 X-Amavis-Alert: BAD HEADER SECTION, Duplicate header field: "Cc" From: NeilBrown To: Ingo Molnar , Peter Zijlstra Date: Fri, 07 Apr 2017 10:03:26 +1000 Cc: Michal Hocko , Mel Gorman Subject: [PATCH] Rename tsk_restore_flags() to current_restore_flags() cc: LKML Message-ID: <87k26xytgx.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 It is not safe for one thread to modify the ->flags of another thread as there is no locking that can protect the update. So tsk_restore_flags(), which takes a task pointer and modifies the flags, is an invitation to do the wrong thing. All current users pass "current" as the task, so no developers have accepted that invitation. It would be best to ensure it remains that way. So rename tsk_restore_flags() to current_restore_flags() and don't pass in a task_struct pointer. Always operate on current->flags. Signed-off-by: NeilBrown =2D-- get_maintainer.pl suggested 35 recipients for this patch. I decided to trim that a bit .... Can it just go through the tip tree?? It should be completely uncontroversial. Thanks, NeilBrown drivers/block/nbd.c | 2 +- drivers/scsi/iscsi_tcp.c | 2 +- fs/nfsd/vfs.c | 2 +- include/linux/sched.h | 6 +++--- kernel/softirq.c | 2 +- net/core/dev.c | 2 +- net/core/sock.c | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index 7e4287bc19e5..04ec921727b7 100644 =2D-- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c @@ -239,7 +239,7 @@ static int sock_xmit(struct nbd_device *nbd, int index,= int send, } } while (msg_data_left(&msg)); =20 =2D tsk_restore_flags(current, pflags, PF_MEMALLOC); + current_restore_flags(pflags, PF_MEMALLOC); =20 return result; } diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c index 4228aba1f654..bbea8eac9abb 100644 =2D-- a/drivers/scsi/iscsi_tcp.c +++ b/drivers/scsi/iscsi_tcp.c @@ -387,7 +387,7 @@ static int iscsi_sw_tcp_pdu_xmit(struct iscsi_task *tas= k) rc =3D 0; } =20 =2D tsk_restore_flags(current, pflags, PF_MEMALLOC); + current_restore_flags(pflags, PF_MEMALLOC); return rc; } =20 diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index 19d50f600e8d..9aaf6ca77569 100644 =2D-- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -1004,7 +1004,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh = *fhp, struct file *file, else err =3D nfserrno(host_err); if (test_bit(RQ_LOCAL, &rqstp->rq_flags)) =2D tsk_restore_flags(current, pflags, PF_LESS_THROTTLE); + current_restore_flags(pflags, PF_LESS_THROTTLE); return err; } =20 diff --git a/include/linux/sched.h b/include/linux/sched.h index d67eee84fd43..0978fb74e45a 100644 =2D-- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1286,10 +1286,10 @@ TASK_PFA_TEST(LMK_WAITING, lmk_waiting) TASK_PFA_SET(LMK_WAITING, lmk_waiting) =20 static inline void =2Dtsk_restore_flags(struct task_struct *task, unsigned long orig_flags, un= signed long flags) +current_restore_flags(unsigned long orig_flags, unsigned long flags) { =2D task->flags &=3D ~flags; =2D task->flags |=3D orig_flags & flags; + current->flags &=3D ~flags; + current->flags |=3D orig_flags & flags; } =20 extern int cpuset_cpumask_can_shrink(const struct cpumask *cur, const stru= ct cpumask *trial); diff --git a/kernel/softirq.c b/kernel/softirq.c index 744fa611cae0..4e09821f9d9e 100644 =2D-- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -309,7 +309,7 @@ asmlinkage __visible void __softirq_entry __do_softirq(= void) account_irq_exit_time(current); __local_bh_enable(SOFTIRQ_OFFSET); WARN_ON_ONCE(in_interrupt()); =2D tsk_restore_flags(current, old_flags, PF_MEMALLOC); + current_restore_flags(old_flags, PF_MEMALLOC); } =20 asmlinkage __visible void do_softirq(void) diff --git a/net/core/dev.c b/net/core/dev.c index 7869ae3837ca..e8a366387a99 100644 =2D-- a/net/core/dev.c +++ b/net/core/dev.c @@ -4240,7 +4240,7 @@ static int __netif_receive_skb(struct sk_buff *skb) */ current->flags |=3D PF_MEMALLOC; ret =3D __netif_receive_skb_core(skb, true); =2D tsk_restore_flags(current, pflags, PF_MEMALLOC); + current_restore_flags(pflags, PF_MEMALLOC); } else ret =3D __netif_receive_skb_core(skb, false); =20 diff --git a/net/core/sock.c b/net/core/sock.c index a96d5f7a5734..20fb01b01ddb 100644 =2D-- a/net/core/sock.c +++ b/net/core/sock.c @@ -325,7 +325,7 @@ int __sk_backlog_rcv(struct sock *sk, struct sk_buff *s= kb) =20 current->flags |=3D PF_MEMALLOC; ret =3D sk->sk_backlog_rcv(sk, skb); =2D tsk_restore_flags(current, pflags, PF_MEMALLOC); + current_restore_flags(pflags, PF_MEMALLOC); =20 return ret; } =2D-=20 2.12.2 --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEG8Yp69OQ2HB7X0l6Oeye3VZigbkFAljm104ACgkQOeye3VZi gblGqw/8CJyQ2CglB/tWaZm5pCqelJ6T7jCBbevfoGGCX2PSIE4UtdNGkgFpkddJ uwbKYOPUXpfXrfXhhonsq4wPvzWA3MXvqGHFH0PXh3h+/O3YrdaFM6pFMU0Y/7vM EYy4TWbaEHesOCg0Ty063PlPJcih8bCsTHQwZu1VjuEeYWYT22w3Fmt0/P4iUieK YZvoyu8LWktC/727Vgx8tiE+bzILk7DechrH8yJVyXo4bmfCDvB+ms3qvYcjFz4/ sREoVj9on7KyEbJm6+hsAhSkxebsdbr2AvzUvdgRQv7u3AgJIXIz0XE/mn+U/vI6 eg1OzwSoW8sOt7afBHG6gU6rGMNzE5qzeIj25PQwsPdIEqeooE/eJG2eSf/UIrxC hMZ5+L/vROFTm5yq0fxcpcTtOK7bHgw9i61Jh+jf9huoQXHepFfRu7h6Gyk4BhhE dq8Q9RoepxChjXc1kSAsmm0TWFpZHKs6jDxbzPPwzHIy1Dd2J1XYisyUuTNU/ZhP 4mJg1UTyb8HSyuPmIavgpB9FxSMSqqVOA41qXEDwk2HEDfueHMAG9gWtCevC3Uuf zxuwb2uA6ou1Vw1f8bOnTu19ZLaG5+DH3hmWkXcZCQQuYcRb/mtiTOjoFfjPwAli u9L8XsZ+M3KFzfDFIieZ7q10o8AzxLpsPF/mh4tbZs9zKRJWcI0= =KK5b -----END PGP SIGNATURE----- --=-=-=--