From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933289AbcIVBgP (ORCPT ); Wed, 21 Sep 2016 21:36:15 -0400 Received: from sender153-mail.zoho.com ([74.201.84.153]:25354 "EHLO sender153-mail.zoho.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932291AbcIVBgN (ORCPT ); Wed, 21 Sep 2016 21:36:13 -0400 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=zapps768; d=zoho.com; h=subject:to:references:cc:from:message-id:date:user-agent:mime-version:in-reply-to:content-type; b=mna4tYdD9T2+XE5C/2Y/OMntEWHe+izSxM/mObk/vddNUzHICsIxm1NbrAZZCGXCNfw56/2Qwd3K rIImXrRYAK0KUqVE9k8Y/FqJHwQXjJWzCeB4otNL6txZVw704Fpb Subject: Re: [RFC PATCH 1/5] mm/vmalloc.c: correct a few logic error for __insert_vmap_area() To: Andrew Morton References: <57E20B54.5020408@zoho.com> Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, zijun_hu@htc.com, tj@kernel.org, mingo@kernel.org, rientjes@google.com, iamjoonsoo.kim@lge.com, mgorman@techsingularity.net From: zijun_hu Message-ID: <57E33581.5030409@zoho.com> Date: Thu, 22 Sep 2016 09:36:01 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <57E20B54.5020408@zoho.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 09/21/2016 12:23 PM, zijun_hu wrote: > From: zijun_hu > > correct a few logic error for __insert_vmap_area() since the else > if condition is always true and meaningless > > in order to fix this issue, if vmap_area inserted is lower than one > on rbtree then walk around left branch; if higher then right branch > otherwise intersects with the other then BUG_ON() is triggered > > Signed-off-by: zijun_hu i give more explanation to the intent of my change any comments is welcome > --- > mm/vmalloc.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index 91f44e7..cc6ecd6 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -321,10 +321,10 @@ static void __insert_vmap_area(struct vmap_area *va) > > parent = *p; > tmp_va = rb_entry(parent, struct vmap_area, rb_node); > - if (va->va_start < tmp_va->va_end) > - p = &(*p)->rb_left; > - else if (va->va_end > tmp_va->va_start) > - p = &(*p)->rb_right; this else if condition is always true and meaningless as long as there are no zero sized vamp_area due to the following expression va->va_end > va->va_start >= tmp_va->va_end > tmp_va->va_start > + if (va->va_end <= tmp_va->va_start) > + p = &parent->rb_left; if the vamp_area to be inserted is lower than that on the rbtree then we walk around the left branch of the node given consider va->va_end == tmp_va->va_start as legal case which represent two neighbor areas tightly BTW, the available range of a vmap area include the start boundary not the end, namely, [start, end) > + else if (va->va_start >= tmp_va->va_end) > + p = &parent->rb_right; if the vamp_area to be inserted is higher than that on the rbtree then we walk around the right branch of the node given > else > BUG(); this indicate the vamp_area to be inserted have intersects with that on the rbtree then we remain the BUG() logic > } >