treewide: convert PF_MEMALLOC manipulations to new helpers

We now have memalloc_noreclaim_{save,restore} helpers for robust setting
and clearing of PF_MEMALLOC.  Let's convert the code which was using the
generic tsk_restore_flags().  No functional change.

[vbabka@suse.cz: in net/core/sock.c the hunk is missing]
Link: http://lkml.kernel.org/r/20170405074700.29871-4-vbabka@suse.cz
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: Josef Bacik <jbacik@fb.com>
Cc: Lee Duncan <lduncan@suse.com>
Cc: Chris Leech <cleech@redhat.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Richard Weinberger <richard@nod.at>
Cc: Wouter Verhelst <w@uter.be>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Vlastimil Babka 2017-05-08 15:59:53 -07:00 committed by Linus Torvalds
parent 499118e966
commit f108304872
4 changed files with 16 additions and 12 deletions

View File

@ -18,6 +18,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/sched/mm.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/bio.h> #include <linux/bio.h>
#include <linux/stat.h> #include <linux/stat.h>
@ -347,7 +348,7 @@ static int sock_xmit(struct nbd_device *nbd, int index, int send,
struct socket *sock = config->socks[index]->sock; struct socket *sock = config->socks[index]->sock;
int result; int result;
struct msghdr msg; struct msghdr msg;
unsigned long pflags = current->flags; unsigned int noreclaim_flag;
if (unlikely(!sock)) { if (unlikely(!sock)) {
dev_err_ratelimited(disk_to_dev(nbd->disk), dev_err_ratelimited(disk_to_dev(nbd->disk),
@ -358,7 +359,7 @@ static int sock_xmit(struct nbd_device *nbd, int index, int send,
msg.msg_iter = *iter; msg.msg_iter = *iter;
current->flags |= PF_MEMALLOC; noreclaim_flag = memalloc_noreclaim_save();
do { do {
sock->sk->sk_allocation = GFP_NOIO | __GFP_MEMALLOC; sock->sk->sk_allocation = GFP_NOIO | __GFP_MEMALLOC;
msg.msg_name = NULL; msg.msg_name = NULL;
@ -381,7 +382,7 @@ static int sock_xmit(struct nbd_device *nbd, int index, int send,
*sent += result; *sent += result;
} while (msg_data_left(&msg)); } while (msg_data_left(&msg));
current_restore_flags(pflags, PF_MEMALLOC); memalloc_noreclaim_restore(noreclaim_flag);
return result; return result;
} }

View File

@ -30,6 +30,7 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/inet.h> #include <linux/inet.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/sched/mm.h>
#include <linux/file.h> #include <linux/file.h>
#include <linux/blkdev.h> #include <linux/blkdev.h>
#include <linux/delay.h> #include <linux/delay.h>
@ -371,10 +372,10 @@ static inline int iscsi_sw_tcp_xmit_qlen(struct iscsi_conn *conn)
static int iscsi_sw_tcp_pdu_xmit(struct iscsi_task *task) static int iscsi_sw_tcp_pdu_xmit(struct iscsi_task *task)
{ {
struct iscsi_conn *conn = task->conn; struct iscsi_conn *conn = task->conn;
unsigned long pflags = current->flags; unsigned int noreclaim_flag;
int rc = 0; int rc = 0;
current->flags |= PF_MEMALLOC; noreclaim_flag = memalloc_noreclaim_save();
while (iscsi_sw_tcp_xmit_qlen(conn)) { while (iscsi_sw_tcp_xmit_qlen(conn)) {
rc = iscsi_sw_tcp_xmit(conn); rc = iscsi_sw_tcp_xmit(conn);
@ -387,7 +388,7 @@ static int iscsi_sw_tcp_pdu_xmit(struct iscsi_task *task)
rc = 0; rc = 0;
} }
current_restore_flags(pflags, PF_MEMALLOC); memalloc_noreclaim_restore(noreclaim_flag);
return rc; return rc;
} }

View File

@ -81,6 +81,7 @@
#include <linux/hash.h> #include <linux/hash.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/sched/mm.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/mm.h> #include <linux/mm.h>
@ -4235,7 +4236,7 @@ static int __netif_receive_skb(struct sk_buff *skb)
int ret; int ret;
if (sk_memalloc_socks() && skb_pfmemalloc(skb)) { if (sk_memalloc_socks() && skb_pfmemalloc(skb)) {
unsigned long pflags = current->flags; unsigned int noreclaim_flag;
/* /*
* PFMEMALLOC skbs are special, they should * PFMEMALLOC skbs are special, they should
@ -4246,9 +4247,9 @@ static int __netif_receive_skb(struct sk_buff *skb)
* Use PF_MEMALLOC as this saves us from propagating the allocation * Use PF_MEMALLOC as this saves us from propagating the allocation
* context down to all allocation sites. * context down to all allocation sites.
*/ */
current->flags |= PF_MEMALLOC; noreclaim_flag = memalloc_noreclaim_save();
ret = __netif_receive_skb_core(skb, true); ret = __netif_receive_skb_core(skb, true);
current_restore_flags(pflags, PF_MEMALLOC); memalloc_noreclaim_restore(noreclaim_flag);
} else } else
ret = __netif_receive_skb_core(skb, false); ret = __netif_receive_skb_core(skb, false);

View File

@ -102,6 +102,7 @@
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/sched/mm.h>
#include <linux/timer.h> #include <linux/timer.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/sockios.h> #include <linux/sockios.h>
@ -372,14 +373,14 @@ EXPORT_SYMBOL_GPL(sk_clear_memalloc);
int __sk_backlog_rcv(struct sock *sk, struct sk_buff *skb) int __sk_backlog_rcv(struct sock *sk, struct sk_buff *skb)
{ {
int ret; int ret;
unsigned long pflags = current->flags; unsigned int noreclaim_flag;
/* these should have been dropped before queueing */ /* these should have been dropped before queueing */
BUG_ON(!sock_flag(sk, SOCK_MEMALLOC)); BUG_ON(!sock_flag(sk, SOCK_MEMALLOC));
current->flags |= PF_MEMALLOC; noreclaim_flag = memalloc_noreclaim_save();
ret = sk->sk_backlog_rcv(sk, skb); ret = sk->sk_backlog_rcv(sk, skb);
current_restore_flags(pflags, PF_MEMALLOC); memalloc_noreclaim_restore(noreclaim_flag);
return ret; return ret;
} }