git: e6651546c2dd - main - rangelock: Fix an off-by-one error
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 27 Aug 2024 20:38:05 UTC
The branch main has been updated by markj:
URL: https://cgit.FreeBSD.org/src/commit/?id=e6651546c2dd72e028b9422f1695c432dbf47d75
commit e6651546c2dd72e028b9422f1695c432dbf47d75
Author: Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2024-08-27 20:29:18 +0000
Commit: Mark Johnston <markj@FreeBSD.org>
CommitDate: 2024-08-27 20:35:08 +0000
rangelock: Fix an off-by-one error
A rangelock entry covers the range [start, end), so entries e1 and e2
with e1->end == e2->start do not overlap.
PR: 281073
Fixes: 5badbeeaf061 ("Re-implement rangelocks part 2")
Reviewed by: kib
Differential Revision: https://reviews.freebsd.org/D46458
---
sys/kern/kern_rangelock.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sys/kern/kern_rangelock.c b/sys/kern/kern_rangelock.c
index e3bb413ab1bb..14163dd1c782 100644
--- a/sys/kern/kern_rangelock.c
+++ b/sys/kern/kern_rangelock.c
@@ -544,7 +544,7 @@ again:
cur = rl_q_load(prev);
MPASS(!rl_e_is_marked(cur)); /* nobody can unlock e yet */
for (;;) {
- if (cur == NULL || cur->rl_q_start > e->rl_q_end)
+ if (cur == NULL || cur->rl_q_start >= e->rl_q_end)
return (RL_LOCK_SUCCESS);
next = rl_q_load(&cur->rl_q_next);
if (rl_e_is_marked(next)) {