bcache: Don't touch bucket gen for dirty ptrs
Unnecessary since a bucket that has dirty pointers pointing to it can never be invalidated - and skipping it is a measurable performance boost, since the bucket gen will usually be a cache miss. Signed-off-by: Kent Overstreet <kmo@daterainc.com>
This commit is contained in:
Родитель
b0f32a56f2
Коммит
d56d000a1f
|
@ -176,10 +176,14 @@ bool bch_ptr_bad(struct btree *b, const struct bkey *k)
|
|||
bch_ptr_invalid(b, k))
|
||||
return true;
|
||||
|
||||
for (i = 0; i < KEY_PTRS(k); i++) {
|
||||
for (i = 0; i < KEY_PTRS(k); i++)
|
||||
if (!ptr_available(b->c, k, i))
|
||||
return true;
|
||||
|
||||
if (!expensive_debug_checks(b->c) && KEY_DIRTY(k))
|
||||
return false;
|
||||
|
||||
for (i = 0; i < KEY_PTRS(k); i++) {
|
||||
g = PTR_BUCKET(b->c, k, i);
|
||||
stale = ptr_stale(b->c, k, i);
|
||||
|
||||
|
|
|
@ -630,7 +630,8 @@ static void bch_cache_read_endio(struct bio *bio, int error)
|
|||
|
||||
if (error)
|
||||
s->iop.error = error;
|
||||
else if (ptr_stale(s->iop.c, &b->key, 0)) {
|
||||
else if (!KEY_DIRTY(&b->key) &&
|
||||
ptr_stale(s->iop.c, &b->key, 0)) {
|
||||
atomic_long_inc(&s->iop.c->cache_read_races);
|
||||
s->iop.error = -EINTR;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче