Skip to contentSkip to conversation

bcache: insert bkeys without overlap when placeholder missed

PATCH New Liu Hua 1 participant 1 message Sep 22, 2020 bcache (block layer cache)

lore
Share & tools
lore

Liu Hua

author
#0 lore raw

PATCH 1/1 bcache: insert bkeys without overlap when placeholder missed

Btree spliting and garbage collection process will drop placeholders, which may cause cache miss collision. We can insert nonoverlapping bkeys with write lock. It is helpful for performance.

---
 drivers/md/bcache/extents.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)
drivers/md/bcache/extents.c +7 -3
index c809724e6571..cc8af08aee8d 100644
@@ -329,6 +329,7 @@ static bool bch_extent_insert_fixup(struct btree_keys *b,
 
 	uint64_t old_offset;
 	unsigned int old_size, sectors_found = 0;
+	bool overlay = false;
 
 	BUG_ON(!KEY_OFFSET(insert));
 	BUG_ON(!KEY_SIZE(insert));
@@ -340,15 +341,18 @@ static bool bch_extent_insert_fixup(struct btree_keys *b,
 			break;
 
 		if (bkey_cmp(&START_KEY(k), insert) >= 0) {
-			if (KEY_SIZE(k))
-				break;
-			else
+			if (!KEY_SIZE(k))
 				continue;
+			if (replace_key && overlay == false)
+				goto out;
+			break;
 		}
 
 		if (bkey_cmp(k, &START_KEY(insert)) <= 0)
 			continue;
 
+		overlay = true;
+
 		old_offset = KEY_START(k);
 		old_size = KEY_SIZE(k);
 
Signature · 1 line
2.17.1