summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJavier González <jg@lightnvm.io>2016-02-04 14:13:25 (GMT)
committerJens Axboe <axboe@fb.com>2016-02-04 16:19:45 (GMT)
commit3704e098cc1a4c2cabcf4e1cfbbff38b4bfb1ea7 (patch)
tree83268aa2265eebd76afdb9b5b6b9afe5d9059cc3
parentbba7f40a029c1e2966146e3a021b3deaf5639904 (diff)
downloadlinux-3704e098cc1a4c2cabcf4e1cfbbff38b4bfb1ea7.tar.xz
lightnvm: fix request intersection locking in rrpc
This patch fixes an error on the calculation of intersecting logical addresses; it contemplates the case where a new request including several addresses intersects with a single locked address. This case is typical when multiple pages are sent in a new request, while GC - which at the moment sends one address at the time - is running. Signed-off-by: Javier González <javier@cnexlabs.com> Signed-off-by: Matias Bjørling <m@bjorling.me> Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r--drivers/lightnvm/rrpc.h3
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/lightnvm/rrpc.h b/drivers/lightnvm/rrpc.h
index b0277cb..f7b3733 100644
--- a/drivers/lightnvm/rrpc.h
+++ b/drivers/lightnvm/rrpc.h
@@ -174,8 +174,7 @@ static inline sector_t rrpc_get_sector(sector_t laddr)
static inline int request_intersects(struct rrpc_inflight_rq *r,
sector_t laddr_start, sector_t laddr_end)
{
- return (laddr_end >= r->l_start && laddr_end <= r->l_end) &&
- (laddr_start >= r->l_start && laddr_start <= r->l_end);
+ return (laddr_end >= r->l_start) && (laddr_start <= r->l_end);
}
static int __rrpc_lock_laddr(struct rrpc *rrpc, sector_t laddr,