Received: by 2002:ac0:a591:0:0:0:0:0 with SMTP id m17-v6csp1385516imm; Thu, 5 Jul 2018 22:14:01 -0700 (PDT) X-Google-Smtp-Source: AAOMgpd7wP9SoTzf9w6hKOVkv1Lfyd+kTdsb68aGNyl6i/oBjNMOmSlPtMEDOmhKUAA414EpNhzH X-Received: by 2002:a63:6743:: with SMTP id b64-v6mr1632265pgc.91.1530854041789; Thu, 05 Jul 2018 22:14:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530854041; cv=none; d=google.com; s=arc-20160816; b=l32CtZTn/TTTsmn2ifjQ4/PLXOhvqztIt3ie4/URCtmzmBx/4aEz2Xy3qn9KCvoasX o7tMVyq2jkS5+od0XmXNrKgmRw3fXZmc+DXOMawrqwoM5Q0ZUB3mfQ7M5/T/PtaMW3b7 ch5LZB4eMcL1aGAIDlS4DakreBKyWAYxyzNjde0HJC23e/9VY5xvv7Hr60IwiIK4AbgU HvS8yvx0CLg0ufzV1Dxv1nfci/6ULXpL0jhclMU5ZC9D3Eu1dyj44G84SM5PmwYiPGXL rYeJN6g1HxAeTGD0RxM0iX016CRvWFNnlTATfgi1GsQjKJDwhL3cUvJebeZjRbeYrBrl x1FQ== 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=QefmJMg/TbWqvSsSmZgKfnbT6B5TaKOfp1HBZ4HNxV4=; b=oI/vpbWhXAKyAd+b34AzhnxGrW/b0QUuVjtBOJYaaTOLg/BaaI6F0cWB+DGw7T+gKj iaEWGzBqesjYpvyvnZKVTHTU/ugxAfrbSdLF9OcOuoOH1vXUWGgSKZcAG4yg7cgXU0Kw nvSWXrI4j5pI9OKyfrXr+utd/DEOrpofXTj1/jnZEFupOeokM+Qb78gUpS0QW8jpQRtG uQP6yb6gH2XIUmik7LbG5JzKZ8r33+Xtalyl0LwHQDMVDrbD+mJBFJrMXNjhJ/kaS715 Ag5Xv73iPez/7rY9SWqKfAPeshj7NVX7iKo38fYBAMawwuOKV0ihunQBaWv+HPSZ6IAu F1OQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=XNqN7leF; 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 a24-v6si6822340pgw.213.2018.07.05.22.13.12; Thu, 05 Jul 2018 22:14:01 -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=XNqN7leF; 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 S932213AbeGFFLa (ORCPT + 99 others); Fri, 6 Jul 2018 01:11:30 -0400 Received: from mail-pf0-f193.google.com ([209.85.192.193]:38158 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932158AbeGFFL3 (ORCPT ); Fri, 6 Jul 2018 01:11:29 -0400 Received: by mail-pf0-f193.google.com with SMTP id j17-v6so7371873pfn.5 for ; Thu, 05 Jul 2018 22:11:29 -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=QefmJMg/TbWqvSsSmZgKfnbT6B5TaKOfp1HBZ4HNxV4=; b=XNqN7leFurlMlRpj5GSATxO9qF5C3knIkThz/q1GJXZCzoXYKjGOsO6lfQzZl+YUll AdppTWSuxaYRY0YVgBpZ/TNBlN+WX0RYduUsUIf/jw4wfUBK/aOihw65kYn+58yIioV2 J3WUpz+2N63XAmwyVISjYd0JcBJaH5QaJTAV40mWxer6Wi1dpQ02HRvT+EQfqhRv54QD w6hPzzmdczW7Im+Rz5mRhxM0rkX3A7bVOpnnRw7F/DehKzTf/c5A8SFz/Lo72WyOpoii OPS6Itty+on4uyyQRMTSD8YUL3avqHtsgN/XM1kfcz/ckKN5XU/pegTWyQlIoQLhpB1J 0Ssw== 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=QefmJMg/TbWqvSsSmZgKfnbT6B5TaKOfp1HBZ4HNxV4=; b=lKyDHFTwVIzfchufDeD0tzkd1oMZWLJ5oCeRJ2ekq57QhYl3RRgV0Fk/UKizzxZDH7 n6QkqlKEYV9zDopGljvgiaeh+twuu908H/7C1E08jfQ67QjnLrc9N+3JfLos9MHBeYgY 2YgAgcdYdYF4V6KREjqOKavVjAHpz243D1BGHaTSkEe9tHvjgNS1elkYMmS6wvpscrJJ fRDaexB0Ci+bm1l7VhTRLF1FMpWrg6zCps8CkKI+zz3qbpQNXNsWCys57jetxgflSyuO ggRfDKVnYk5rT4hn8X48kqiTyMtTAL2Q9TUvH4HrVuFaBzHHl14892f3vtnQT3kSJQnr UNlg== X-Gm-Message-State: APt69E1600pPKd9pLmzNw0sKq1YtvmQ2icErfjlmOUiGn2/dmePW55lx hUCbY5fd4MV7jmeo7gHPJks= X-Received: by 2002:a65:450a:: with SMTP id n10-v6mr7848385pgq.392.1530853888951; Thu, 05 Jul 2018 22:11:28 -0700 (PDT) Received: from localhost.localdomain ([115.145.179.108]) by smtp.googlemail.com with ESMTPSA id v15-v6sm11460443pff.120.2018.07.05.22.11.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 05 Jul 2018 22:11:27 -0700 (PDT) From: Jongseok Kim To: Andrew Morton , Vitaly Wool Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Jongseok Kim Subject: [PATCH] z3fold: fix wrong handling of headless pages Date: Fri, 6 Jul 2018 14:10:46 +0900 Message-Id: <1530853846-30215-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 During the processing of headless pages in z3fold_reclaim_page(), there was a problem that the zhdr pointed to another page or a page was already 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 | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mm/z3fold.c b/mm/z3fold.c index 4b366d1..201a8ac 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,20 +839,20 @@ 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); list_del_init(&zhdr->buddy); zhdr->cpu = -1; - set_bit(UNDER_RECLAIM, &page->private); break; } + set_bit(UNDER_RECLAIM, &page->private); list_del_init(&page->lru); spin_unlock(&pool->lock); @@ -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