From patchwork Tue Apr 15 02:39:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baoquan He X-Patchwork-Id: 14051351 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8A253C369B4 for ; Tue, 15 Apr 2025 02:40:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 403A82800C1; Mon, 14 Apr 2025 22:40:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3B1CE2800BE; Mon, 14 Apr 2025 22:40:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 22D8D2800C1; Mon, 14 Apr 2025 22:40:22 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 02989280075 for ; Mon, 14 Apr 2025 22:40:21 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 2D4C380B51 for ; Tue, 15 Apr 2025 02:40:23 +0000 (UTC) X-FDA: 83334724326.06.A921660 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf01.hostedemail.com (Postfix) with ESMTP id 5C37840007 for ; Tue, 15 Apr 2025 02:40:21 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=EkiBYZez; spf=pass (imf01.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744684821; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=BiTd6gkzO3xlq1GH+oaUM8JNSi1IBXTiwuoOQeUrUeY=; b=7pl3XPDkPvpMYxAS4+8cu0Rj3iUJY+z2dPchv/pH1vdy2FMRY/frYfM2L/3ICEPCF+daUq AA8DEvwFc5GrxI2qhMRUP5A+b1JTaFbA47/AQc/gDt0xMx0bIbxOpCdi0zxAbvuk96npkn u16pJf7z5JfbwkHxJJoxEe7LrDbMPmg= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744684821; a=rsa-sha256; cv=none; b=SJNmCFxWErkANatMOM3pUnSfWHW3Y2mCs9sbdtBKvKZDKVX5eDm71Wgj1L1WgBmS/OhhiD jjAp4z0ZeXpsvtMK5yN1M67XK74EQ978+3wALf8rw5xfI5HwkfQ/INdmSKXyV7YITSdDuL gKvyB36ob/96YISWJ+AlqFZljYc3S9A= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=EkiBYZez; spf=pass (imf01.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744684820; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=BiTd6gkzO3xlq1GH+oaUM8JNSi1IBXTiwuoOQeUrUeY=; b=EkiBYZezB6N7cdYR7P8769mgom/UNryU7BQJ6Q/s9sA5GbrsIP1Kfv/0jEosbBlD3qfh03 uGptXhv8Je5kB5dGZ5o1SWmcxZdT0jW1KWE1JrT8GnVm4p0POG8RoMW54Rf6WnfI7K3iz3 a7uu3xwPnRyRzjQSrH8GsrbFXzSxyTY= Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-54-QAQo5PuTOp6H9Q-QuYLKpw-1; Mon, 14 Apr 2025 22:40:19 -0400 X-MC-Unique: QAQo5PuTOp6H9Q-QuYLKpw-1 X-Mimecast-MFC-AGG-ID: QAQo5PuTOp6H9Q-QuYLKpw_1744684818 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 1AEAC19560B3; Tue, 15 Apr 2025 02:40:18 +0000 (UTC) Received: from MiWiFi-R3L-srv.redhat.com (unknown [10.72.112.37]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 6F3B8180AF7C; Tue, 15 Apr 2025 02:40:15 +0000 (UTC) From: Baoquan He To: linux-mm@kvack.org Cc: akpm@linux-foundation.org, urezki@gmail.com, linux-kernel@vger.kernel.org, Baoquan He Subject: [PATCH 5/5] mm/vmalloc.c: return explicit error value in alloc_vmap_area() Date: Tue, 15 Apr 2025 10:39:52 +0800 Message-ID: <20250415023952.27850-6-bhe@redhat.com> In-Reply-To: <20250415023952.27850-1-bhe@redhat.com> References: <20250415023952.27850-1-bhe@redhat.com> MIME-Version: 1.0 Content-type: text/plain X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 5C37840007 X-Stat-Signature: k8iojzjebz143azjg3etphgejhgqx58b X-HE-Tag: 1744684821-874390 X-HE-Meta: U2FsdGVkX1+vsWsFirDtDkhCQd0BZW7ucFMemhE2x698LWJh6XGPwdA8giprSzZP6NmB6n+EMy1UGBYkGQxUe6Brx+iC68KDtl89FDavK/bq6cQXpCiMyclT98ORhjz6vxB0/22Yu5mtABylsANhjbS0mhLWa/JlrfJSp88e8eQ92UCuNzJu88b9No8R3+K15fQjefsj+I9jy1baYCgz9AVzM2++hd0a0eZQCKItWjHZnNLoha1EJoUCiSjtAr1rnXQdjiNNhJWEwLcVWdKoac+Z4DkgEjtpS5GPOHYjoVeiXCSLOSzMopqgVfTg07az4Oxudc6XY0A7cHmn0G0oLIU0II0hw3+nwEkpoUrvl1sEO+3Dd5y5oJptsCIcizY6IcHqzPe5icdj/DPoFKMfLFQgpgdIWo7yRxujxpdvF4PCA/nalXTWdG/lQD3/82EWr464o18ncVxxrsji6g27C3UEu82dOGPuUBVsVfhGflUgigjGDC55IRUjNB3DXDG7McmzBe6oHqCgt0r2Vm50cpdxBFRe35ZReHBNxoqapeqaxbmq72s4cTImrGQQm5qwKZ70aOTVo0Zg/yzweXJOQCsb/G4eX4GhCxbovS9vwTO7lH8kYm6pR6cZDXsANIMChZ5yJ5MuWavByU1chrBjJ1HlBN0NQDFSItxWVZfHoT428ASdHwN5qoZauK+qZESlGEgA/e75ujbGHuecoMURDQfspunh5ob+SE9Mh/lEtc/ynjNomv13S+80JlX48pjjSOFJVjE+lSbaSNCMHE8nSiTAVWtithmVJJ+8+6fudriFfnGeMmCs2X6V0ipHGiq1QjUv5Hgv17/w+iKAYWtkzIxlnKZ6tPQPfI6SqrZX2IOF0TBymQOid0rbiVJdJy2UNB0b4hRBZ4BjBwbg7FDJffmp4Xn1M6dA8X2ZjQoVy5v3cvr6j25hiZ09rMeRG1/Dal4J4+xv+3jREDOPRES JajIM56A uU4j9WpUoUInowmtlSi5fowFeZ2PQXtrPDFyIM9yk+CX7dZmCXQKy8MH9ianmSZNxB57Ro/r0+c4IKjcL1uFx3EEs7JHqvjlav1JYbcJzUsp/KfStLM6oU8Fg0+BqUoFXOuC9kuEYFZkkowj3wBFvm3Tc/4I2TA8ve2d0xAZo181Z/Mcnpugfvu897yil+YvyjKA9WjLv1i7wTgkZFjGdFK9d6XjhC8fCsGve2glsMx115UavKsA+BFIAEfwDD5KHI1hXN+QlmlgUZB08TMHgna6F0+YEDZU4NqxkWnqmgz8FYJBPB9nE2NJ52CO0XbCiHqVRfMYMYzOfRAULH6euMs2QnxcLzBYhBLyPsjDycL6yMe1vqsjPLrrogg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: In codes of alloc_vmap_area(), it returns the upper bound 'vend' to indicate if the allocation is successful or failed. That is not very clear. Here change to return explicit error values and check them to judge if allocation is successful. IS_ERR_VALUE already uses unlikely() internally Signed-off-by: Baoquan He Reviewed-by: Shivank Garg Tested-by: Shivank Garg --- mm/vmalloc.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 3f38a232663b..5b21cd09b2b4 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -1715,7 +1715,7 @@ va_clip(struct rb_root *root, struct list_head *head, */ lva = kmem_cache_alloc(vmap_area_cachep, GFP_NOWAIT); if (!lva) - return -1; + return -ENOMEM; } /* @@ -1729,7 +1729,7 @@ va_clip(struct rb_root *root, struct list_head *head, */ va->va_start = nva_start_addr + size; } else { - return -1; + return -EINVAL; } if (type != FL_FIT_TYPE) { @@ -1758,19 +1758,19 @@ va_alloc(struct vmap_area *va, /* Check the "vend" restriction. */ if (nva_start_addr + size > vend) - return vend; + return -ERANGE; /* Update the free vmap_area. */ ret = va_clip(root, head, va, nva_start_addr, size); - if (WARN_ON_ONCE(ret)) - return vend; + if (ret) + return ret; return nva_start_addr; } /* * Returns a start address of the newly allocated area, if success. - * Otherwise a vend is returned that indicates failure. + * Otherwise an error value is returned that indicates failure. */ static __always_inline unsigned long __alloc_vmap_area(struct rb_root *root, struct list_head *head, @@ -1795,14 +1795,13 @@ __alloc_vmap_area(struct rb_root *root, struct list_head *head, va = find_vmap_lowest_match(root, size, align, vstart, adjust_search_size); if (unlikely(!va)) - return vend; + return -ENOENT; nva_start_addr = va_alloc(va, root, head, size, align, vstart, vend); - if (nva_start_addr == vend) - return vend; #if DEBUG_AUGMENT_LOWEST_MATCH_CHECK - find_vmap_lowest_match_check(root, head, size, align); + if (!IS_ERR_VALUE(nva_start_addr)) + find_vmap_lowest_match_check(root, head, size, align); #endif return nva_start_addr; @@ -1932,7 +1931,7 @@ node_alloc(unsigned long size, unsigned long align, struct vmap_area *va; *vn_id = 0; - *addr = vend; + *addr = -EINVAL; /* * Fallback to a global heap if not vmalloc or there @@ -2012,20 +2011,20 @@ static struct vmap_area *alloc_vmap_area(unsigned long size, } retry: - if (addr == vend) { + if (IS_ERR_VALUE(addr)) { preload_this_cpu_lock(&free_vmap_area_lock, gfp_mask, node); addr = __alloc_vmap_area(&free_vmap_area_root, &free_vmap_area_list, size, align, vstart, vend); spin_unlock(&free_vmap_area_lock); } - trace_alloc_vmap_area(addr, size, align, vstart, vend, addr == vend); + trace_alloc_vmap_area(addr, size, align, vstart, vend, IS_ERR_VALUE(addr)); /* - * If an allocation fails, the "vend" address is + * If an allocation fails, the error value is * returned. Therefore trigger the overflow path. */ - if (unlikely(addr == vend)) + if (IS_ERR_VALUE(addr)) goto overflow; va->va_start = addr; @@ -4753,9 +4752,10 @@ struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, ret = va_clip(&free_vmap_area_root, &free_vmap_area_list, va, start, size); - if (WARN_ON_ONCE(unlikely(ret))) - /* It is a BUG(), but trigger recovery instead. */ + if ((unlikely(ret))) { + WARN_ONCE(1, "%s error: errno (%d)\n", __func__, ret); goto recovery; + } /* Allocated area. */ va = vas[area];