From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj2-f10.google.com (mail-pj2-f10.google.com [74.125.227.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 01DD841E6AD for ; Tue, 28 Jul 2026 09:30:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.138 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785231015; cv=none; b=oAbXJzH4pLvqOg1Ibxlls7tM2vLt/0dGeMUE2kNacXDtfopkeDsxiBLPFSEbhduy9yS1NT66Y0hz5fjkgdP8BqV8COdSG2ajdMD3nlWjDeixGYvKAfxxwV7mIDbdbGPJZCN9qZ+1dfKjwWp+HvYnyzfT9tWa0Sc66Id0IRTxAgU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785231015; c=relaxed/simple; bh=p2KyV1M2I7pW89BPyORLMX0vJRqoCcGVml1ufIQfzm8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lcFluYB2rak5XKPGveq8M361363gdovRcniQlqPzfBVhWL3ZcKw/rqF/5Fni+WuCuNBK80+CVAs0jLgHGHpJjthfs+4To+xN5REFD96iHv87MmHJcIv6ErEsjo5mDyUOy6nYnJ4rY96J0+vrrpxsPQZf8ZWhQIgS1//fMXjnSj4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=OFeH43Vk; arc=none smtp.client-ip=74.125.227.138 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OFeH43Vk" Received: by mail-pj2-f10.google.com with SMTP id d9443c01a7336-2cf49dc298bso34401655ad.0 for ; Tue, 28 Jul 2026 02:30:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785231013; x=1785835813; darn=vger.kernel.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:content-type; bh=JO8m6+/OzqIxIcBgfk2F3Ds/epW9IkHld/mVwIN+JfU=; b=OFeH43VkgaAq9VWvFIep7SiN3pW14SzlLnYTQARHmnaSz+QZKbsBQzJi9EaO9UE+hU NlDUsnmpSXQmKKSX2eSuljVLvf7+7bD/9utMdZvrRrRaf7i33D+F8qG78GeYajoW6C4Q LyTvAtdFlKl08t+wCVOhrmqCG2QMLE7CU5rkg6ZSySZ/dcPS4GSygD3qkFUUWETBRkza uG6wlh6MVA0cr24K5yoKf+t7p5IiItusjeI+BenlYK2FX75JcDYxGpQu6gRFm7sl/BXU C7kqIOBZOWdGJzniJFU/FgLXaw92qveOrJhbjI/MIiGyvcw/flgJVMh95hbt0qPVzpOf /GuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785231013; x=1785835813; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=JO8m6+/OzqIxIcBgfk2F3Ds/epW9IkHld/mVwIN+JfU=; b=YuDTwPJFi7Ji8IdoFgvBTK9bdBZ73DnSzcmKQedxBRbziQ2TnXiotYKiEDHCCFNLOL PRVZoolmrLqiuxpCvv8cnlaa4Q5227FeTI3jdmAHnb5nXEzZH1mlFFIZLyHZ6IxZ3ZwL t9H0TT0rBi9E8caPC/cTBknhmkC3/eNGKaIDhN2ftdLR3IiZqYKzbJXucUXcjcn55Cv7 UFooRF0m8+rP8Ws7EQZhz6qQgjZviipdmi4EmIPq2THq+sxkOiDUdCBCpw6Xx4qflIEL qZVLa2RL8S6E8XAwsdFpXw8ymsUDBrFFDJFoumydLpaM3gpGLnN3DtkA0/zkE1H4rSHA Cjog== X-Forwarded-Encrypted: i=1; AHgh+RrvUH0zCCfoRBNikhRhn0ZjvhHaCGcHrnSkflm4oHYx2cs2Ylpsa3ZxsD3nAV4XSgDpY+2YcD2+0B10Wfo=@vger.kernel.org X-Gm-Message-State: AOJu0YzRkV59EwJe03DbI8KlnTs3NR+rWCg9ixcRsFEG9I0GDll9v7bz wPh643hJ+NCI62bpZDFs6Mr8iAaHbb4lBpHEP23eeYNnYFR2TuCaINCy X-Gm-Gg: AR+sD13LXSdw5E+d7SQaecNiSJiVTWdGe646cVCYLXRMrds/RGjwXlODyrfqJIlN5YR cim+IQNSytFclpRnzNWNxXcRquA3ntYfYKr0O/nRuhwzze8GgFov4/NHK8KPdEdghXt0PY8NnOi UujodUGaqxfTFF/zPScF7w4UcKpyHvatDQn+IoXoR9hFMb1Z3pvqeWdEmgkyGjpn6Bwz93bKvkF BzrYBDmP11X1CPVf3kRnhvBcydnMOOAEIsAyuQLjsa6DKtOR2OgPTfgeoCMHusQR8BZDgFy+ZYw cGUqRGxfR8gbGSIozBGPkSsk+3z07YgnxcdN07JOOVz7cSK64wzGzOBGi2QfnLFFrNugf/2hSuQ Mkqrcwo6taTbxZQXLSGQ7ENsqdxoT6ZFxNYigASY4UrzUKSsgZxvaHpwnSNHTPBXT4nbyEmm9gx xdXBC/8KMXcB2SsJQSqj98hzeXdKDHW2d0UAaOUhYIJvC58Ok= X-Received: by 2002:a17:902:cf41:b0:2c9:97a9:2097 with SMTP id d9443c01a7336-2d01605e5b6mr20073215ad.43.1785231012904; Tue, 28 Jul 2026 02:30:12 -0700 (PDT) Received: from HAOQINHUANG-MC0.tencent.com ([43.132.141.21]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2cfde7f4b01sm49151225ad.71.2026.07.28.02.30.09 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 28 Jul 2026 02:30:12 -0700 (PDT) From: Haoqin Huang To: Minchan Kim , Sergey Senozhatsky Cc: Jens Axboe , Nick Terrell , David Sterba , Andrew Morton , linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, Haoqin Huang , Rongwei Wang Subject: [PATCH v2 2/5] zram: make dict update in comp_params_store() atomic Date: Tue, 28 Jul 2026 17:29:32 +0800 Message-ID: <20260728092935.31139-2-haoqinhuang7@gmail.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20260728092935.31139-1-haoqinhuang7@gmail.com> References: <20260627070216.13511-1-haoqinhuang7@gmail.com> <20260728092935.31139-1-haoqinhuang7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Haoqin Huang comp_params_store() resets old parameters before reading a new dict, so if kernel_read_file_from_path() fails the params are left broken and the actual error is swallowed. Fix by reading into a temporary buffer first, swapping only on success. Use sz <= 0 to also reject zero-size dicts. Signed-off-by: Haoqin Huang Signed-off-by: Rongwei Wang --- drivers/block/zram/zram_drv.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index ace65c586072..9ea7ba9d1ed0 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -1699,21 +1699,23 @@ static int comp_params_store(struct zram *zram, u32 prio, s32 level, const char *dict_path, struct deflate_params *deflate_params) { + void *new_dict = NULL; ssize_t sz = 0; - comp_params_reset(zram, prio); - if (dict_path) { - sz = kernel_read_file_from_path(dict_path, 0, - &zram->params[prio].dict, - INT_MAX, - NULL, - READING_POLICY); - if (sz < 0) - return -EINVAL; + sz = kernel_read_file_from_path(dict_path, 0, &new_dict, + INT_MAX, NULL, READING_POLICY); + if (sz <= 0) { + vfree(new_dict); + if (sz == 0) + return -EINVAL; + return sz; + } } + comp_params_reset(zram, prio); zram->params[prio].dict_sz = sz; + zram->params[prio].dict = new_dict; zram->params[prio].level = level; zram->params[prio].deflate.winbits = deflate_params->winbits; return 0; -- 2.43.7