Received: by 10.213.65.68 with SMTP id h4csp591404imn; Tue, 13 Mar 2018 14:11:22 -0700 (PDT) X-Google-Smtp-Source: AG47ELsq010gJnnvB03PcIIzzCrXSyMALsxYzU7QjrYWfrcz9Uo9zAi+7+9td7a63yQ1sUF/1gXY X-Received: by 10.99.110.131 with SMTP id j125mr1620513pgc.382.1520975482196; Tue, 13 Mar 2018 14:11:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1520975482; cv=none; d=google.com; s=arc-20160816; b=o4/4dscN0HmAMzItSxUE7dQZMYdUoB82VUwx1JlBRtNJvmwxJR5WUE33cG83X+mn55 s27KpqtQDFu861SIEF+1jn9wmGpyKxjRP/cD5s1cMElInZEH0D9pskQz7G6hCVBuxAEV t74F8aVEZfYlmtj7WJeqOI2VQNeEgIeIgdY9JJybTQmghUDJjFjLANORb095tgqHAdS4 izry7LpZIX0144B8WxnprM7Ih4Y3QYlXYkvNu5SaJTNdThC6e4VMBXyampyuNQWVOir8 ZRfedVarRQC4CNsc5Ms+KzS9hrYOr4hFYfjBApk5duWs9TNZdOt5ZunRJFABpPUSbCif EUnw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-transfer-encoding:content-disposition:mime-version :message-id:subject:cc:to:from:date:dkim-signature :arc-authentication-results; bh=1x+enLGXp8EToJZkHeSGFRA4I50aqhWfid5KEdvEZ5w=; b=rf6LSWVPvuRMMJAGAWxnot7b8ZAOpSEp4/VLnMivGM8rpBi4OjCZbkmSGPX3CcmkXY XWfMTy8rd00v1dZAnynfjEllXGjQJ4ZgEiiuMERdvxNkf5OmWR8qi8SqZSyKmEA1iKl+ dXJB1HXeD8OOvJKe9CmuoG/n//lGJjsGvXPF8RUWNdVt9/JNTijlXYJ8uf9qaRQXYJGz 0CzS/rwcecZjeNDBpLi8vyKitI6Nb0bhrs7h+MbI8SDlfnOOF+0/Mgd+PzNmoDHPk9dQ AujnpCZPJUMQ9gFeDyBEvnm2nGR+JiSk3+BuEuOLsWC7mtiP+ndqofqEOGpUxZZHmCJm CmOQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@purestorage.com header.s=google header.b=CQ2p0tGS; 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; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=purestorage.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s187si769042pfs.1.2018.03.13.14.11.07; Tue, 13 Mar 2018 14:11:22 -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; dkim=pass header.i=@purestorage.com header.s=google header.b=CQ2p0tGS; 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; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=purestorage.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752663AbeCMVKR (ORCPT + 99 others); Tue, 13 Mar 2018 17:10:17 -0400 Received: from mail-pf0-f194.google.com ([209.85.192.194]:43957 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751714AbeCMVKQ (ORCPT ); Tue, 13 Mar 2018 17:10:16 -0400 Received: by mail-pf0-f194.google.com with SMTP id j2so430321pff.10 for ; Tue, 13 Mar 2018 14:10:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google; h=date:from:to:cc:subject:message-id:mime-version:content-disposition :content-transfer-encoding:in-reply-to:user-agent; bh=1x+enLGXp8EToJZkHeSGFRA4I50aqhWfid5KEdvEZ5w=; b=CQ2p0tGS0MCoLfQnO2O8ckRwNrNlRCjGEap/T5DKQ4E+W38RHO23gIoGkYqKFsV5Oq U6tuV9ENbkER/EvxYjR9ta/JZwZgmPTI0ThmsXE0x14m9jAFFbCML2hbVdrp4t2dT9Cg VApAcl6nx4kIcGCdeGHjGuoTgRsnb4HCcyC54= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=1x+enLGXp8EToJZkHeSGFRA4I50aqhWfid5KEdvEZ5w=; b=aKT7hhRlmP0vR68ed2zkHwuni0X2dz8LDI+4i8pDHTvaPTmEd5KKcRNElXA/BPW1ae oGJUP0i+ioMHlkd0kFR3ZebLMy6eoMDcyWovVMJLyF/pEPEKdEAdJBrgmbAaHsn0/p7I L1BWmMzKCBZhF+fX8zNiIWvxpGoI4xOkxZ/GQxTuHciG7ld06QHKRvdjtO00lBGNrks3 4ahtSB0GzSHP4eVAKtxZ+D9ezW9pFL0zvHfCDjGVVV5PUtqHyO1qvkxkMwXbbXucb3z0 kHLE5FuN6iHfzSL+6cqjSEKc7blSLYMB/ItW4BCeHmVtEQ8IuCkmZu5vOptETcZ1U6+I 1y8Q== X-Gm-Message-State: AElRT7HHi2sncHwzkUAqxigiseE5Wc8xeFdn7p7UgMVP5voDHo3/U29K VS/OZbZ+S0+nV6Ww2cdEs5YvyQ== X-Received: by 10.99.100.197 with SMTP id y188mr1575674pgb.277.1520975415765; Tue, 13 Mar 2018 14:10:15 -0700 (PDT) Received: from cork (c-76-102-12-117.hsd1.ca.comcast.net. [76.102.12.117]) by smtp.gmail.com with ESMTPSA id l129sm2020865pfl.82.2018.03.13.14.10.14 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 13 Mar 2018 14:10:15 -0700 (PDT) Date: Tue, 13 Mar 2018 14:10:12 -0700 From: =?iso-8859-1?Q?J=F6rn?= Engel To: Linus Torvalds Cc: Kees Cook , "Tobin C. Harding" , "Tobin C. Harding" , Kernel Hardening , Tycho Andersen , Oleg Drokin , Andreas Dilger , James Simmons , Greg Kroah-Hartman , LKML , Herbert Xu , Peter Zijlstra , Ingo Molnar , "Gustavo A. R. Silva" Subject: [PATCH] btree: avoid variable-length allocations Message-ID: <20180313211012.GB29976@cork> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.9.3 (2018-01-21) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org I agree that the code is garbage. In my defense, creating generic iterator-type functions for multiple data types appears to be one of the hardest problems in CS with many bad examples of what not to do. Patch below should fix it. We have tcm_qla2xxx systems, so I will stick it into our test system as well. J?rn -- It is a clich? that most clich?s are true, but then, like most clich?s, that clich? is untrue. -- Stephen Fry From 0077d19b11ec27c3287787d2413b26fc4cf0b3ca Mon Sep 17 00:00:00 2001 From: Joern Engel Date: Tue, 13 Mar 2018 11:36:49 -0700 Subject: [PATCH] btree: avoid variable-length allocations geo->keylen cannot be larger than 4. So we might as well make fixed-size allocations. Given the one remaining user, geo->keylen cannot even be larger than 1. Logfs used to have 64bit and 128bit keys, tcm_qla2xxx only has 32bit keys. But let's not break the code if we don't have to. Signed-off-by: Joern Engel --- lib/btree.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/btree.c b/lib/btree.c index f93a945274af..590facba2c50 100644 --- a/lib/btree.c +++ b/lib/btree.c @@ -3,7 +3,7 @@ * * As should be obvious for Linux kernel code, license is GPLv2 * - * Copyright (c) 2007-2008 Joern Engel + * Copyright (c) 2007-2008 Joern Engel * Bits and pieces stolen from Peter Zijlstra's code, which is * Copyright 2007, Red Hat Inc. Peter Zijlstra * GPLv2 @@ -76,6 +76,8 @@ struct btree_geo btree_geo128 = { }; EXPORT_SYMBOL_GPL(btree_geo128); +#define MAX_KEYLEN (2 * LONG_PER_U64) + static struct kmem_cache *btree_cachep; void *btree_alloc(gfp_t gfp_mask, void *pool_data) @@ -313,7 +315,7 @@ void *btree_get_prev(struct btree_head *head, struct btree_geo *geo, { int i, height; unsigned long *node, *oldnode; - unsigned long *retry_key = NULL, key[geo->keylen]; + unsigned long *retry_key = NULL, key[MAX_KEYLEN]; if (keyzero(geo, __key)) return NULL; @@ -639,8 +641,8 @@ EXPORT_SYMBOL_GPL(btree_remove); int btree_merge(struct btree_head *target, struct btree_head *victim, struct btree_geo *geo, gfp_t gfp) { - unsigned long key[geo->keylen]; - unsigned long dup[geo->keylen]; + unsigned long key[MAX_KEYLEN]; + unsigned long dup[MAX_KEYLEN]; void *val; int err; -- 2.15.1