From patchwork Fri Feb 21 22:25:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Senozhatsky X-Patchwork-Id: 13986391 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 AFA90C021B6 for ; Fri, 21 Feb 2025 22:31:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4794F28000E; Fri, 21 Feb 2025 17:31:30 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 42946280004; Fri, 21 Feb 2025 17:31:30 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2CA7328000E; Fri, 21 Feb 2025 17:31:30 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 0B5E6280004 for ; Fri, 21 Feb 2025 17:31:30 -0500 (EST) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id C3A184C308 for ; Fri, 21 Feb 2025 22:31:29 +0000 (UTC) X-FDA: 83145399498.24.812E538 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) by imf27.hostedemail.com (Postfix) with ESMTP id E858E40008 for ; Fri, 21 Feb 2025 22:31:27 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=GvG82uFb; spf=pass (imf27.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.216.49 as permitted sender) smtp.mailfrom=senozhatsky@chromium.org; dmarc=pass (policy=none) header.from=chromium.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740177088; 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=cvgHEnC+lRfOrRLv2RIVOYlOBk4EIx2tIzOwTFt2Qag=; b=YWvaSuUqmW8gwuLrYBh8Dn4Mrl0H3pep+NMTskDq+O8/EnF8l9C3qOLGq8EZ8kpEhmD3MT T8CNx5mBAUMqqlsTr/qnJRwmm4ZaN+6dcxY9jbIPO4svpy9kBDZcTfS2TlqjTJEPvNQGnR sRfBeuigv062EGR17+CUupvioGCMKw4= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=GvG82uFb; spf=pass (imf27.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.216.49 as permitted sender) smtp.mailfrom=senozhatsky@chromium.org; dmarc=pass (policy=none) header.from=chromium.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740177088; a=rsa-sha256; cv=none; b=zO698YdtRKVnqNErkMRadXwSxvVluZmYiwsIoaHUKtthduZ7hzjybASqQAE0JFdEwqyDOZ uei3vXzo1yI0WOlbhZ0qRnh7bzKZ9Zqz9G1o9USgkEwqFQPSXP5rbCuXuRS4TVR+gulhKO 4oYGZLR5MLoEvNVDRZanLXYgd4h+ZP4= Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-2fa48404207so5402752a91.1 for ; Fri, 21 Feb 2025 14:31:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1740177087; x=1740781887; 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=cvgHEnC+lRfOrRLv2RIVOYlOBk4EIx2tIzOwTFt2Qag=; b=GvG82uFbqo6xJJkieZq19K7v1f4lbXR6f2FQgm2ZEDZlzEQGxZRnZtqZgmIrCWrwJu iDbdfpquBaqEfE5D5DSGhbH+WMNlHoCNMaDwVk2WY9SOVIiR5QNJ/9IHwFfOIRoxpzAK mw5YbA2yzV0cAnLZYBB/GcD7vSzsMXB7udIXo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740177087; x=1740781887; 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=cvgHEnC+lRfOrRLv2RIVOYlOBk4EIx2tIzOwTFt2Qag=; b=RMKDe7HqqAqn/m8T8AWQ9nfjDG06WRtBiItZssnIFfM1s80m8llOHJARyiBzCZ9LBd AcadDA910EibBKYg9ioLyPWwR/UaBnPtCRFsIKN3qOGOi0FBUt8RzBDkIYtkNF9w0qqR FIpolAzN2FltGP8wAaLYVh3ZrtzRztPW9OhhPwm9UC60XQTpMUptxDY1+5yaBJ8O4X9F BIv5+Kr1EEFNpPwIJUgJ5ksZTbYUjykXo/DUaX7l4hcr5op+zUCnNu1wlY0AqgDizQ7e CVjR29gOWEN7hpg+YZdzkjLdI72TJlmAI9QntqvFjeKqS6lY3lVg18Pwgu1FN+r74l86 i+1g== X-Forwarded-Encrypted: i=1; AJvYcCWxMBaRhXZ4zzYQV+VZ+hyi5eGdW/HVsefQq0tTr/HCFtmeidnMjvj6jSyDSl2E24dz4k0VKzqUrA==@kvack.org X-Gm-Message-State: AOJu0YxqexvbzJJpozEtnOAI32xHVXInwqBoKUyKMBVYyMOrMYdM0ytn wi8AE7KfK4Zdjl8PX81vfwtURc0a+RjJaVfBUwVpThIldBTYVIJcn/VPISBW3Q== X-Gm-Gg: ASbGncs3iiy3jYHL7193+G/5N3gmN5zcjsE4f9Aif+tb/eb5q+tSCKSz01v1UDYWhl2 KASxFtZ1AF+9YDTlk0Mil5YHxo8uzaA2rOWuKH0RvEYFznI7uzbzvth0pFesGbDXtqJ5Jlj4O/X EVqOeQhuWgrwaDZLY2iGFdEXtzAWrxPI9iTZSFFDk8rXL/dEfbhEU6GNg6yJmxkMGfQqBWZ5dUo r6AME9ryTE6AkutgP2Q7y6G6zoutgo7I3UJGY1s0GzyHxQd+6SXVlBvBBH2L4F9FGyuGyinpBsI 5vdDwcIR5dlPGB8VRc48u8R48LA= X-Google-Smtp-Source: AGHT+IGkPWWH6TqJ9/sgUjEBD1TJB2UYf0Tm0PHjDPg6aqJ3PVT1Kgk4bf+kZD6+22IEnkZqjfOIWw== X-Received: by 2002:a17:90b:2792:b0:2f8:49ad:4079 with SMTP id 98e67ed59e1d1-2fce779bc14mr7402899a91.6.1740177086823; Fri, 21 Feb 2025 14:31:26 -0800 (PST) Received: from localhost ([2401:fa00:8f:203:f987:e1e:3dbb:2191]) by smtp.gmail.com with UTF8SMTPSA id 41be03b00d2f7-addee79a984sm11481158a12.32.2025.02.21.14.31.24 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 21 Feb 2025 14:31:26 -0800 (PST) From: Sergey Senozhatsky To: Andrew Morton Cc: Yosry Ahmed , Hillf Danton , Kairui Song , Sebastian Andrzej Siewior , Minchan Kim , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Sergey Senozhatsky Subject: [PATCH v8 14/17] zram: permit reclaim in zstd custom allocator Date: Sat, 22 Feb 2025 07:25:45 +0900 Message-ID: <20250221222958.2225035-15-senozhatsky@chromium.org> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog In-Reply-To: <20250221222958.2225035-1-senozhatsky@chromium.org> References: <20250221222958.2225035-1-senozhatsky@chromium.org> MIME-Version: 1.0 X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: E858E40008 X-Stat-Signature: fn17scnk8cyz19ykse1shcmzwkpkmk68 X-Rspam-User: X-HE-Tag: 1740177087-255269 X-HE-Meta: U2FsdGVkX18Xe3qEL8gVZkMGFpP70dUd2yCMAQvcXe2FAnF9kXojOrHEwQaeXlCybnsE3Uq2iE5Gacy5cgLpGENtp/hg8dUqK119hKjSAkCPecH6NCbCCq2qGypBx4fVjAm7lY0e8x+t7zavrbfxUjHm+8TYCoEa9JBKIDDMblz3HZxCCrk1YjtsFaJJ4yNKPO6pHL2J9krdOL6d7tY37udGaiwomtpvdVhn5tQsJDasJgKru/Gg5Q/UDd1IWrsGPr6Cn+set6jGHiAtWynQUb4/Qf0xpGgnF+Ak1nbwhQobiU+EtFpUQeHuU05pmx/IwBrtD4m/tc51ZY2Eb8eWs45c+QTxIWrUPQlidDB9r2oZZYJodUuRSNm+zVrhIkkHaUVbgypzwdvRVINYzcnVli6eL0TxotdfsP7DSfOGHubwgstZJCqzIi3f73H6/mH2mUdPOtnMyV3/u2vuRm9XHfwxAsD90Pw2WABR+aCXjXTz2xq6YaO6tUqK1O5qUmKFjOhdtQ8nIEuN1y3PYfKvYE1keIi7K6hnnVuC4svcOeI5PL+PrBDtO+ryqa04acvnEJYyRSAZRiLbm7+NONvuA0HLgWyxAAI75xRX72sN0OJm3IWBNoIep+o1F+7y6qQNuMlJZr+j5uOKCE9rZ8X9jphtgFQ+qkLf10Z5j+00xDu4lTJEceTgLxNVvNJTDUs2jU3DjUbHB7Byu1DwBrlnBAklEp7Hit9e15C8eFywX4LPYZiS68QQZVoXplSPvmwjOaFS7W/1sSYRXtV0cazzmXi5w66WD5BNo/M+tVNWwYi290Rf5xBY/V+BUB40vNcClR+WxDhA+SUz94Kj75YAxaDXo4JwVotapzv4j+Tqu2GPIkE0y2zmeGb8I1Dzi7G8JF3qoibk20xliKBM//dd7KhrZJRWm5XZqU0JZHT9nF6W+/spSnRHWN5fEIND1OU5lW402st9nkMKkbxaS8f PppksxK4 DD6Hkn+42m55e11MX72w/3Kk+dL3+3vdRI1UfK9lRBOwLTZrtFMyPmjh925TlUW1AljWccTPeGZLdNMgMhkh8wAKoym+Qesn6ys73fhyJtJlRDNRR+qvnwmejSEYh10eICzvKXMYGWCyZlmeqjD8CUgmxeTXS30HrJxfuzJ34pb8ee8hFh7jVl7O+RUlzYQ9ZBSqtkXQQfexHuOHO1PlBG/LCOh/IYE1pPoYeywsXwVesMqf1zwnx8uR8dCCdsHETD7o6NCA4ufvL9pDfF1POZmIpcMDpO8yAossiW1ys/KjKMxUYc9ksxCL52g== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000021, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: When configured with pre-trained compression/decompression dictionary support, zstd requires custom memory allocator, which it calls internally from compression()/decompression() routines. That means allocation from atomic context (either under entry spin-lock, or per-CPU local-lock or both). Now, with non-atomic zram read()/write(), those limitations are relaxed and we can allow direct and indirect reclaim. Signed-off-by: Sergey Senozhatsky --- drivers/block/zram/backend_zstd.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/drivers/block/zram/backend_zstd.c b/drivers/block/zram/backend_zstd.c index 1184c0036f44..53431251ea62 100644 --- a/drivers/block/zram/backend_zstd.c +++ b/drivers/block/zram/backend_zstd.c @@ -24,19 +24,14 @@ struct zstd_params { /* * For C/D dictionaries we need to provide zstd with zstd_custom_mem, * which zstd uses internally to allocate/free memory when needed. - * - * This means that allocator.customAlloc() can be called from zcomp_compress() - * under local-lock (per-CPU compression stream), in which case we must use - * GFP_ATOMIC. - * - * Another complication here is that we can be configured as a swap device. */ static void *zstd_custom_alloc(void *opaque, size_t size) { - if (!preemptible()) + /* Technically this should not happen */ + if (WARN_ON_ONCE(!preemptible())) return kvzalloc(size, GFP_ATOMIC); - return kvzalloc(size, __GFP_KSWAPD_RECLAIM | __GFP_NOWARN); + return kvzalloc(size, GFP_NOIO | __GFP_NOWARN); } static void zstd_custom_free(void *opaque, void *address)