From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 59DB7C433EF for ; Thu, 19 May 2022 07:14:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EA0526B0074; Thu, 19 May 2022 03:14:35 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E50E86B0075; Thu, 19 May 2022 03:14:35 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D191D6B0078; Thu, 19 May 2022 03:14:35 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id C37E56B0074 for ; Thu, 19 May 2022 03:14:35 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay12.hostedemail.com (Postfix) with ESMTP id 93A661208F1 for ; Thu, 19 May 2022 07:14:35 +0000 (UTC) X-FDA: 79481629710.23.C40CEC1 Received: from mail-yw1-f172.google.com (mail-yw1-f172.google.com [209.85.128.172]) by imf11.hostedemail.com (Postfix) with ESMTP id 0ACD140006 for ; Thu, 19 May 2022 07:14:23 +0000 (UTC) Received: by mail-yw1-f172.google.com with SMTP id 00721157ae682-2ff53d86abbso28561017b3.8 for ; Thu, 19 May 2022 00:14:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=konsulko.com; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=m4dkMUBjXmr29DvEu0d7QY2KaK3h+KI8JPQ8UIjV1nc=; b=ncHRyuryZDkR9T6KwBhdvmfTdnAe4BGbnp+zbgHgPV0y8KTH3fZACSGswVkNnuJNSO +cWvux3fhUOd+fQHIWJn1GlH3AkcQPDPHrylAV31iuD0QPxQwPV5E+wze30wY8Dd9/Bz jei+9+6NmzwObudOZpdcZ9+CK3gkUJ7EO4Arc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=m4dkMUBjXmr29DvEu0d7QY2KaK3h+KI8JPQ8UIjV1nc=; b=Oh1+ZLsABVNDwvwugXfZyQqMBANdz/3n7t3CLa01SWUBg+PrGTzA3Pzz2zecR1J3Gf RlVrRbYi2reaDeIbekBTos7Iel2KAy6kOASgQTPdr9Z5T3okgaYMHzdPM7fvPn1nGYP4 j9jW1v/NCXyDqoyFiLAtB5C6eXDUsNXXZw7AbkuEGrvRrfNF8eNDvxASID4Anhz+ATn+ DnBliaT6u8njmv9g3Ec42jJVe5I6LRbdCwjjECQWpToZmVN3c5HEPPQlLPfYX2QFt0DC zR3Eu9CIwCr45C20aAIFRhlhn5KYkFT3pMilKuuinqohiBdzqilaQSktrEv5iwkRHvk2 ecoQ== X-Gm-Message-State: AOAM531gsSOkOvbe5tcRpOJ/P7mC8qpi5GeFvl5Bj6X5uORyf5mS+DZS hsCEHVWMVzCqDgTaHi5oZ3YaDJZUxwY3lU9Q7o2rsD1Q8l8= X-Google-Smtp-Source: ABdhPJwHCiCtOihK3wf0xQOM/tNKltnbYn/XzVurFQjmOkO9x7QCVrZKymk7KwDLe0/jLMrgd2fiZVlaLJi43mFdlc4= X-Received: by 2002:a0d:ca82:0:b0:2ff:4451:7591 with SMTP id m124-20020a0dca82000000b002ff44517591mr3209343ywd.352.1652944469482; Thu, 19 May 2022 00:14:29 -0700 (PDT) MIME-Version: 1.0 References: <20220429064051.61552-1-linmiaohe@huawei.com> <20220429064051.61552-8-linmiaohe@huawei.com> In-Reply-To: <20220429064051.61552-8-linmiaohe@huawei.com> From: Vitaly Wool Date: Thu, 19 May 2022 09:14:18 +0200 Message-ID: Subject: Re: [PATCH 7/9] mm/z3fold: always clear PAGE_CLAIMED under z3fold page lock To: Miaohe Lin Cc: Andrew Morton , Linux-MM , LKML Content-Type: text/plain; charset="UTF-8" X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 0ACD140006 X-Stat-Signature: 9938c9koo8ozpnp9r8q1icp6qwie91hh Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=konsulko.com header.s=google header.b=ncHRyury; dmarc=pass (policy=none) header.from=konsulko.com; spf=pass (imf11.hostedemail.com: domain of vitaly.wool@konsulko.com designates 209.85.128.172 as permitted sender) smtp.mailfrom=vitaly.wool@konsulko.com X-Rspam-User: X-HE-Tag: 1652944463-320959 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Fri, Apr 29, 2022 at 8:40 AM Miaohe Lin wrote: > > Think about the below race window: > > CPU1 CPU2 > z3fold_reclaim_page z3fold_free > test_and_set_bit PAGE_CLAIMED > failed to reclaim page > z3fold_page_lock(zhdr); > add back to the lru list; > z3fold_page_unlock(zhdr); > get_z3fold_header > page_claimed=test_and_set_bit PAGE_CLAIMED > > clear_bit(PAGE_CLAIMED, &page->private); > > if (!page_claimed) /* it's false true */ > free_handle is not called > > free_handle won't be called in this case. So z3fold_buddy_slots will leak. > Fix it by always clear PAGE_CLAIMED under z3fold page lock. > > Signed-off-by: Miaohe Lin > --- > mm/z3fold.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/mm/z3fold.c b/mm/z3fold.c > index a1c150fc8def..4a3cd2ff15b0 100644 > --- a/mm/z3fold.c > +++ b/mm/z3fold.c > @@ -1221,8 +1221,8 @@ static void z3fold_free(struct z3fold_pool *pool, unsigned long handle) > return; > } > if (test_and_set_bit(NEEDS_COMPACTING, &page->private)) { > - put_z3fold_header(zhdr); > clear_bit(PAGE_CLAIMED, &page->private); > + put_z3fold_header(zhdr); > return; > } > if (zhdr->cpu < 0 || !cpu_online(zhdr->cpu)) { > @@ -1424,8 +1424,8 @@ static int z3fold_reclaim_page(struct z3fold_pool *pool, unsigned int retries) > spin_unlock(&pool->lock); > if (list_empty(&zhdr->buddy)) > add_to_unbuddied(pool, zhdr); > - z3fold_page_unlock(zhdr); > clear_bit(PAGE_CLAIMED, &page->private); > + z3fold_page_unlock(zhdr); > } > > /* We started off locked to we need to lock the pool back */ > @@ -1577,8 +1577,8 @@ static int z3fold_page_migrate(struct address_space *mapping, struct page *newpa > if (!z3fold_page_trylock(zhdr)) > return -EAGAIN; > if (zhdr->mapped_count != 0 || zhdr->foreign_handles != 0) { > - z3fold_page_unlock(zhdr); > clear_bit(PAGE_CLAIMED, &page->private); > + z3fold_page_unlock(zhdr); > return -EBUSY; > } > if (work_pending(&zhdr->work)) { Reviewed-by: Vitaly Wool > -- > 2.23.0 >