Re: [PATCH] bcache: fix wrong BITMASK offset value for BDEV_CACHE_MODE

From: Lin Feng
Date: Sun May 15 2022 - 21:50:39 EST




On 5/13/22 23:20, Coly Li wrote:
On 7/20/21 6:32 PM, Lin Feng wrote:
Original codes:
BITMASK(CACHE_SYNC, struct cache_sb, flags, 0, 1);
BITMASK(CACHE_DISCARD, struct cache_sb, flags, 1, 1);
BITMASK(CACHE_REPLACEMENT, struct cache_sb, flags, 2, 3);
...
BITMASK(BDEV_CACHE_MODE, struct cache_sb, flags, 0, 4);

Should BDEV_CACHE_MODE bits start from bit-nr 5(2+3) else it overlaps
with previous defined bit chunks, since we have 4 types of cache modes,
BDEV_CACHE_MODE will overwrite CACHE_SYNC and CACHE_DISCARD bits.

The overlap won't happen, previous lines are for cache device, and what
you modified is for backing device.

And your patch changes the on-disk format, which is unacceptable anyway.


Yes, you are right, this patch happened as I started reading bcache codes,
I did not get a whole picture of bcache at that time, I'm sorry for making
noise.

Thank you, Coly!

linfeng

Coly Li


This bug stays there since first upstream version of bcache, don't know
why it lives so long, or am i missing something, please point me out
if I'm wrong, thanks!

Signed-off-by: Lin Feng <linf@xxxxxxxxxx>
---
include/uapi/linux/bcache.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/uapi/linux/bcache.h b/include/uapi/linux/bcache.h
index cf7399f03b71..dccd89756451 100644
--- a/include/uapi/linux/bcache.h
+++ b/include/uapi/linux/bcache.h
@@ -288,7 +288,7 @@ BITMASK(CACHE_REPLACEMENT, struct cache_sb, flags, 2, 3);
#define CACHE_REPLACEMENT_FIFO 1U
#define CACHE_REPLACEMENT_RANDOM 2U
-BITMASK(BDEV_CACHE_MODE, struct cache_sb, flags, 0, 4);
+BITMASK(BDEV_CACHE_MODE, struct cache_sb, flags, 5, 4);
#define CACHE_MODE_WRITETHROUGH 0U
#define CACHE_MODE_WRITEBACK 1U
#define CACHE_MODE_WRITEAROUND 2U