From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793207670; b=vNpmdfIzvCIT5DrX06Gp7X5/sw/7zbz2Fz1SptztZYG+T07rrRdA/bELw+4t8dvsDYgt icG6t4cCdBZcO8LE4ACjXM8Ohz+H/Csq7gNDn1cwJ6LGPCvNz7P+lrNuRspSuKmPlinVg 8s5nLzsl12MjRGeY3G7wzO70aU3tNdNx74S0pNTyJxs8FHBlmfWWAxrP2u2GS1i4uza34 N0cCDH+Z32ZdgMJ0wYTcyGrdf+IacCgCbdC/n+PrjEKokiITgXDK7/zQoVMK6PCarPNah ditIOf84rAPyIyH/7gUDTec+2ZiV6O8Dpu7QNpgSARaGO+YL+JfaU1WXyafNbCx8L0w== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793207670; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:User-Agent:X-stable:X-Patchwork-Hint: MIME-Version:Content-Transfer-Encoding; bh=T9TSAs9Wf4xFnMHUuVViukbT8+YLkypME475FtiQsgY=; b=Iihvx1UpBd/TVNUHlK7fX7CR6aCfLEx2uOAzXFb2F/qHpxWEzto55mS7XWRL8kNPW9S7 R6wvqUzSvsEagKzAiX2uGMzMeQan1027cXqTYi7XBL/yjNFNOx6vfDQygu4y5xhMV6T1k oQAyhBammpgpjXPGK9Dtv0BZIQgiavhFBUaRN8S1LtdfekBghdwSUSrGLvgGjOxFsLFBU 00ealO4Yzw5fNNFFseD1HQc0kV146RWR7uOha3cwEJpS4Am8sifd3s7B87L65hkGXDBNU sMkUEg0SpqqdJyAWK9wBdkxGUPK9xNUyk/dcvIZpGN+vepUgNoupRSGUDReH/ezdBgg== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=linuxfoundation.org header.i=@linuxfoundation.org header.a=rsa-sha256 header.s=korg header.b=ZU1+oTz4; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 86F59606A31A; Wed, 28 Oct 2026 17:14:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key, unprotected) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.a=rsa-sha256 header.s=korg header.b=ZU1+oTz4 Received: by smtp.kernel.org (Postfix) with ESMTPSA id DB1AE1F01828; Wed, 28 Oct 2026 17:14:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=korg; t=1793207670; bh=T9TSAs9Wf4xFnMHUuVViukbT8+YLkypME475FtiQsgY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=ZU1+oTz4F1z3sxdoDb6e1G1Ql7JtD2tESlnWc/MNGU84+4te6LWD8EnafZSPY0yGJ Z1g8oQ7blZbVEmwrXQo8i0BQMsITkC0MIDLYCzg/torRHBDfaIA9GTO0j0kO5Y32Wc mohRhgnuWOKbiNRNZDx60BGv9HRd+xnOhe6LoMk4= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Ben Marzinski , Ming-Hung Tsai , Mikulas Patocka Subject: [PATCH 6.12 099/247] dm cache: fix demotion stats in passthrough mode Date: Wed, 28 Oct 2026 17:58:22 +0100 Message-ID: <20261028165949.740521804@linuxfoundation.org> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261028165947.349197979@linuxfoundation.org> References: <20261028165947.349197979@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore X-Mailing-List: patches@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 6.12-stable review patch. If anyone has any objections, please let me know. ------------------ From: Ming-Hung Tsai commit 2ccb8878c149443c6acf628b438c9c942c20abb2 upstream. The demotion counter is incremented per incoming write bio before the invalidation begins, causing the demotion count to exceed the actual number of cached blocks when multiple bios target the same cached block. Additionally, the counter is incremented unconditionally regardless of invalidation failure. Reproduce steps: 1. Create a cache device consisting of 512 cache entries modprobe brd rd_size=262144 dmsetup create cmeta --table "0 8192 linear /dev/ram0 0" dmsetup create cdata --table "0 65536 linear /dev/ram0 8192" dmsetup create corig --table "0 65536 linear /dev/ram0 262144" dd if=/dev/zero of=/dev/mapper/cmeta bs=4k count=1 oflag=direct dmsetup create cache --table "0 65536 cache /dev/mapper/cmeta \ /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 writethrough smq 0" 2. Populate the cache, and record the number of cached blocks fio --name=populate --filename=/dev/mapper/cache --rw=randwrite --bs=4k \ --direct=1 --ioengine=libaio --iodepth=32 --io_size=2048m nr_cached=$(dmsetup status cache | awk '{split($7, a, "/"); print a[1]}') 3. Reload the cache into passthrough mode dmsetup suspend cache dmsetup reload cache --table "0 65536 cache /dev/mapper/cmeta \ /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 passthrough smq 0" dmsetup resume cache 4. Write to the passthrough cache with multiple jobs to trigger multiple bios hitting the same cached block. fio --filename=/dev/mapper/cache --name=test --rw=write --bs=4k \ --direct=1 --ioengine=libaio --iodepth=32 --numjobs=4 5. Check if demoted matches cached block count. These numbers should match but may differ due to overcounting per bio. nr_demoted=$(dmsetup status cache | awk '{print $12}') echo "$nr_cached, $nr_demoted" Fix by moving the demotion counter increment into invalidate_complete(), gated on the success flag. Reported-by: Ben Marzinski Fixes: b29d4986d0da ("dm cache: significant rework to leverage dm-bio-prison-v2") Cc: stable@vger.kernel.org Signed-off-by: Ming-Hung Tsai Reviewed-by: Benjamin Marzinski Signed-off-by: Mikulas Patocka Signed-off-by: Greg Kroah-Hartman --- drivers/md/dm-cache-target.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --- a/drivers/md/dm-cache-target.c +++ b/drivers/md/dm-cache-target.c @@ -1461,6 +1461,9 @@ static void invalidate_complete(struct d struct bio_list bios; struct cache *cache = mg->cache; + if (success) + atomic_inc(&cache->stats.demotion); + bio_list_init(&bios); if (mg->cell) { if (dm_cell_unlock_v2(cache->prison, mg->cell, &bios)) @@ -1732,7 +1735,6 @@ static int map_bio(struct cache *cache, if (passthrough_mode(cache)) { if (bio_data_dir(bio) == WRITE) { bio_drop_shared_lock(cache, bio); - atomic_inc(&cache->stats.demotion); invalidate_start(cache, cblock, block, bio); return DM_MAPIO_SUBMITTED; } else