Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp188222imu; Thu, 6 Dec 2018 22:31:40 -0800 (PST) X-Google-Smtp-Source: AFSGD/UXKRdhLDKIZmGASpMDY6jmOXdzLgxkzM8GLUT3nTKtL8hNvdd32D924BvUJk2v2oe+bR1z X-Received: by 2002:a63:f1f:: with SMTP id e31mr895490pgl.274.1544164300774; Thu, 06 Dec 2018 22:31:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544164300; cv=none; d=google.com; s=arc-20160816; b=yoYfiucYxxf/pofgdvTEJlbcvJs0joHNwP+TgRoP6/7Lp1rmfXE2kEiAx0/uB2kC48 2yaWEK9zkjr3XK/3VYtgd0ZqlQHvGe6pVzulPWtcfUVIF5+QRAixGaB/QvK2uUZj+FFh e/wKhmA+VitPzUECgNodJK3yxxC8BJMbgt4fdRNmIdEG4NG2sQPua9KZ2e2wMPzufBr7 dEdZL7B+1DItCxt1XpTb3GoaTiU3QVxbJGXExoJdUq2irsqsITTmwtH74LNCwUOSZldf KOZyokEeNEDwtYtUSTrFqIllubRNmIPqcKchDyY1LoVPg616PGI15OHCv/CFIEJqZTmq lpyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=Gw0GKbOmZn3aBOU80S/qsHk3rpBVZI3rfX0kZSo7L1g=; b=ugUafpB8bGcuop88Crmvt46nwr2t86Ofo9usnl0SvInL8HNZ1qoIGpE8cQg1jAIV38 AYD3/SXyPHzoqmcnw6OaVPwn/IR1L4Ext9vj9lt9YcxaCPWl+HcUNI78sW5OJR15GBaF o5kzHned8wnDWnx8lYXh61Qb5IctO+l1g3cRFjQY1ytfpiUlOfq1v+B7c23Ij6YWzTMO aI5JHSn+qnZ2XPriwpMVWIn9WoZ67YBX82oIplA1jRIr063NtlyLX8eo+MPn1O+nrKKY 8y93ivMfHt3UZB60xecApxHqqzxeZiUcecQlyUnDie5CLRLh7QQALme3RNSVTYlAN6Ox 5vnw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=SUDpvRYE; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n2si2276250pgr.67.2018.12.06.22.31.24; Thu, 06 Dec 2018 22:31:40 -0800 (PST) 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=@gmail.com header.s=20161025 header.b=SUDpvRYE; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726041AbeLGGaq (ORCPT + 99 others); Fri, 7 Dec 2018 01:30:46 -0500 Received: from mail-pg1-f169.google.com ([209.85.215.169]:46836 "EHLO mail-pg1-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725948AbeLGGaq (ORCPT ); Fri, 7 Dec 2018 01:30:46 -0500 Received: by mail-pg1-f169.google.com with SMTP id w7so1250653pgp.13; Thu, 06 Dec 2018 22:30:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=Gw0GKbOmZn3aBOU80S/qsHk3rpBVZI3rfX0kZSo7L1g=; b=SUDpvRYEGffdFT1MsQ3Um7+IIfKu/a6yihW+LvTTswkOQwCzc5a5UmomhZBWCohHAH euFgetSDJDw/kmj4hg4mLa82Vmhu+hbZNepTLvECQ9FnivA4aYRbl9bB41HzKZoHQQMG yZHbm4aqpjni69NOg0qDEk98Xh9bJi74j0MZrymffkf08fBCXXqlbVAwbwcxv4aANoCe NtaomaLwTHw2Yfp84tmkzULn3x4mgtW2rvFFl6emXXUefgsZdxgo8ELFIi8CQy9Spyru I7iTTJK4Um5ROZ7c5v+Yi6aL/SPKkwLILBqGblcZGgIMW1wZV5xbjrOZi6bVAujMas/M e5cA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=Gw0GKbOmZn3aBOU80S/qsHk3rpBVZI3rfX0kZSo7L1g=; b=HEird9D2gCc/6m4O7DgaJPME2nSHDDUA9sa4+p4drn1jeVjKdXE9kU5LT8AZvyueUM R/Q9CHXIC/tNT7CFb5WkbNRjeH8/s/74n1d5mGUSMqlLry5D9VSIs5viLsr5sXVcdZi0 CPoN77IsUU/5VA3uFz8EDGAl+bQqAsQywOCT73Z/G4EcjPB1W6jEHjlZwsBsNBzMOgtK Nd9XValnMMRuYvz27CmbSAYt9MsxcWAR4iqdFPqnim36/Kwq38BVGH7FT+nDIRkA0r5o wZYBJ4dJtLATGaDt07v/S56p3xEE5Fy9traAnlufr/ObKKgDiI/q1YDzZIzAtmW0di6c cX8g== X-Gm-Message-State: AA+aEWajMMstMTyQGR0VGIVthZ3HANE//1U6m0OFv/Z2yrML7/CzmYT6 nNBP5ixhcifscBDPtqv59sFlPYmw X-Received: by 2002:a62:c583:: with SMTP id j125mr1056229pfg.37.1544164243728; Thu, 06 Dec 2018 22:30:43 -0800 (PST) Received: from localhost ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id 7sm7137563pfm.8.2018.12.06.22.30.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Dec 2018 22:30:43 -0800 (PST) From: Xin Long To: linux-kernel@vger.kernel.org, network dev , linux-sctp@vger.kernel.org Cc: davem@davemloft.net, Marcelo Ricardo Leitner , Neil Horman , Dave Hansen , David Rientjes , Eric Paris , Konstantin Khorenko Subject: [PATCHv2 net 0/3] net: add support for flex_array_resize in flex_array Date: Fri, 7 Dec 2018 14:30:32 +0800 Message-Id: X-Mailer: git-send-email 2.1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Without the support for the total_nr_elements's growing or shrinking dynamically, flex_array is not that 'flexible'. Like when users want to change the size, they have to redo flex_array_alloc and copy all the elements from the old to the new one. The worse thing is every element's memory gets changed. To implement flex_array_resize based on current code, the difficult thing is to process the size border of FLEX_ARRAY_BASE_BYTES_LEFT, where the base data memory may change to an array for the 2nd level data memory for growing, likewise for shrinking. To make this part easier, we separate the base data memory and define FLEX_ARRAY_BASE_SIZE as a same value of FLEX_ARRAY_PART_SIZE, as Neil suggested. When new size is crossing the border, the base memory is allocated as the array for the 2nd level data memory and its part[0] is pointed to the old base memory, and do the opposite for shrinking. But it doesn't do any memory allocation or shrinking for elements in flex_array_resize, as which should be done by flex_array_prealloc or flex_array_shrink called by users. No memory leaks can be caused by that. SCTP has benefited a lot from flex_array_resize() for managing its stream memory so far. v1->v2: Cc LKML and more developers. Xin Long (3): flex_array: make FLEX_ARRAY_BASE_SIZE the same value of FLEX_ARRAY_PART_SIZE flex_array: support flex_array_resize sctp: fa_resize sctp stream instead of redo fa_alloc include/linux/flex_array.h | 40 ++++++++++----------- lib/flex_array.c | 73 ++++++++++++++++++++++++++++++++++++-- net/sctp/stream.c | 87 +++++++++++++++++++++------------------------- 3 files changed, 130 insertions(+), 70 deletions(-) -- 2.1.0