Correct a regression in the previous change, r322459. Specifically, the
removal of the "blk" parameter from blst_meta_alloc() had the unintended effect of generating an out-of-range allocation when the cursor reaches the end of the tree if the number of managed blocks in the tree equals the so-called "radix" (which in the blist code is not the standard notion of what a radix is but rather the maximum number of leaves in a tree of the current height.) In other words, only certain swap configurations were affected, which is why earlier testing did not reveal the problem. Submitted by: Doug Moore <dougm@rice.edu> Reported by: pho, kib Tested by: pho X-MFC with: r322459 Differential Revision: https://reviews.freebsd.org/D12106
This commit is contained in:
parent
c7e10205ae
commit
a0ae476b7e
@ -251,6 +251,8 @@ blist_alloc(blist_t bl, daddr_t count)
|
||||
bl->bl_radix);
|
||||
if (blk != SWAPBLK_NONE) {
|
||||
bl->bl_cursor = blk + count;
|
||||
if (bl->bl_cursor == bl->bl_blocks)
|
||||
bl->bl_cursor = 0;
|
||||
return (blk);
|
||||
} else if (bl->bl_cursor != 0)
|
||||
bl->bl_cursor = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user