Skip to content

Commit 4dd7504

Browse files
authored
Merge pull request ceph#62471 from YiteGu/fix-invalid-iterator-usge-after-erase
blk/kerneldevice: fix invalid iterator usage after erase in discard_q…
2 parents 13bdc5a + c4528ec commit 4dd7504

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

src/blk/kernel/KernelDevice.cc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -808,11 +808,11 @@ void KernelDevice::_discard_thread(uint64_t tid)
808808
// It will also allow threads to finish in a timely manner.
809809
constexpr unsigned MAX_LOCAL_DISCARD = 32;
810810
unsigned count = 0;
811-
for (auto p = discard_queued.begin();
812-
p != discard_queued.end() && count < MAX_LOCAL_DISCARD;
813-
++p, ++count) {
814-
discard_processing.insert(p.get_start(), p.get_len());
815-
discard_queued.erase(p);
811+
for (auto it = discard_queued.begin();
812+
it != discard_queued.end() && count < MAX_LOCAL_DISCARD;
813+
++count) {
814+
discard_processing.insert(it.get_start(), it.get_len());
815+
it = discard_queued.erase(it);
816816
}
817817

818818
// there are multiple active threads -> must use a counter instead of a flag

src/include/interval_set.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -657,9 +657,9 @@ class interval_set {
657657
std::swap(_size, other._size);
658658
}
659659

660-
void erase(const iterator &i) {
660+
iterator erase(const iterator &i) {
661661
_size -= i.get_len();
662-
m.erase(i._iter);
662+
return iterator(m.erase(i._iter));
663663
}
664664

665665
void erase(T val) {

0 commit comments

Comments
 (0)