]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blobdiff - drivers/block/drbd/drbd_interval.c
drbd: compute the end before rb_insert_augmented()
[mirror_ubuntu-jammy-kernel.git] / drivers / block / drbd / drbd_interval.c
index 89c497c630b4ee60839571aabf59c9ad553fb229..04a14e0f887830440b307be70075b38655b4a245 100644 (file)
@@ -79,6 +79,7 @@ bool
 drbd_insert_interval(struct rb_root *root, struct drbd_interval *this)
 {
        struct rb_node **new = &root->rb_node, *parent = NULL;
+       sector_t this_end = this->sector + (this->size >> 9);
 
        BUG_ON(!IS_ALIGNED(this->size, 512));
 
@@ -87,6 +88,8 @@ drbd_insert_interval(struct rb_root *root, struct drbd_interval *this)
                        rb_entry(*new, struct drbd_interval, rb);
 
                parent = *new;
+               if (here->end < this_end)
+                       here->end = this_end;
                if (this->sector < here->sector)
                        new = &(*new)->rb_left;
                else if (this->sector > here->sector)
@@ -99,6 +102,7 @@ drbd_insert_interval(struct rb_root *root, struct drbd_interval *this)
                        return false;
        }
 
+       this->end = this_end;
        rb_link_node(&this->rb, parent, new);
        rb_insert_augmented(&this->rb, root, &augment_callbacks);
        return true;