From patchwork Wed Feb 12 06:27:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Senozhatsky X-Patchwork-Id: 13971043 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 80DF1C02198 for ; Wed, 12 Feb 2025 06:33:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0DC1D28000F; Wed, 12 Feb 2025 01:33:21 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 08A7F28000E; Wed, 12 Feb 2025 01:33:20 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E47FF28000F; Wed, 12 Feb 2025 01:33:20 -0500 (EST) 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 C495528000E for ; Wed, 12 Feb 2025 01:33:20 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 83D034B4F9 for ; Wed, 12 Feb 2025 06:33:20 +0000 (UTC) X-FDA: 83110325760.25.2BF3EF2 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) by imf09.hostedemail.com (Postfix) with ESMTP id A5A19140009 for ; Wed, 12 Feb 2025 06:33:18 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=OBJ4s0xD; spf=pass (imf09.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.214.170 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=1739341998; 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=zGWR8uwxFV58sLam3cHzynn2zEt595XLKCTA6OHBb4A=; b=lpYl1iCVEOS1Q8jx+D0RYE7SN9hKWrCMHkTRI4WSeOQwaPrtSi0C/OGawNHlR1FfGntgcy enjcCoY1OMsdQhFfhq+Dc5VqKgQpSk3F7K2xE6uuq9KIQ7/OA1xuiluLldI8qaYYQe4zAf ZsdFUkYR9esxJv/TZh480SxTTjSucBo= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=OBJ4s0xD; spf=pass (imf09.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.214.170 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=1739341998; a=rsa-sha256; cv=none; b=K+blsKhrVyKM292nkoqJJ5hqB8XQgMkhCg7vD/I/i8h2IMWEQIoM6GgskUAAuKsEzQn2sW 3/VSZB6LnoTGSVw9uhQvx+dKH7WfCCXLzDtmXbHa6d0jpxAwtcqQegas7OdlDFHs1FFFHb B0l29XSfeWMBxuxBQIwrtm4hucfqHCM= Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-21f6f18b474so55257925ad.1 for ; Tue, 11 Feb 2025 22:33:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1739341997; x=1739946797; 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=zGWR8uwxFV58sLam3cHzynn2zEt595XLKCTA6OHBb4A=; b=OBJ4s0xDlIIKcIprw27SjJ4DPmoMNFoDMP1NnhCdzDhaE3q50xtPSzbDaFMmFz2Yt7 bK3HkZy2GbrD5xTnutFYmh0sq5qcGx5hP/JABEeKZOD3DhWobE+u3TYfL/7hx/B0gWGC mS5QYwU3ZYOw5m/tnI1MS6I0h9cRDlWNxR3+4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739341997; x=1739946797; 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=zGWR8uwxFV58sLam3cHzynn2zEt595XLKCTA6OHBb4A=; b=jphkSyXPlegwP++xNP/vwd16rNEOxzmeseBqzki6xg2L/KMKH1mUCSVvjzRkLbI1Rs Hy/OEJADqJ5NErcRZ23/LuNbQOxqUOLaxyBIHeby94gYAun/acwxFCiL6COhi07dfG3k NYZpmehZ0q9o4qBqN4i8aP9GCmYvzGhMNVG7qYpyFMxnVBWGKZhxzy+5iFciBS+4YU1M axzRlx7U9kvqW0V52mMQXK2vgbQoOx5NCJv/x6Rsw+lAAJJo7SS2UF7Sfjx0qjFNzlQw 1KDN6bd0jDyYmiuRMPEcGL6P50Nby7KAMQWnxq0ZdhG9jcDsgUxfC4G6ezgBh52iEaLj 2aQA== X-Forwarded-Encrypted: i=1; AJvYcCWCTAFn6zIkp6jhrmNgqSHppguavgY4X2TvUmOYgUxBolMUFoWCe4wbJQ0JkcPkkPyehcEgTRJx+A==@kvack.org X-Gm-Message-State: AOJu0YwsRjxnHWufC6Y19DugBixrW31uEn737i7ZHeXHowpe/qmscsN5 6DstGqdeQbi1/QMlVJRN/Ni/KmjKBn8feMlc/Dhop2KIrO3NAW3m5KU28sABu2Dyfmyrt+gsXK4 = X-Gm-Gg: ASbGnctmPITGKhPazcebwYBCpoW9dNjB3VFpm60kgESBEVrB1y0jRBd+J8HqHesuOqI C8QcLYwuTobSKEbEwZG5QE6m4V9ZiLjpw+ddB1HJ5YTnfL9+KbKi8OUPBiNwtv8JxqjYJeYb2Np Q78pXUlNqx839nVISZpAwhscbX4xi2dobl3R2ujMYSTL0LLBbFZkCC1l4tGC/cu70PDswPuRO92 sCA7ZTkh59rX1vsCAecgkJKas26nNavNFQ6utwbaMQCJ60Twur7PRFqB4od1Ybz2k1jbye99voj SaljgF1Ccro/aPp02w== X-Google-Smtp-Source: AGHT+IFzbH9qNa8XB8LsSRHPJwmV7Dgu2lkCSlxYEmJLzkmFDmA/w+WWTWaak6t0Xswa1OMVGZCLYg== X-Received: by 2002:a05:6a20:728d:b0:1ee:6187:7fb3 with SMTP id adf61e73a8af0-1ee61878104mr1837250637.15.1739341997477; Tue, 11 Feb 2025 22:33:17 -0800 (PST) Received: from localhost ([2401:fa00:8f:203:69f5:6852:451e:8142]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-73218c206a6sm2581185b3a.49.2025.02.11.22.33.15 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 11 Feb 2025 22:33:17 -0800 (PST) From: Sergey Senozhatsky To: Andrew Morton Cc: Yosry Ahmed , Kairui Song , Minchan Kim , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Sergey Senozhatsky Subject: [PATCH v5 15/18] zram: permit reclaim in zstd custom allocator Date: Wed, 12 Feb 2025 15:27:13 +0900 Message-ID: <20250212063153.179231-16-senozhatsky@chromium.org> X-Mailer: git-send-email 2.48.1.502.g6dc24dfdaf-goog In-Reply-To: <20250212063153.179231-1-senozhatsky@chromium.org> References: <20250212063153.179231-1-senozhatsky@chromium.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: A5A19140009 X-Stat-Signature: 65rco4bos1fkic8sigi6d47hesp9ktzo X-HE-Tag: 1739341998-479584 X-HE-Meta: U2FsdGVkX1/NtRW+fGVU+LkIf2ZhkinoF/YGfdLaIqP5Fqno32JjWIAETLH7UKATf6s4HP25Sacz7NWw8dcnP1pHNKgY+yntqXAd0vliS0W8zul4/GOsBhNM+g1OifTBVjosPwgk+MSq55C1C7a7S+x9u+uxj0+bPaeMuNJDUPTjdwVLKH9xKP6OgrKMJW/NlXUW7RI5wkD7u/pD/EJw0dmiKtetO2CYFaH0RH9uG3yjzFkWp0f3gCLj1ZXhTlwN4I/LcGD0MClDckLNe1toQzHogQniYKvPfKN8/uiWA5gaLu1jWBK5ciRPmTNkhLw1DvFS+bqc6nd69T1kWZ6ETbUb07qcsG3J/vGd4OAtulGo78vEBnv7o9xp85R2OzteHgNKTiKuT2imG9PtTD7AEkfrE25gzHR5FqQsXhuS29y+ZI767tP3/iaOyIQN/EHXUS5cOlIo/yfr5yUim828eJGmDVzCURG/+L7MOokt8ld4NEYQsMtevR4WYIMV9yIzwjWSO8iiz5aEFQwKeLsqKFjNW5LMyBVTO2/x8okMa3HK5Zjwdx2HC04pSs1ur9Ye5dv563JFYxmiJL7aMwjsFoCbXCAkMNwdNjfqki09BNT403lKZaU1iMtqkYQsxo+AUmG/v5mNsO8jUAPC7vUrdTf9MvFrv/dLoFRHt/dtc8kzuq3PWyhjXw90z2vMDwmUsNvcycmQD7KQUxWEXJIcyNVBNtuwHA3hcSAH6WAC4xXzwzYSxik0aH6fh8mNxVKgb6ST8z9KRL0OI4fINI7MreVyX0WVWmHQ5o23Z1KUmFNUza9H2LgFo/6smX1i+h0OxmKY/OeiRRBQTlxyIheHmZyjBqwqO1+y7sMJ0EwWk7ssTJoV4OWbnbDX1cbvTL1XWj1pt8vJVAmvR71G7AMKDtTxr3tt6OaT9MZ+o7wXv8NYJGbKANkDKw01rQx1cTA/Twwe5LBMHkq5/DgBz8g ber+UUw4 Dg9Tew75YD53uLxzGQ+H/yUSpT56+K4H6fMlrynslf4V+Hl8c6Autdx70uVXxZ6C3dg1IVWHY9Y+fJURS8rehWUz8InMIkEbWSZUSPiBf0lWHN6GultmRUJDqpSpj/fkcNTel/jd7hKgVctXOapN+gOh0RISc7ei15JB7RNxzxlMTBCx088qnF4M4JPLpabDUuadK5XiLqttDCDu9bGzyQDJ+o4V7Oe6exbSLEOGp8+yi8HLP9PqQ90olhhOHjGfPi8bg6YDWtDInpzfo55Xm8V9nGpN+rjMrFdkoUu7ClbMSe67yLq80CrOJ0A== 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: 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)