| From zhongjiang@huawei.com Tue Nov 19 05:56:14 2019 |
| From: zhong jiang <zhongjiang@huawei.com> |
| Date: Mon, 18 Nov 2019 11:26:08 +0800 |
| Subject: memfd: Use radix_tree_deref_slot_protected to avoid the warning. |
| To: <sashal@kernel.org>, <gregkh@linuxfoundation.org>, <stable@vger.kernel.org>, <willy@infradead.org> |
| Cc: <linux-mm@kvack.org>, <yangyingliang@huawei.com> |
| Message-ID: <20191118032610.182862-2-zhongjiang@huawei.com> |
| |
| From: zhong jiang <zhongjiang@huawei.com> |
| |
| The commit 99b45e7a1ba1 ("memfd: Fix locking when tagging pins") |
| introduces the following warning messages. |
| |
| *WARNING: suspicious RCU usage in memfd_wait_for_pins* |
| |
| It is because we still use radix_tree_deref_slot without read_rcu_lock. |
| We should use radix_tree_deref_slot_protected instead in the case. |
| |
| Cc: stable@vger.kernel.org |
| Fixes: 99b45e7a1ba1 ("memfd: Fix locking when tagging pins") |
| Signed-off-by: zhong jiang <zhongjiang@huawei.com> |
| Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| mm/memfd.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/mm/memfd.c |
| +++ b/mm/memfd.c |
| @@ -41,7 +41,7 @@ static void memfd_tag_pins(struct addres |
| |
| xa_lock_irq(&mapping->i_pages); |
| radix_tree_for_each_slot(slot, &mapping->i_pages, &iter, start) { |
| - page = radix_tree_deref_slot(slot); |
| + page = radix_tree_deref_slot_protected(slot, &mapping->i_pages.xa_lock); |
| if (!page || radix_tree_exception(page)) { |
| if (radix_tree_deref_retry(page)) { |
| slot = radix_tree_iter_retry(&iter); |