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 2D0EBC7EE29 for ; Thu, 8 Jun 2023 16:52:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AA22F6B0072; Thu, 8 Jun 2023 12:52:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A2B436B0074; Thu, 8 Jun 2023 12:52:54 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8A50F8E0001; Thu, 8 Jun 2023 12:52:54 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 756D06B0072 for ; Thu, 8 Jun 2023 12:52:54 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 3F3DF1602B6 for ; Thu, 8 Jun 2023 16:52:54 +0000 (UTC) X-FDA: 80880175068.15.F7F9C6A Received: from mail-qk1-f182.google.com (mail-qk1-f182.google.com [209.85.222.182]) by imf15.hostedemail.com (Postfix) with ESMTP id 6EA1FA0014 for ; Thu, 8 Jun 2023 16:52:52 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=cmpxchg-org.20221208.gappssmtp.com header.s=20221208 header.b=aVeSKvRP; dmarc=pass (policy=none) header.from=cmpxchg.org; spf=pass (imf15.hostedemail.com: domain of hannes@cmpxchg.org designates 209.85.222.182 as permitted sender) smtp.mailfrom=hannes@cmpxchg.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1686243172; a=rsa-sha256; cv=none; b=rnahT5MhPo8BCd36WMBrIS4B46TGtOKGO3Fdw5FbwsqTMRM0uw6rHm/0KA9XTZ6ZSlCQxp AyGn5VzAAmhHRFPMZ+rslcCmKcq+x/b+ox7xN2BAEcM0KCRDr+OsLjUOwC2SCSbr5JNCmh URcVyjG76CVdhQeu0qyngntPIZxuKuU= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=cmpxchg-org.20221208.gappssmtp.com header.s=20221208 header.b=aVeSKvRP; dmarc=pass (policy=none) header.from=cmpxchg.org; spf=pass (imf15.hostedemail.com: domain of hannes@cmpxchg.org designates 209.85.222.182 as permitted sender) smtp.mailfrom=hannes@cmpxchg.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1686243172; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=jiBhLGWbITC43BT7KiNGlbnSE+yVfhOycw9l7fHnG08=; b=R2+/EDhb6mIiPsJ6FJlhEVXy8hRZR0f7B9JGVcPwaDmPC4O6X2fHP9WKS9PNQ16yAXqgxm R4NxsNpJlZihey+HxIGEClsCQvhpr4xofOEquqjc28cV8zs1BS2AYnDc0QNpo2mg+kfyI8 ImJ6oCClI7dOghR+sI7c+TTO7LS/IzI= Received: by mail-qk1-f182.google.com with SMTP id af79cd13be357-75e1ec47c3fso64031685a.2 for ; Thu, 08 Jun 2023 09:52:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cmpxchg-org.20221208.gappssmtp.com; s=20221208; t=1686243171; x=1688835171; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=jiBhLGWbITC43BT7KiNGlbnSE+yVfhOycw9l7fHnG08=; b=aVeSKvRPTf0sr7EyyKyVsYEUOB3eE8Ql7hj/pFjKhSvhkvD/LVG1Id53z3qsV1+A6T 6i1qa/EoVJINgnJ4TIEdEPBlXKUtPgidGRmSzpSKr3Ebyd1KjjwZZzikyz9yaDyq7Xx3 xHxUKjCeM33JYdQYEjHa4oEciyIkjLPoxQvYZN/fyTR3sAbQFqFUmvnWR1VOsDUfLYoo Kmusa2BE6UV5C7NVFZOodzg4sXee54p//oV/YtkeujKwHgvsTjzWQBQA7enAo9BaJ+/Z q7Zjd8Fu62Xs53rAVvc90fMhqNJiu1Bd821WodXe++oHWPGTG4MtiGQHLCaJwHNlXiCR b1Gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686243171; x=1688835171; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=jiBhLGWbITC43BT7KiNGlbnSE+yVfhOycw9l7fHnG08=; b=QtBpu+5QMSGf2pony2hKjWpWjjGtIB4zjWDM6do2thy6BRWldsAqmChWmO1yx/PShU H5BzyvCeLIjVPCskySA/HFHAYpc3Fg//GSdkii4i12XGVjOn/3M9DWqeWKuyK2g/h+39 PcxFm5iNOs4qW2Rjsznh/D+bJNdI4kFK+mQ0haybIECFB3T1NhKxLP/lhNuR26FFrJ6w PjWKacDEN+pQt5FNqS54+3vSnRae0Wq5Sk/vgLMH5ebHJ94BTHu5PH+aA0VbQJbhQtRy pXUXmCY0PVOze/Cy304qgzOMiRI6iMZx7gMCvqV2evnVURwzry+ddR38Bj7qKVYytFgX hJiw== X-Gm-Message-State: AC+VfDy+16Ey8Wgw7pALsO8ATnY3smEJlaNCg65UOePpUx1bjtG3m2X4 AkDmrV+7TccQsKjo7c0Sto0tgw== X-Google-Smtp-Source: ACHHUZ5QwtZUohNsMeuxDEXfaQKw4Cn1nPDm7p/M573oU6iRH/1talz/+q8EeRRn07HRSl6frtGFJA== X-Received: by 2002:a05:620a:4391:b0:75e:c588:bb41 with SMTP id a17-20020a05620a439100b0075ec588bb41mr6068044qkp.66.1686243171452; Thu, 08 Jun 2023 09:52:51 -0700 (PDT) Received: from localhost (2603-7000-0c01-2716-8f57-5681-ccd3-4a2e.res6.spectrum.com. [2603:7000:c01:2716:8f57:5681:ccd3:4a2e]) by smtp.gmail.com with ESMTPSA id 22-20020a05620a06d600b0074fafbea974sm460308qky.2.2023.06.08.09.52.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 09:52:51 -0700 (PDT) Date: Thu, 8 Jun 2023 12:52:50 -0400 From: Johannes Weiner To: Domenico Cerasuolo Cc: vitaly.wool@konsulko.com, minchan@kernel.org, senozhatsky@chromium.org, yosryahmed@google.com, linux-mm@kvack.org, ddstreet@ieee.org, sjenning@redhat.com, nphamcs@gmail.com, akpm@linux-foundation.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: Re: [RFC PATCH v2 1/7] mm: zswap: add pool shrinking mechanism Message-ID: <20230608165250.GG352940@cmpxchg.org> References: <20230606145611.704392-1-cerasuolodomenico@gmail.com> <20230606145611.704392-2-cerasuolodomenico@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230606145611.704392-2-cerasuolodomenico@gmail.com> X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 6EA1FA0014 X-Stat-Signature: jpbcfsiux1mxw5enkrhqarp6ykartru7 X-HE-Tag: 1686243172-996403 X-HE-Meta: U2FsdGVkX18j783xqEH6BdnuKD7FVEpDPbVAYHf0ZHFuLe7RCiiPR0a8Ixnwd315e6jfkWgzNTSnwONuo9XynSOqmMnkLwDUdj/I7TKZAeMuazHpPJKJzKSUYGeWpROOT903N8boUkxmKlmsU81vzgo+JGoD9OKaabTwdLDJTBxSsxqI9g6mKHWt3VqAyWQ9/qf7iF36mnHHo3XWnQKhKji45BllNpsbfBZOrlbffiG4Fod/SHszQhOdS7bHTHCgGJxEbqnSNbFiGob23rXsj8ZmIGzag27CoAB6wD5CwNup4mpLHEfsSAhjW/w7gxW6yfD5dO0Up89TUGI+VYpZk7TZ9t+vqg2D5p6SmdqCA5AK0CiJnlLup8SiGIyxeejtge7dHt0hanyf4y659racUXCv1pIJ6EgKFzRVh4JNUHsW5UWuvVStT9wQzSOCv+/vbe5mzkIW9af+jXl/mZmEKCmdaZYXW7yVDemKOAJmOKn8aNAjJYb4wopoLN9fqmEHjfIYkbRvtUFqC1mYEpeNYr/9bYthx7mDfNduUFqs7MsTLKI+1hdZZt3sW/aut2TLG94201U248n5uTTPU9EzoyGcHurLN6kNld8mno2ZgfI6STu0gEFhbG6Ijix2+jUgxvpvGoMI4h5IodwctvoitwOBwcPBsQ8gyhpl1TSwQnDGkqfjlUDHMwPd/PYQjg7/cMpJouf6fTYAbiXHbM+goIjsMeWDKqp8GgC4OSnTvrMfscm0l9JXy0WVDJSFa3kGxYfJF8Xr+L6+5IlBPBRJBTvZTKsiiwAjKCK47VDhdYIjFeqBQuZgCnn4nlnSOxwwTbx3SZK/CycRVqXpFUSG4gWxdoj8J/TognNkhOhHNK5UjofvkuHMj2ZiqaZcZNkAL3GQMThCfXPnbe+jeIsE+hjqFuRrFtARtyS85fc4BikgaYBOxrbMyD6MiU/Nn/28vs7CAN7PF5Cz/rAseBe G0VVhBuX tNwJ8N7XVBs6MGM2OLP1lPRmQzAYUP038DAtaJMnyndSBLejMr2ts1xCk/6FQ1AkuoM5n8WHK8YDr9obr96btZ9lVkzcwEj8zHq5lNgDL4m0O5ZsT/1cx7ys3syxbMXYHsGeMXsEyAVsBCuNWzVeiG46Qd0/44rdDSR9egY0VG+OUxoqSn0xCiUymzhQKnTDH8DyhTobtgGqlgpMgpc46ij0M7jXo5LmewDNkJ9gdO0dMATPRlyt4IHazacc+preFrR+Qx+p7TlJk01T2r/za/wNjGLEBmw2sTdofQxdPmGhRAlI+YsocAofaCU8jNRqI4PVc5zWr37Lb3JO5+uxW3MWlYF9gHxLGuAvmUr5yHbNInhaoBb8EsVTnH1sYdANDss3Vcb8SRj0VIUo= 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 Tue, Jun 06, 2023 at 04:56:05PM +0200, Domenico Cerasuolo wrote: > @@ -584,14 +601,70 @@ static struct zswap_pool *zswap_pool_find_get(char *type, char *compressor) > return NULL; > } > > +static int zswap_shrink(struct zswap_pool *pool) > +{ > + struct zswap_entry *lru_entry, *tree_entry = NULL; > + struct zswap_header *zhdr; > + struct zswap_tree *tree; > + int swpoffset; > + int ret; > + > + /* get a reclaimable entry from LRU */ > + spin_lock(&pool->lru_lock); > + if (list_empty(&pool->lru)) { > + spin_unlock(&pool->lru_lock); > + return -EINVAL; > + } > + lru_entry = list_last_entry(&pool->lru, struct zswap_entry, lru); > + list_del_init(&lru_entry->lru); > + zhdr = zpool_map_handle(pool->zpool, lru_entry->handle, ZPOOL_MM_RO); > + tree = zswap_trees[swp_type(zhdr->swpentry)]; > + zpool_unmap_handle(pool->zpool, lru_entry->handle); > + /* > + * Once the pool lock is dropped, the lru_entry might get freed. The > + * swpoffset is copied to the stack, and lru_entry isn't deref'd again > + * until the entry is verified to still be alive in the tree. > + */ > + swpoffset = swp_offset(zhdr->swpentry); > + spin_unlock(&pool->lru_lock); > + > + /* hold a reference from tree so it won't be freed during writeback */ > + spin_lock(&tree->lock); > + tree_entry = zswap_entry_find_get(&tree->rbroot, swpoffset); > + if (tree_entry != lru_entry) { > + if (tree_entry) > + zswap_entry_put(tree, tree_entry); > + spin_unlock(&tree->lock); > + return -EAGAIN; > + } > + spin_unlock(&tree->lock); > + > + ret = zswap_writeback_entry(pool->zpool, lru_entry->handle); > + > + spin_lock(&tree->lock); > + if (ret) { > + spin_lock(&pool->lru_lock); > + list_move(&lru_entry->lru, &pool->lru); > + spin_unlock(&pool->lru_lock); > + } > + zswap_entry_put(tree, tree_entry); On re-reading this, I find the lru_entry vs tree_entry distinction unnecessarily complicated. Once it's known that the thing coming off the LRU is the same thing as in the tree, there is only "the entry". How about 'entry' and 'tree_entry', and after validation use 'entry' throughout the rest of the function?