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 19A51C47258 for ; Thu, 25 Jan 2024 21:01:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9D8FB6B0080; Thu, 25 Jan 2024 16:01:49 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 988666B0088; Thu, 25 Jan 2024 16:01:49 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 850616B0089; Thu, 25 Jan 2024 16:01:49 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 747C76B0080 for ; Thu, 25 Jan 2024 16:01:49 -0500 (EST) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 09413160E4F for ; Thu, 25 Jan 2024 21:01:49 +0000 (UTC) X-FDA: 81719055138.20.9351A2E Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) by imf17.hostedemail.com (Postfix) with ESMTP id 2BDFC40011 for ; Thu, 25 Jan 2024 21:01:46 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=oe6aFMei; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf17.hostedemail.com: domain of yosryahmed@google.com designates 209.85.218.48 as permitted sender) smtp.mailfrom=yosryahmed@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1706216507; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=HHxJYsj3/b2slg0GpIBhdjGRhcgy6JBtBKDx08y8ugo=; b=PVedfA6L/iGadc47ylmdkeVlTCymVdP18wUXB20R2tZUgOA0WEaaauQQXq6o8/lXhgPZPW Y3/L8/pHOmmiAwkTpW/uaKUb6u8qrfSLMyV39jeP265hzhB9932aEhTCCVUafGOyP27PQW XlxS+gX8CTKNrW47wK168u1EwmB0nf0= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=oe6aFMei; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf17.hostedemail.com: domain of yosryahmed@google.com designates 209.85.218.48 as permitted sender) smtp.mailfrom=yosryahmed@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1706216507; a=rsa-sha256; cv=none; b=uIMn8rpxJOIGdTWosGHE1Y5sLt2f8IKZHwDcE5uno6I/IXLF0S/rcElXYOHoafbeitY37E CZAfuc+NMa1b6LTDk90wY23MrxvHiK43o8XDbqMf+uAjuyAEwWcTNBLYmjTE9ZKLc86vme J5upMX1JzH1nqwP/JnO2dKQeoUyHzm0= Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-a33c91ca179so59781866b.3 for ; Thu, 25 Jan 2024 13:01:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706216506; x=1706821306; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=HHxJYsj3/b2slg0GpIBhdjGRhcgy6JBtBKDx08y8ugo=; b=oe6aFMeiTyMY/1kCgRuosg2WQHmerXAfKWbD2/TDIFjTRdT4ye1C9iYZG89qvEuLgm WKd2jtWzYN13jY6GdB1/ZJe4k6FRpNZGW37oSGAONK7b53KeKRmafZJEt3xEwXWD+xA+ t3xQcSQ/l+EDSw3NnLD0fTljppqt4gOTESSafWYJSfNBHM8GL0KkVMn0RJuT4mV4GL29 Lot7cojdk2QpkrFmsr0VbgsepChnPkEXPcmXR4YwDTIYVaMedHQ0P2BzaIoy73B5miST IoGwssICfXc/0zvMgPka0eXIvc75BNYiIpdp5peYnEUXiDlKPRS+JDaqAwnrhosu4/VA tEZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706216506; x=1706821306; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HHxJYsj3/b2slg0GpIBhdjGRhcgy6JBtBKDx08y8ugo=; b=PZ2+0haNuvwfSOwNrLvyK77ch3z2RijoGDAeQTADJ6Hx1sR1mnRrQctmIU+nUT9ccN RboYe5hLtp5OItj05PCq69T96uLvw3NxzlqCw5pTkw/4ULTE2A1BBQPj9U/dJnNXnPbs 7C1Dlcg/vZLhrWd4P/oMfTtNWtM6A29F7dpuugcKF0uWOxEOd1jMMAjWbdJYR5Y1MqLs E3MPBYEZ0kP7txMuWexOLlmgFom+o+fdTSoPKWZCsJXydmAASQ0nI9Na4BZrHPLuNc91 VT3DozgbLU4vDEm3GPZl0jWnVBGTTA3b9RDWd/bCXjYFwU2ZiJT9+7SHQqxc58ABd/77 c4Lg== X-Gm-Message-State: AOJu0YwxPgA7qFaJrYPaBBGf9O4KQWwblW6DQaX8yOvO4nm8oEYu5X53 4Hz6gJdZI5vGP46zPZPTO2GkhBGDUqmU/XYo7CV7I2tmIxYjYJhlMiZDsxwLh4ZEgDXTQ4WfiiE RjPWw9M3LRTI3uJFyoKP48W+d4OT02JvwGnhC X-Google-Smtp-Source: AGHT+IGVqQ1zuVX6dgyb6dJad5fsCjEJeuiQ02r7PgRTBdEA7jkaRsHpW6P9wwBX8IfCUftLd+qYQ5g1jDWXThaYzyA= X-Received: by 2002:a17:906:f189:b0:a27:7cc5:b019 with SMTP id gs9-20020a170906f18900b00a277cc5b019mr79138ejb.92.1706216505581; Thu, 25 Jan 2024 13:01:45 -0800 (PST) MIME-Version: 1.0 References: <20240120024007.2850671-1-yosryahmed@google.com> <20240120024007.2850671-3-yosryahmed@google.com> <20240122201906.GA1567330@cmpxchg.org> <20240123153851.GA1745986@cmpxchg.org> <20240123201234.GC1745986@cmpxchg.org> In-Reply-To: From: Yosry Ahmed Date: Thu, 25 Jan 2024 13:01:09 -0800 Message-ID: Subject: Re: [PATCH 2/2] mm: zswap: remove unnecessary tree cleanups in zswap_swapoff() To: Chris Li Cc: Chengming Zhou , Johannes Weiner , Andrew Morton , Nhat Pham , Huang Ying , linux-mm@kvack.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 2BDFC40011 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: o33ihs1nef8euzpkb69om67mzrpowxhe X-HE-Tag: 1706216506-156387 X-HE-Meta: U2FsdGVkX1/z08aeLcNnwmmuUCBP5uyZ7o1X9IttpqxeEe5Yq1eY/m2Mn9Hgr2OEofIX2Z2l2l3cdS+nf0GroxPepTvoIyk3T874Q1wKs9qY67QIJ+Z5d/W8blbsxFgK15C34NJ7z/mnrgommCxh7Df5gvO/1vFyMaV8mRR+VLoJDSUua3NmRvHWCAtmKd5vBevf6VsSgxZGcQvHHOCe93xxlaM2TFnVZVAPftnbY1J5GLgnvoTzMNufU4AjF0m0I0wjNU9mBFD9FivhmjIZ3NmD2O4ELO8ypQ+6yyAa/PGChEkGBMIeowue6Iy+B/vOg5hf5u/ZFjLLV2yPwPqYEdR2VXGe07xEDN/Zc41b6gT+rOQVBx1V+3ELrf4SqqCv4jegUH2mb+m8dPlpe+1Ox/a2ZgzjsYIFMNtGnEHaDrm0+/kQtj9Nn5Q1+0sMy6rnITzhMeE9saxOUdeEPD70Zq3ikUHLa7+xm1JcjKs+J1e2+jolxRuokVj4rk2aEhYxndy6K5XeGpKuNCCtEFc7HtZMx9/3Ug9Sm5vMqK0G6QT9pUYwzoJ3XbRilhumm/sTGOC9DMxcQMLO2ptNd3sVtCmXfACN2hLQW40lbQFEurpUjV4HOwFb6jMRJdnYuyK9cx5Al0sDcUFS0lFoESEt811nQg/RtljBZnkJm3Bk2ySN0fnN6uI9vx3Pu2LOtFNCLcNJhBQDyxhNFlOX7NsIVK6xwW+a6NGBiuz+Udmp7Pe+gEMeyNmqWPFOAA14a/XWTpQArztxP6vDTZei1cxHqZJH0CPXRbeEWb8BzSWO5VnxFCCaD+twKbUNkU/8wTV60ffMppzv7SXm9wt8iWzKOMTu0NlaKJU3gB3QqInPdKHNyd6J8KT80jLem4HaTTjI7k5K/mZouH7jIY+uzf+nBlMtbs9Z5ye010Go+GuqdwNsVZS5SWJDL6MUcOuEOy9XG9E1eZbZe1czx7KGXpd MLrCS03h xS2bMQf0Wt8mMzBL4AULNxi5dYFoqpKe9THzKU48NSXEHbAfe3PGBZ6vdGLzWRVKLc71PyfCt+Ml1Fe3lWT2rERjZfQ6s6IGTitGC//VkD69u5UhefBX4OudEKvyD9aFRKJtTbSj6I92ynCpW1E22IGgOJCkKuOkIrGYqoVvNJRssGZGHqM51Yf0kEmUkZHseBiVJ66J2VZCzUdUg7YBY+a8Npu4hO+EYmgOAsKzfeluaL5pSMtMufnexKmxMxLO2ds0yB/NhuHEhoCZuE4YZR4yKfHgRbNsOjKXvKyQgApipmF6cUbC/x6IpI6QIGxXOxMj8SHcCFR9jsyYQ8FadxivsvGVkfdgn6j5o 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: List-Subscribe: List-Unsubscribe: On Thu, Jan 25, 2024 at 11:04=E2=80=AFAM Chris Li wrote= : > > On Thu, Jan 25, 2024 at 12:02=E2=80=AFAM Yosry Ahmed wrote: > > > > > > // lru list lock held > > > > shrink_memcg_cb() > > > > swpentry =3D entry->swpentry > > > > // Don't isolate entry from lru list here, just use list_lru_putb= ack() > > > > spin_unlock(lru list lock) > > > > > > > > folio =3D __read_swap_cache_async(swpentry) > > > > if (!folio) > > > > return > > > > > > > > if (!folio_was_allocated) > > > > folio_put(folio) > > > > return > > > > > > > > // folio is locked, swapcache is secured against swapoff > > > > tree =3D get tree from swpentry > > > > spin_lock(&tree->lock) > > > > > > That will not work well with zswap to xarray change. We want to remov= e > > > the tree lock and only use the xarray lock. > > > The lookup should just hold xarray RCU read lock and return the entry > > > with ref count increased. > > > > In this path, we also invalidate the zswap entry, which would require > > holding the xarray lock anyway. > > It will drop the RCU read lock after finding the entry and re-acquire > the xarray spin lock on invalidation. In between there is a brief > moment without locks. If my understanding is correct, at that point in the code writeback is guaranteed to succeed unless the entry had already been removed from the tree. So we can use xa_cmpxchg() as I described earlier to find and remove the entry in the tree only if it exists. If it does, we continue with the writeback, otherwise we abort. No need for separate load and invalidation. zswap_invalidate_entry() can return a boolean (whether the entry was found and removed from the tree or not).