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 49CC2C3271E for ; Sat, 6 Jul 2024 02:25:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B3B9E6B0092; Fri, 5 Jul 2024 22:25:43 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AE9F86B0096; Fri, 5 Jul 2024 22:25:43 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 965A56B0099; Fri, 5 Jul 2024 22:25:43 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 74BBD6B0092 for ; Fri, 5 Jul 2024 22:25:43 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id F2189A1E37 for ; Sat, 6 Jul 2024 02:25:42 +0000 (UTC) X-FDA: 82307736924.14.C486249 Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) by imf16.hostedemail.com (Postfix) with ESMTP id 3031D180005 for ; Sat, 6 Jul 2024 02:25:41 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=StN8t5Kq; spf=pass (imf16.hostedemail.com: domain of flintglass@gmail.com designates 209.85.210.173 as permitted sender) smtp.mailfrom=flintglass@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1720232728; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=gRlR8/y+l8PvWrquEyoi8ASknDqVdftiNelGYNv1VVY=; b=2J6jUfLKOoWJYpPORzoA/mBD3AJcNqo6oAhu24yBUUdsqCRAhUNxiI2CEVsOV+zPrDh39n nkTMkKLspqusj4g07PBExw6sLRlzpwTm5+4fXiiNuCDywmKn5ZqQZBdTOIh3x2UPtZ6ssb Mq2U3PnMtEUey+VgmJ0XmA8GsSDGX5I= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=StN8t5Kq; spf=pass (imf16.hostedemail.com: domain of flintglass@gmail.com designates 209.85.210.173 as permitted sender) smtp.mailfrom=flintglass@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1720232728; a=rsa-sha256; cv=none; b=PdxFgqRSOSoe+QeEFDXkCbP2XMhQd7x70tFuiH5k4NMQtfliVA7WSlx1V84XRwrBHqY40+ e77++CznBQALcmSHzrhMoGZAnPYZDLuPjHjqxpanbFB2JPFWbaemt2yGC7AjNRbWNzlGdB mYy2y2oH40Pt0KB+6UAXCEZHwfe6VVs= Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-70aff4e3f6dso1601410b3a.3 for ; Fri, 05 Jul 2024 19:25:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1720232740; x=1720837540; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=gRlR8/y+l8PvWrquEyoi8ASknDqVdftiNelGYNv1VVY=; b=StN8t5KqgerZiG6x0bQ/A9jJSe1Qm31MlncV2CXfXubg71QEk7LkY77fbCXE/rkLsX 05oe7q+QH4mTxpcgWtJ59cuJRCj9r89PnxEixehImeWIUNBb0vw6OD0BBgqHvhBTYIOL LCqExI81GtsKoGAPw7utPxXMWDgwRWw3Ewx/Ij1/kecKB8jlvBYEhoXWtrUVL0ptNdG1 pxeTCUpkXfT7d7DSorPvO/hOsjg6LXC1GRcQ9bM/NSqnbvAKqMhpNwHz3oLLMPZQM/0W vQjWwvaJtk/ZBB0Raw1OQg4m1qelfABGpOF+6rpEJf2gu7qytLfZdQy1f4//h2IKF4rF eFAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720232740; x=1720837540; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gRlR8/y+l8PvWrquEyoi8ASknDqVdftiNelGYNv1VVY=; b=eVwjBREJpH83E9E9I6GfKDwMp815cdCThPL01vzlNoXlGYsKR4VLQsB1klhMfP1n5M H8+mFPoI5wg+I/jya5uO2hgexzt8YGCPGzOnzrxG3qWn5sVDEDFPp9YlQib7EltvxFTZ SuZtNFcxdjseJPUOxh4YQN/eRoLwJiXW3zgjXMkvaT2drdVItBo/xPvJ3wsA6x78Ha0F A2rZPxZRMbOEwtvMjcYeQarfbz12vFz+/MO6JN01lkSyaOL2OU3cCS03Lt979gj+PSY7 Z4AECtF7C7VmRggOeDF+Av37cqf08v56kgoBegix2Ncv2V2CqViAIDiwvBNxsFshjzB1 G03g== X-Forwarded-Encrypted: i=1; AJvYcCWV5oi49TxrSfW5OAIbd+vOVKOtPWNdXzQo5xgDC027AZBctdi2OSdUxWYXsfBKGuSxxsCZgBR3OIlWMcLkIfL3Eis= X-Gm-Message-State: AOJu0Yy6DBGB2eCSgbXFPOLntZvL4mTLq5pGO/lwkO8MtM/465B0SESn TmzBkzxEqx5nH8ufRoj375W47cKK6Mj786AnWjXuL4Ue3q2eqZov X-Google-Smtp-Source: AGHT+IG56GKxKgPYasJZgCXiIS0yNg+4e9MZ/x8H5QnSjo5MAOd2N3kS6crvl3b3Vs1PQwvmsl4Zow== X-Received: by 2002:a05:6a00:b51:b0:704:2d64:747 with SMTP id d2e1a72fcca58-70b00930ae3mr7055265b3a.7.1720232739761; Fri, 05 Jul 2024 19:25:39 -0700 (PDT) Received: from cbuild.incus (h101-111-009-128.hikari.itscom.jp. [101.111.9.128]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-70b15417a7bsm971274b3a.205.2024.07.05.19.25.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jul 2024 19:25:39 -0700 (PDT) From: Takero Funaki To: Johannes Weiner , Yosry Ahmed , Nhat Pham , Chengming Zhou , Jonathan Corbet , Andrew Morton , Domenico Cerasuolo Cc: Takero Funaki , linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/6] mm: zswap: fix global shrinker error handling logic Date: Sat, 6 Jul 2024 02:25:18 +0000 Message-ID: <20240706022523.1104080-3-flintglass@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240706022523.1104080-1-flintglass@gmail.com> References: <20240706022523.1104080-1-flintglass@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 3031D180005 X-Stat-Signature: 9emqg57f33pwpwx3sgmbn7pw17bomixc X-HE-Tag: 1720232740-510498 X-HE-Meta: U2FsdGVkX18m8th0yu+IxFHaNa4ppIqHu484m+ANYA4L9OeQjl6wCcddbdwfF5m5ybBncQ3CAdDUcjR7E3Oa9KCSaaHJzqsVVLeufoWzLgHRiQkdVHd4OreOs4ECPj/z/YCiZgqWY1agJhTGwdvP5lGwKBiPOg9MOtbQWS8drTuzxWhKpAxG8DKinXfSkneaT+49HINp21nUxnGJrIywWZq2tDFj8Vk5SSOSefHPXKoJJPRYoSFs5GZhzPjXGqtxj5M350Q6BKuag8dihrYxAkRU6xSTI9CPIvvJUKtc4sutzSi/cxj+Yv4QIuBJ8kKpQK3i2pn6/crP8XkvwevVqGeplzDuHLf0xbIIeGKLStl0mzgTll+eR2twN7s9Rnu48NqvTKkM5gNquLbntzyHu/9o4vBtnmt5BzCSkuYcf1gEv3xW4+D9q7K7qjNnG/DsioKDYLC0oQHeMgjR2JR0MrDNhKx6iRiugk7WSI19lnzPqRdO5jVyWr5Ajv5OPTO8vdNb3VHU2WHLEpgfvP2pbIXMGa0wLNo1SDm1qE6tvxevWyfs1Lx87bOQQBdtnmW2FLvUyN8dj+QDF8SWihJclFV9ci9m8rGAZa8EUhAmX0fmPXWeKlDyDqFfY6eoqzVJfJEH880TzgOctt1AiOuBBW4L5NA0Sq+uCMbITHw4T64paW3Rf6ROMIAleWYkr/cCojsy7oLImZWZUtmIiDTVlvHZMjgCDa1Ui50U3iPIhqdhkVXtcXBADhxvyzsoVGNFn/azRO/LuG7v2QZCLf/vKsAkylPUPUZCWz/uu6lMKIsa8Tkpjz9t1bKW8GSHKIFGsDItDOR/7YMwyEENh8N1XfXzHBFg43eDBpdUEG4nybMmMoyP0HniiF5esqPuuBufRSC5FTImETbbZeT11ZkuGBWh0xXkVffkXu/Wj7jAeXPCoHeXcfkMKgGERFfHT2OdVUdz+0zOLY2aVasEKZV sXIlkV7V K/jxOdBE8GUt5/HT3hFCBOtxBwWAyoepVBcD2Jpuz9zpvkIC/F2wczz0zKTLYd04LVI0e5SIFFwa+QDnHG1VBS3j4z7QkVIBs2RZAVai8uGDUMX2ilk45Evhgw+aal2U5QvNnGV3JNrUhn4vcJIfzed6KSD0rwGDZiFia9Ic3u8HQCXXriaOLEvsmSgyafEpAPFzRHyy2Al+wSRGkC8BSxBBl7NzhCcQffD+/f1csLGpdtoOiiZ4yCKnwGHDUO7u3ATu6WHlT8rzzkgXAY8AGOHosaclLPe5EI3y5pyZioejvSOV760sTdIjwO7um4zZDjrKZr3rxyY8uNTLoKu8ZfGdPx6WIAtkquVb2 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: This patch fixes zswap global shrinker that did not shrink zpool as expected. The issue it addresses is that `shrink_worker()` did not distinguish between unexpected errors and expected error codes that should be skipped, such as when there is no stored page in a memcg. This led to the shrinking process being aborted on the expected error codes. The shrinker should ignore these cases and skip to the next memcg. However, skipping all memcgs presents another problem. To address this, this patch tracks progress while walking the memcg tree and checks for progress once the tree walk is completed. To handle the empty memcg case, the helper function `shrink_memcg()` is modified to check if the memcg is empty and then return -ENOENT. Fixes: a65b0e7607cc ("zswap: make shrinking memcg-aware") Signed-off-by: Takero Funaki --- mm/zswap.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/mm/zswap.c b/mm/zswap.c index 29944d8145af..f092932e652b 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -1317,10 +1317,10 @@ static struct shrinker *zswap_alloc_shrinker(void) static int shrink_memcg(struct mem_cgroup *memcg) { - int nid, shrunk = 0; + int nid, shrunk = 0, scanned = 0; if (!mem_cgroup_zswap_writeback_enabled(memcg)) - return -EINVAL; + return -ENOENT; /* * Skip zombies because their LRUs are reparented and we would be @@ -1334,19 +1334,30 @@ static int shrink_memcg(struct mem_cgroup *memcg) shrunk += list_lru_walk_one(&zswap_list_lru, nid, memcg, &shrink_memcg_cb, NULL, &nr_to_walk); + scanned += 1 - nr_to_walk; } + + if (!scanned) + return -ENOENT; + return shrunk ? 0 : -EAGAIN; } static void shrink_worker(struct work_struct *w) { struct mem_cgroup *memcg; - int ret, failures = 0; + int ret, failures = 0, progress; unsigned long thr; /* Reclaim down to the accept threshold */ thr = zswap_accept_thr_pages(); + /* + * We might start from the last memcg. + * That is not a failure. + */ + progress = 1; + /* global reclaim will select cgroup in a round-robin fashion. * * We save iteration cursor memcg into zswap_next_shrink, @@ -1390,9 +1401,12 @@ static void shrink_worker(struct work_struct *w) */ if (!memcg) { spin_unlock(&zswap_shrink_lock); - if (++failures == MAX_RECLAIM_RETRIES) + + /* tree walk completed but no progress */ + if (!progress && ++failures == MAX_RECLAIM_RETRIES) break; + progress = 0; goto resched; } @@ -1407,10 +1421,15 @@ static void shrink_worker(struct work_struct *w) /* drop the extra reference */ mem_cgroup_put(memcg); - if (ret == -EINVAL) - break; + /* not a writeback candidate memcg */ + if (ret == -ENOENT) + continue; + if (ret && ++failures == MAX_RECLAIM_RETRIES) break; + + ++progress; + /* reschedule as we performed some IO */ resched: cond_resched(); } while (zswap_total_pages() > thr); -- 2.43.0