Received: by 10.192.165.148 with SMTP id m20csp1488982imm; Wed, 2 May 2018 23:37:33 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrcHZsxa3grEOAA4S/Pw1VtPljgdfTLD9137tSVfgCSOOuu/8W5dyTXfE2BjzC4PrAa2yFq X-Received: by 2002:a17:902:7d92:: with SMTP id a18-v6mr23149484plm.331.1525329453113; Wed, 02 May 2018 23:37:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525329453; cv=none; d=google.com; s=arc-20160816; b=oWvbGDts0FOwZOVAsU+jDYY1YjMF8YuYtN3qYChox8Rv1bQufOQukg843LkhbgtGno DOfezvHjLwAmpDGBHzNnbgbAzYvE3KSn334a3xiOs7adcW1Ar6wGzMS2teTS/950q9cd P665ApMOJM4jF4wcdRChG0in4xHjQCYcFaeifOXhKanVJnbf1gzhkZ+F2CcO50y74oGB EW9OjR+6FwekfIZIca32e0PpUEexS75X8NH84IV9+ItIhmOrlCon9b2BRZqTLI+4xCLY NreuqugvEXiHmVcvWoi00yxUJ18dcSudQbC5c7BX748SFERV71PIlHj6cnlDpsvrs2/O cGnw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=DWrrcmoArscEpbWbtIA3dtEBfJrjeUCB1q3RQU5sFlA=; b=y17/boRihhQJ1DmDvuEXaI3oy433QkV+mwGaxok+MFCfdprxvaAA25dIQmXxlS6Bxy 2pxDhOTCJSlhbseT5yTK8deG+xKSeaX6fKyVcigQsZ5T3Bjtfsx3U9r3Mgjww93H9/j0 5CReG0sqOjGX1zF1WV69IuAUNacYrOK4v5T1a2CKN8VZZKeXf65VXdyBsSO3Eo3p7/ZE e7Rh2bCQUmA8/pjW3hozltkALhe/EGxSYkqoLq5pOjiVFXujWbc2iyH/J0srXwwe/7Nf UInKsvoRgxBY0n6qQinFnBGF9cjU/QHd1ZrKBYzaV79BiO6QHuzNMMKxIMic5Zv/ve/Z fhyw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=sfDz5sZ3; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u6-v6si11565313pls.462.2018.05.02.23.37.18; Wed, 02 May 2018 23:37:33 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=sfDz5sZ3; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752076AbeECGg6 (ORCPT + 99 others); Thu, 3 May 2018 02:36:58 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:38196 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751872AbeECGgz (ORCPT ); Thu, 3 May 2018 02:36:55 -0400 Received: by mail-pg0-f67.google.com with SMTP id n9-v6so12411762pgq.5 for ; Wed, 02 May 2018 23:36:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=DWrrcmoArscEpbWbtIA3dtEBfJrjeUCB1q3RQU5sFlA=; b=sfDz5sZ3yJh+b428IfxTkhclbZR2l5V1/C3TbEaGl313mchK9pGsgQ/F0h9W6yF9GM 5QeS0sG1ebwXPmnH9lG9WJJmXPxxfNe5xE5du9kELvOsO0jwuA7zP272eSfxVoKpK8n7 8iQs0zqLiVyE+XIM0XvSWnoXfQBUrwMxBGP8lwwc0N/FJk0kV2ffQLuJTeDQhaMsiVz1 ynVnA+5eUn/BiGs2bPs6v/g+P0QDp9o357d6wotRoQeH5rgsfzlD2rX2LPXfb6vnnwNH qIfqmBoTO0Qd++LWoA7BsIrqCygau+SSskEmBHEG8wBP+JAtytNXYW5kSMnKEYXGIUXD 8GOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=DWrrcmoArscEpbWbtIA3dtEBfJrjeUCB1q3RQU5sFlA=; b=uPb29AQWpdOk/FrvKt1mkW9PJXdENxWcl7nj0DpiynppcT01lkIRzRaTBHNxCeFDpN KmXi/TO4DRSGYptYgKvNIaMOSAqa47zarrmVHBRtXXJHTRyJlDSL2CwXmlLhTAID3MI3 emNsx5+f6O1sQC98uUcQEYSJlUXlEK5BirsZP1S0BoQT6D60tpzAh6jNJ/nQpz/AsnVe puqNyliYdJZsJ1b7k3ut4HLQ332iGBbjGRotyxtFn0GQU5J2TuIISsU6uRTbe2o/MiPk VyX/JyiqMp6feM4OAoAGmIwcpchk1YxTbQ44nxehsIpFr5iAD6sGznd1IdfdX4HYTB94 u4Qw== X-Gm-Message-State: ALQs6tCF8Vo/1t+tdpm1fbc0KYGGrFRcH7INbmJ0BkoR0Tk5I7pRGLMe ZPkoSh6WydAAAdoP05G+M/Z0sw== X-Received: by 2002:a17:902:9a90:: with SMTP id w16-v6mr22738935plp.390.1525329414823; Wed, 02 May 2018 23:36:54 -0700 (PDT) Received: from localhost.localdomain ([115.145.179.108]) by smtp.googlemail.com with ESMTPSA id f9-v6sm18433943pgo.49.2018.05.02.23.36.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 02 May 2018 23:36:53 -0700 (PDT) From: Jongseok Kim To: Vitaly Wool Cc: linux-kernel@vger.kernel.org, Jongseok Kim Subject: [PATCH v2] z3fold: fix reclaim lock-ups Date: Thu, 3 May 2018 15:36:18 +0900 Message-Id: <1525329378-1864-1-git-send-email-ks77sj@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In the processing of headless pages, there was a problem that the zhdr pointed to another page or a page was alread released in z3fold_free(). So, the wrong page is encoded in headless, or test_bit does not work properly in z3fold_reclaim_page(). This patch fixed these problems. Signed-off-by: Jongseok Kim --- mm/z3fold.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/mm/z3fold.c b/mm/z3fold.c index d5b3f49..a36ffa5ab 100644 --- a/mm/z3fold.c +++ b/mm/z3fold.c @@ -819,6 +819,7 @@ static void z3fold_free(struct z3fold_pool *pool, unsigned long handle) static int z3fold_reclaim_page(struct z3fold_pool *pool, unsigned int retries) { int i, ret = 0; + bool is_headless; struct z3fold_header *zhdr = NULL; struct page *page = NULL; struct list_head *pos; @@ -836,11 +837,11 @@ static int z3fold_reclaim_page(struct z3fold_pool *pool, unsigned int retries) } list_for_each_prev(pos, &pool->lru) { page = list_entry(pos, struct page, lru); + zhdr = page_address(page); if (test_bit(PAGE_HEADLESS, &page->private)) /* candidate found */ break; - zhdr = page_address(page); if (!z3fold_page_trylock(zhdr)) continue; /* can't evict at this point */ kref_get(&zhdr->refcount); @@ -873,9 +874,11 @@ static int z3fold_reclaim_page(struct z3fold_pool *pool, unsigned int retries) * reference to this page */ z3fold_page_unlock(zhdr); + is_headless = false; } else { first_handle = encode_handle(zhdr, HEADLESS); last_handle = middle_handle = 0; + is_headless = true; } /* Issue the eviction callback(s) */ @@ -895,11 +898,10 @@ static int z3fold_reclaim_page(struct z3fold_pool *pool, unsigned int retries) goto next; } next: - if (test_bit(PAGE_HEADLESS, &page->private)) { - if (ret == 0) { - free_z3fold_page(page); + if (is_headless) { + if (ret == 0) return 0; - } + spin_lock(&pool->lock); list_add(&page->lru, &pool->lru); spin_unlock(&pool->lock); -- 2.7.4