From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S970197AbdDUHAy (ORCPT ); Fri, 21 Apr 2017 03:00:54 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:51681 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S968024AbdDUHAv (ORCPT ); Fri, 21 Apr 2017 03:00:51 -0400 Subject: Re: [PATCH 2/6] locking: Introduce range reader/writer lock To: Davidlohr Bueso References: <20170406084620.22700-1-dave@stgolabs.net> <20170406084620.22700-3-dave@stgolabs.net> <20170420155125.GA20746@linux-80c1.suse> Cc: mingo@kernel.org, peterz@infradead.org, akpm@linux-foundation.org, jack@suse.cz, kirill.shutemov@linux.intel.com, mhocko@suse.com, mgorman@techsingularity.net, linux-kernel@vger.kernel.org, Davidlohr Bueso From: Laurent Dufour Date: Fri, 21 Apr 2017 09:00:41 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <20170420155125.GA20746@linux-80c1.suse> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 x-cbid: 17042107-0020-0000-0000-0000034CE405 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17042107-0021-0000-0000-0000415F347E Message-Id: X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-04-21_06:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1703280000 definitions=main-1704210129 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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.