--- /dev/null
+From zhangxiaoxu5@huawei.com Wed Jun 12 13:03:33 2019
+From: ZhangXiaoxu <zhangxiaoxu5@huawei.com>
+Date: Wed, 12 Jun 2019 09:54:25 +0800
+Subject: futex: Fix futex lock the wrong page
+To: <tglx@linutronix.de>, <mingo@redhat.com>, <peterz@infradead.org>, <dvhart@infradead.org>, <linux-kernel@vger.kernel.org>, <zhangxiaoxu5@huawei.com>
+Message-ID: <1560304465-68966-1-git-send-email-zhangxiaoxu5@huawei.com>
+
+From: ZhangXiaoxu <zhangxiaoxu5@huawei.com>
+
+The upstram commit 65d8fc777f6d ("futex: Remove requirement
+for lock_page() in get_futex_key()") use variable 'page' as
+the page head, when merge it to stable branch, the variable
+`page_head` is page head.
+
+In the stable branch, the variable `page` not means the page
+head, when lock the page head, we should lock 'page_head',
+rather than 'page'.
+
+It maybe lead a hung task problem.
+
+Signed-off-by: ZhangXiaoxu <zhangxiaoxu5@huawei.com>
+Cc: stable@vger.kernel.org
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ kernel/futex.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -593,8 +593,8 @@ again:
+ * applies. If this is really a shmem page then the page lock
+ * will prevent unexpected transitions.
+ */
+- lock_page(page);
+- shmem_swizzled = PageSwapCache(page) || page->mapping;
++ lock_page(page_head);
++ shmem_swizzled = PageSwapCache(page_head) || page_head->mapping;
+ unlock_page(page_head);
+ put_page(page_head);
+