Received: by 10.192.165.148 with SMTP id m20csp5135957imm; Tue, 8 May 2018 23:13:29 -0700 (PDT) X-Google-Smtp-Source: AB8JxZq6PJ/7xZg5sRp6JRMS559KzG+WMag02PD9ZXBs47AUHRSbURX+Wttr5DWgAnRPIGgOpcUG X-Received: by 2002:a65:41cb:: with SMTP id b11-v6mr23048130pgq.260.1525846409078; Tue, 08 May 2018 23:13:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525846409; cv=none; d=google.com; s=arc-20160816; b=BwMCSabgIkbLfbfmQcj0mxV7IEyEzNi+ERICJYxo7S4lxFyBvsba6CJLqmHm8d87a1 GppFZT4tBbv7GNahGmnZoOmW/2eQYw4nlzM+8UR/P2EixHDQ90jh6enu1lPvKDIL71k6 wIFCkbLUXPjTdqC4L7Hsv0rZXoXBqm18qkM407ltnM2WOZD1HbgkiRlmsGwYbmLi5BM4 5bGyjqByLCJalbFn/e4+o4H1641D4ERkZRO0oHwtYF9dNOpHeB+fsfaNRdVLANXj0Ou7 posx3FL3bl8dwKxKhXujgWnIgt73cah0B1SrzlZTKkwuOa0sm/9inki2h2ZdR0DHfljK L22w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=ni9Qho8lS/q0vI4t4rrrqdfcl3nXtTyg9t/89Rz8u+A=; b=wuYVRQLcGmPqjzntyPexQEGJaTlMp7qqKE3+YtZfkW4ENHQJ7CG11DXaH/L0igQCve gj8QKONu6vNy1Tin3rBNa9jdFkqhrIndfu9ExLphrVyEEyWtNCjR9D3r78BJRN+4r00l 8OBCx1ffbo2ogT1Sub8lpviGi6ilkiLU8YPrHZAusvZ+y6TCYzysh21Oj+Ri7ZU0hBI7 qckGD9DcELF+Crqlsp+gplBFoUp9fb8kRjDg3cAW87BqP7TQwgHIe5nV18zyGyypK5EG HP1hTGGV/G4no/0kCgKqXF6SYCOvrko5lLsL6Qw8ko0iPGyCYSdjcBcrzcfyPUGDHrID dVJg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=cS3m75B5; 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 s124-v6si21322324pgc.4.2018.05.08.23.13.12; Tue, 08 May 2018 23:13:29 -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=cS3m75B5; 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 S1755939AbeEIGMg (ORCPT + 99 others); Wed, 9 May 2018 02:12:36 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:36767 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753147AbeEIGMe (ORCPT ); Wed, 9 May 2018 02:12:34 -0400 Received: by mail-pg0-f67.google.com with SMTP id z70-v6so1995891pgz.3 for ; Tue, 08 May 2018 23:12:34 -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:in-reply-to:references; bh=ni9Qho8lS/q0vI4t4rrrqdfcl3nXtTyg9t/89Rz8u+A=; b=cS3m75B5FpYj/zqRU52//C9DUKi0UzvIUlKVPHpl1uCZiO8G1dTR86N08XOlO17wbQ 785L9POybbp66S5VL3nvjD+i4BwiyT/yDN/mTYEwlYabGGAJhy3cgzIeZ02l9rqb/0is CA6fQlQl1vP4EgxnHeYhDu17d/DqjFhLiyzjTqQ4FXgARm1R8QKW6WtKuq0PyayZcmqa Mvv0jjwBEbkJJRuI/AYo7riK7tTCrQ2fC3f9OgWqUIHYDWoA4gFi2x+sFpC1yder4en1 0rUf7bgwUP7i88+bJv8X3PDwJi1ONy1/1BIaMTwyop/H0uzm/0voVl7Zq0jk+xDlKtdx pWAg== 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:in-reply-to :references; bh=ni9Qho8lS/q0vI4t4rrrqdfcl3nXtTyg9t/89Rz8u+A=; b=RT//xRSuzrICBqc4cGBxT3Hu1/ual8XQ+A/yyrwTI1N6tdOSn9Pw1qAXlq/kmp2GHN HYmVMuritIkZ4pWov9v+owtblIrPk89aUQefyklr8KGB9rsx/vSV7sRYsa6GMIzbFTav 2BecUe6M8dHGyRFxDrPNSxFdv2+l5tkBnP46uDxC0vvdvPQ+kw5FUm5NVUarprkN5c/O avMPKRwM9VSGnCCW9JMGh+mDOWjNXPjxFiqOQfNkQvk+ArkC6b++kphPPsXWe1C2jofi KpZwuIun/nojVi/xIqgn85zusAIhixIKDepPod7HtHPnLeXEBiHSuLi3Z2rXRI9WssaU 08bQ== X-Gm-Message-State: ALQs6tDujHmjFHEvWYq8I0maTjqCLQi/R3T94CIWAQxk4R4LVv1pmdZQ lQikfHVY2s2DfSGs44Hd3i7KKewS X-Received: by 10.98.87.142 with SMTP id i14mr41316775pfj.119.1525846354150; Tue, 08 May 2018 23:12:34 -0700 (PDT) Received: from localhost.localdomain ([115.145.179.108]) by smtp.googlemail.com with ESMTPSA id h23sm25409089pfi.175.2018.05.08.23.12.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 08 May 2018 23:12:33 -0700 (PDT) From: Jongseok Kim To: Vitaly Wool Cc: linux-kernel@vger.kernel.org, Jongseok Kim Subject: Re: [PATCH v2] z3fold: fix reclaim lock-ups Date: Wed, 9 May 2018 15:11:59 +0900 Message-Id: <1525846319-6179-1-git-send-email-ks77sj@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > Hi Jongseok, > I don't see how that is relevant, we don't use zhdr variable if the page is headless anyway. > Thanks, that is indeed a valid fix, but given the operation of eviction in > zswap case, I'd prefer to release the page here and not in _free(). > Basically we should bail very early from z3fold_free() if the page is > headless and UNDER_RECLAIM and keep the code intact in > z3fold_reclaim_page(). > ~Vitaly Hi, Vitaly. Thanks for your reply. Then I think the below code is your preferred code. And explaining about zhdr, this code don't mean that zhdr pointer is used as z3fold_header. Because it's headless like you said. Even though it is headless, however, 'zhdr', the pointer of z3fold_header, is still used in _alloc and encode_handle as an address of a headless page. So in pervious code, if eviction fails (it's not headless) and the selected page in the next try loop is headless, then 'zhdr' will remain the value of the previously failed page, which will cause a not headless page to be encoded to headless. This is why a page that is not headless is encoded as HEADLESS in _map, which causes 'z3fold: unknown buddy id 0' warning. And I have a one question. In z3fold_reclaim_page, is it because of performance that you added non-headless pages only to lru list except buddy list? ~Jongseok --- mm/z3fold.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mm/z3fold.c b/mm/z3fold.c index d5b3f49..5f659ab 100644 --- a/mm/z3fold.c +++ b/mm/z3fold.c @@ -746,6 +746,9 @@ static void z3fold_free(struct z3fold_pool *pool, unsigned long handle) } if (bud == HEADLESS) { + if (test_bit(UNDER_RECLAIM, &page->private)) + return; + spin_lock(&pool->lock); list_del(&page->lru); spin_unlock(&pool->lock); @@ -836,11 +839,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); @@ -898,6 +901,7 @@ static int z3fold_reclaim_page(struct z3fold_pool *pool, unsigned int retries) if (test_bit(PAGE_HEADLESS, &page->private)) { if (ret == 0) { free_z3fold_page(page); + atomic64_dec(&pool->pages_nr); return 0; } spin_lock(&pool->lock); -- 2.7.4