bcache: insert bkeys without overlap when placeholder missed
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.
Signed-off-by Liu Hua <[email protected]>
--- drivers/md/bcache/extents.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
drivers/md/bcache/extents.c +7 -3
@@ -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