Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp422545imm; Tue, 5 Jun 2018 23:13:12 -0700 (PDT) X-Google-Smtp-Source: ADUXVKKlRNDSwLdWCMLmh88kbzdtdPm9IWMi2kB/dAwD+sKAf7KK6Seas3TQ6Wd0tumVfw8DQvYO X-Received: by 2002:aa7:860e:: with SMTP id p14-v6mr1146002pfn.155.1528265592290; Tue, 05 Jun 2018 23:13:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528265592; cv=none; d=google.com; s=arc-20160816; b=ptBEbCvgzYu+b78ZikGYmWCUUrvEEvdUugNeqQk1RMnSIX0MzSaqcmrhp/3McDcODz U52OfI8LRqMkOXp5zxI1cCR27asizlwF6s/dzWZaQvF2ZSr2mFTnrtRHmI09vlaKWKXr sjKc7J9LtdKpUbEKvEQAFzNgDJ6Ooh8P/idTZTnOhlqgnxdjp73nydKmZs/1LC88fAoj CNgHniHtohBAGeFaxt+SQMFWM9EMBJTQ3mcbJFo3ahDR8Q34AXPzLDxfogrq/51BFli0 CEhnBaHjaO9J6FnpVNQCzxVMxlDYfiqpFy0MIn4FPhrdC9UzzZl6/HixC+7ehPXPODJb uoEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:cc:subject:date:to :from:arc-authentication-results; bh=ijPPciPQc6YoVF/2a2RY3nzXiXcQkvYlV47IyJCd4RQ=; b=xILFLga6wekN9FsE88kUUe3y7WJ4ezcKAM6O5E3e6SvuD4r6TKfGBPCshQymFwjEUL 6tElmnkJnvq26Fjryq7uVTpVfYyFNF0uSgm+BqNRM2cYoW8S95C8PaU2Q3FL2YEjtjQt 8HWnEVvIJr/ExELqQ1fVYWI1n1HTuoQPDLhDclkGGPdtLB5oU29p8qeqzGb9EcCKl8XQ NgGEePO8/4wPMA6z0jPmqNkIzsJCILWvhax7LFI1HJVHu79Lo4+Rw/X6pSS5eLZIzHkT dF/9+OBA1Sdqzm7solggrq+n+dZUKrb6PgXEzU6V8ss6d8mpSYeOUOPYdn9SD2lHpXMB TG7w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o16-v6si17891973pgv.240.2018.06.05.23.12.57; Tue, 05 Jun 2018 23:13:12 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932216AbeFFGLa (ORCPT + 99 others); Wed, 6 Jun 2018 02:11:30 -0400 Received: from mx2.suse.de ([195.135.220.15]:52285 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751899AbeFFGL3 (ORCPT ); Wed, 6 Jun 2018 02:11:29 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext-too.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 9B227AF59; Wed, 6 Jun 2018 06:11:27 +0000 (UTC) From: NeilBrown To: Oleg Drokin , Greg Kroah-Hartman , James Simmons , Andreas Dilger Date: Wed, 06 Jun 2018 16:05:19 +1000 Subject: [PATCH 03/11] staging: lustre: move interval_insert call from ldlm_lock to ldlm_extent Cc: Linux Kernel Mailing List , Lustre Development List Message-ID: <152826511899.16761.11963878471070889487.stgit@noble> In-Reply-To: <152826510267.16761.14361003167157833896.stgit@noble> References: <152826510267.16761.14361003167157833896.stgit@noble> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Moving this call results in all interval-tree handling code being in the one file. This will simplify conversion to use Linux interval trees. The addition of 'struct cb' is a little ugly, but will be gone is a subsequent patch. Signed-off-by: NeilBrown --- drivers/staging/lustre/lustre/ldlm/ldlm_extent.c | 27 ++++++++++++++++++++ drivers/staging/lustre/lustre/ldlm/ldlm_internal.h | 4 +++ drivers/staging/lustre/lustre/ldlm/ldlm_lock.c | 17 +++---------- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_extent.c b/drivers/staging/lustre/lustre/ldlm/ldlm_extent.c index 2f4c305bb340..eb1a9077a514 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_extent.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_extent.c @@ -192,3 +192,30 @@ void ldlm_extent_policy_local_to_wire(const union ldlm_policy_data *lpolicy, wpolicy->l_extent.end = lpolicy->l_extent.end; wpolicy->l_extent.gid = lpolicy->l_extent.gid; } + +struct cb { + void *arg; + bool (*found)(struct ldlm_lock *lock, void *arg); +}; + +static enum interval_iter itree_overlap_cb(struct interval_node *in, void *arg) +{ + struct cb *cb = arg; + struct ldlm_lock *lock = container_of(in, struct ldlm_lock, + l_tree_node); + + return cb->found(lock, cb->arg) ? + INTERVAL_ITER_STOP : INTERVAL_ITER_CONT; +} + +void ldlm_extent_search(struct interval_node *root, + struct interval_node_extent *ext, + bool (*matches)(struct ldlm_lock *lock, void *data), + void *data) +{ + struct cb cb = { + .arg = data, + .found = matches, + }; + interval_search(root, ext, itree_overlap_cb, &cb); +} diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_internal.h b/drivers/staging/lustre/lustre/ldlm/ldlm_internal.h index 159de8a59cbb..756fa3d9db3c 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_internal.h +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_internal.h @@ -169,6 +169,10 @@ extern struct kmem_cache *ldlm_lock_slab; /* ldlm_extent.c */ void ldlm_extent_add_lock(struct ldlm_resource *res, struct ldlm_lock *lock); void ldlm_extent_unlink_lock(struct ldlm_lock *lock); +void ldlm_extent_search(struct interval_node *root, + struct interval_node_extent *ext, + bool (*matches)(struct ldlm_lock *lock, void *data), + void *data); /* l_lock.c */ void l_check_ns_lock(struct ldlm_namespace *ns); diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c index 034935e06393..4213fe047073 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c @@ -1053,8 +1053,9 @@ struct lock_match_data { * \param lock test-against this lock * \param data parameters */ -static bool lock_matches(struct ldlm_lock *lock, struct lock_match_data *data) +static bool lock_matches(struct ldlm_lock *lock, void *vdata) { + struct lock_match_data *data = vdata; union ldlm_policy_data *lpol = &lock->l_policy_data; enum ldlm_mode match; @@ -1135,16 +1136,6 @@ static bool lock_matches(struct ldlm_lock *lock, struct lock_match_data *data) return true; } -static enum interval_iter itree_overlap_cb(struct interval_node *in, void *args) -{ - struct lock_match_data *data = args; - struct ldlm_lock *lock = container_of(in, struct ldlm_lock, - l_tree_node); - - return lock_matches(lock, data) ? - INTERVAL_ITER_STOP : INTERVAL_ITER_CONT; -} - /** * Search for a lock with given parameters in interval trees. * @@ -1171,8 +1162,8 @@ static struct ldlm_lock *search_itree(struct ldlm_resource *res, if (!(tree->lit_mode & *data->lmd_mode)) continue; - interval_search(tree->lit_root, &ext, - itree_overlap_cb, data); + ldlm_extent_search(tree->lit_root, &ext, + lock_matches, data); } return data->lmd_lock; }