Skip to content

Commit

Permalink
os/bluestore/bluefs: Fix volume selection / accounting
Browse files Browse the repository at this point in the history
BlueFS fine grain lock refactor did break accounting in volume selection module.
It caused ceph_test_objectstore to fail on SpilloverFixedTest test.

Signed-off-by: Adam Kupczyk <akupczyk@redhat.com>
  • Loading branch information
aclamk committed Dec 23, 2021
1 parent 7b7945d commit 41eb537
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions src/os/bluestore/BlueFS.cc
Expand Up @@ -3120,7 +3120,9 @@ int BlueFS::_flush_range_F(FileWriter *h, uint64_t offset, uint64_t length)
}

dout(20) << __func__ << " file now, unflushed " << h->file->fnode << dendl;
return _flush_data(h, offset, length, buffered);
int res = _flush_data(h, offset, length, buffered);
vselector->add_usage(h->file->vselector_hint, h->file->fnode);
return res;
}

int BlueFS::_flush_data(FileWriter *h, uint64_t offset, uint64_t length, bool buffered)
Expand Down Expand Up @@ -3199,7 +3201,6 @@ int BlueFS::_flush_data(FileWriter *h, uint64_t offset, uint64_t length, bool bu
}
}
}
vselector->add_usage(h->file->vselector_hint, h->file->fnode);
dout(20) << __func__ << " h " << h << " pos now 0x"
<< std::hex << h->pos << std::dec << dendl;
return 0;
Expand Down Expand Up @@ -3325,7 +3326,9 @@ int BlueFS::_flush_special(FileWriter *h)
uint64_t offset = h->pos;
ceph_assert(length + offset <= h->file->fnode.get_allocated());
if (h->file->fnode.size < offset + length) {
vselector->sub_usage(h->file->vselector_hint, h->file->fnode.size);
h->file->fnode.size = offset + length;
vselector->add_usage(h->file->vselector_hint, h->file->fnode.size);
}
return _flush_data(h, offset, length, false);
}
Expand Down

0 comments on commit 41eb537

Please sign in to comment.