All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiufei Xue <jiufei.xue@linux.alibaba.com>
To: akpm@linux-foundation.org
Cc: linux-mm@kvack.org, joseph.qi@linux.alibaba.com
Subject: [PATCH] mm: fix sleeping function warning in alloc_swap_info
Date: Tue, 29 Jan 2019 15:21:54 +0800	[thread overview]
Message-ID: <20190129072154.63783-1-jiufei.xue@linux.alibaba.com> (raw)

Trinity reports BUG:

sleeping function called from invalid context at mm/vmalloc.c:1477
in_atomic(): 1, irqs_disabled(): 0, pid: 12269, name: trinity-c1

[ 2748.573460] Call Trace:
[ 2748.575935]  dump_stack+0x91/0xeb
[ 2748.578512]  ___might_sleep+0x21c/0x250
[ 2748.581090]  remove_vm_area+0x1d/0x90
[ 2748.583637]  __vunmap+0x76/0x100
[ 2748.586120]  __se_sys_swapon+0xb9a/0x1220
[ 2748.598973]  do_syscall_64+0x60/0x210
[ 2748.601439]  entry_SYSCALL_64_after_hwframe+0x49/0xbe

This is triggered by calling kvfree() inside spinlock() section in
function alloc_swap_info().
Fix this by moving the kvfree() after spin_unlock().

Fixes: 873d7bcfd066 ("mm/swapfile.c: use kvzalloc for swap_info_struct allocation")
Cc: <stable@vger.kernel.org>
Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
Signed-off-by: Jiufei Xue <jiufei.xue@linux.alibaba.com>
---
 mm/swapfile.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/mm/swapfile.c b/mm/swapfile.c
index dbac1d49469d..d26c9eac3d64 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -2810,7 +2810,7 @@ late_initcall(max_swapfiles_check);
 
 static struct swap_info_struct *alloc_swap_info(void)
 {
-	struct swap_info_struct *p;
+	struct swap_info_struct *p, *tmp = NULL;
 	unsigned int type;
 	int i;
 	int size = sizeof(*p) + nr_node_ids * sizeof(struct plist_node);
@@ -2840,7 +2840,7 @@ static struct swap_info_struct *alloc_swap_info(void)
 		smp_wmb();
 		nr_swapfiles++;
 	} else {
-		kvfree(p);
+		tmp = p;
 		p = swap_info[type];
 		/*
 		 * Do not memset this entry: a racing procfs swap_next()
@@ -2853,6 +2853,8 @@ static struct swap_info_struct *alloc_swap_info(void)
 		plist_node_init(&p->avail_lists[i], 0);
 	p->flags = SWP_USED;
 	spin_unlock(&swap_lock);
+	kvfree(tmp);
+
 	spin_lock_init(&p->lock);
 	spin_lock_init(&p->cont_lock);
 
-- 
2.19.1.856.g8858448bb


             reply	other threads:[~2019-01-29  7:22 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-29  7:21 Jiufei Xue [this message]
2019-01-29  8:53 ` [PATCH] mm: fix sleeping function warning in alloc_swap_info Aaron Lu
2019-01-29 10:43   ` Joseph Qi
2019-01-29 11:19     ` Aaron Lu
2019-01-29 11:43 ` Tetsuo Handa
2019-01-29 19:13   ` Andrew Morton
2019-01-29 21:12     ` Tetsuo Handa
2019-01-29 21:51       ` Yang Shi
2019-01-30  0:42         ` Tetsuo Handa
2019-01-30  1:01           ` Andrew Morton
2019-01-30  1:11             ` Linus Torvalds
2019-01-30  1:23               ` Linus Torvalds
2019-01-30  2:54                 ` Tetsuo Handa
2019-01-30 17:18                   ` Linus Torvalds
2019-01-30 22:13                     ` Andrew Morton
2019-03-07 14:43             ` Aaron Lu
2019-03-07 14:47               ` Andrey Ryabinin
2019-03-07 15:24                 ` Aaron Lu
2019-03-07 16:33                   ` Andrey Ryabinin
2019-03-08  2:41                     ` Aaron Lu
2019-03-11  1:43                       ` Jiufei Xue

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=20190129072154.63783-1-jiufei.xue@linux.alibaba.com \
    --to=jiufei.xue@linux.alibaba.com \
    --cc=akpm@linux-foundation.org \
    --cc=joseph.qi@linux.alibaba.com \
    --cc=linux-mm@kvack.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.