Messages in this thread | | | Subject | Re: [PATCH 2/6] locking: Introduce range reader/writer lock | From | Laurent Dufour <> | Date | Fri, 21 Apr 2017 09:00:41 +0200 |
| |
On 20/04/2017 18:01, Davidlohr Bueso wrote: >>> +int range_read_trylock(struct range_rwlock_tree *tree, struct >>> range_rwlock *lock) >>> +{ >>> + int ret = true; >>> + unsigned long flags; >>> + struct interval_tree_node *node; >>> + >>> + spin_lock_irqsave(&tree->lock, flags); >>> + >>> + if (!__range_intersects_intree(tree, lock)) >>> + goto insert; >>> + >>> + /* >>> + * We have overlapping ranges in the tree, ensure that we can >>> + * in fact share the lock. >>> + */ >>> + range_interval_tree_foreach(node, &tree->root, >>> + lock->node.start, lock->node.last) { >>> + struct range_rwlock *blocked_lock; >>> + blocked_lock = range_entry(node, struct range_rwlock, node); >>> + >>> + if (!range_lock_is_reader(blocked_lock)) { >>> + ret = false; >>> + goto unlock; >>> + } >>> + } >>> +insert: >>> + range_lock_set_reader(lock); >> >> Here, the lock->waiter field should have been set to current before >> calling range_lock_set_reader() > > But this is a trylock attempt, there is no waiting going on.
Agreed, this one is useless.
| |