ref: 54411b5c642bfca7e03eff2ad7f4823f13f9e32a
parent: e82f565015fd0b75085d8d2a4f1aaca53e875f64
author: 9ferno <gophone2015@gmail.com>
date: Wed Nov 2 10:39:04 EDT 2022
avoid updating es->lru after each iteration as the loop is taking forever
--- a/extents.c
+++ b/extents.c
@@ -203,7 +203,7 @@
doadd(Extents *es, u64 start, u64 len)
{
s64 dir;
- Extent *e;
+ Extent *e, *eprev;
if(es == nil)
panic("add es == nil");
@@ -226,9 +226,10 @@
}
if(dir < 0){
while(e->low != nil && (dir = belongs(e, start, len)) < 0){
- es->lru = e;
+ eprev = e;
e = e->low;
}
+ es->lru = eprev;
/* e->low e es->lru */
if(dir == 0)
return increment(es, e, start, len);
@@ -240,9 +241,10 @@
return addextent(es, es->lru, start, len);
}else if(dir > 0){
while(e->high != nil && (dir = belongs(e, start, len)) > 0){
- es->lru = e;
+ eprev = e;
e = e->high;
}
+ es->lru = eprev;
/* es->lru e e->high */
if(dir == 0)
return increment(es, e, start, len);