From owner-svn-src-head@freebsd.org Sun Dec 8 01:55:24 2019 Return-Path: Delivered-To: svn-src-head@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3EE381D4BDB; Sun, 8 Dec 2019 01:55:24 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 47VqCc0nydz4Vg0; Sun, 8 Dec 2019 01:55:24 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id F3BE522F79; Sun, 8 Dec 2019 01:55:23 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id xB81tNHF027995; Sun, 8 Dec 2019 01:55:23 GMT (envelope-from jeff@FreeBSD.org) Received: (from jeff@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id xB81tNJb027994; Sun, 8 Dec 2019 01:55:23 GMT (envelope-from jeff@FreeBSD.org) Message-Id: <201912080155.xB81tNJb027994@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jeff set sender to jeff@FreeBSD.org using -f From: Jeff Roberson Date: Sun, 8 Dec 2019 01:55:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r355517 - head/sys/vm X-SVN-Group: head X-SVN-Commit-Author: jeff X-SVN-Commit-Paths: head/sys/vm X-SVN-Commit-Revision: 355517 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 Dec 2019 01:55:24 -0000 Author: jeff Date: Sun Dec 8 01:55:23 2019 New Revision: 355517 URL: https://svnweb.freebsd.org/changeset/base/355517 Log: Fix two problems with r355149. The sysctl name collision code assumed that zones would never be freed. In the case of tmpfs this was not true. While here test for the right bit to disable the keg related sysctls for zones that don't have kegs. Reported by: pho Reviewed by: rlibby Differential Revision: https://reviews.freebsd.org/D22655 Modified: head/sys/vm/uma_core.c Modified: head/sys/vm/uma_core.c ============================================================================== --- head/sys/vm/uma_core.c Sun Dec 8 01:49:53 2019 (r355516) +++ head/sys/vm/uma_core.c Sun Dec 8 01:55:23 2019 (r355517) @@ -1859,14 +1859,13 @@ zone_alloc_counters(uma_zone_t zone, void *unused) zone->uz_fails = counter_u64_alloc(M_WAITOK); } -#define UMA_MAX_DUP 999 static void zone_alloc_sysctl(uma_zone_t zone, void *unused) { uma_zone_domain_t zdom; uma_keg_t keg; struct sysctl_oid *oid, *domainoid; - int domains, i; + int domains, i, cnt; static const char *nokeg = "cache zone"; char *c; @@ -1876,10 +1875,11 @@ zone_alloc_sysctl(uma_zone_t zone, void *unused) * an index. */ if (zone->uz_namecnt != 0) { - if (zone->uz_namecnt > UMA_MAX_DUP) - zone->uz_namecnt = UMA_MAX_DUP; - zone->uz_ctlname = malloc(strlen(zone->uz_name) + - sizeof(__XSTRING(UMA_MAX_DUP)) + 1 , M_UMA, M_WAITOK); + /* Count the number of decimal digits and '_' separator. */ + for (i = 1, cnt = zone->uz_namecnt; cnt != 0; i++) + cnt /= 10; + zone->uz_ctlname = malloc(strlen(zone->uz_name) + i + 1, + M_UMA, M_WAITOK); sprintf(zone->uz_ctlname, "%s_%d", zone->uz_name, zone->uz_namecnt); } else @@ -1912,7 +1912,7 @@ zone_alloc_sysctl(uma_zone_t zone, void *unused) oid = SYSCTL_ADD_NODE(NULL, SYSCTL_CHILDREN(zone->uz_oid), OID_AUTO, "keg", CTLFLAG_RD, NULL, ""); keg = zone->uz_keg; - if ((zone->uz_flags & UMA_ZFLAG_CACHEONLY) == 0) { + if ((zone->uz_flags & UMA_ZFLAG_CACHE) == 0) { SYSCTL_ADD_CONST_STRING(NULL, SYSCTL_CHILDREN(oid), OID_AUTO, "name", CTLFLAG_RD, keg->uk_name, "Keg name"); SYSCTL_ADD_U32(NULL, SYSCTL_CHILDREN(oid), OID_AUTO, @@ -2018,8 +2018,14 @@ zone_count(uma_zone_t zone, void *arg) struct uma_zone_count *cnt; cnt = arg; + /* + * Some zones are rapidly created with identical names and + * destroyed out of order. This can lead to gaps in the count. + * Use one greater than the maximum observed for this name. + */ if (strcmp(zone->uz_name, cnt->name) == 0) - cnt->count++; + cnt->count = MAX(cnt->count, + zone->uz_namecnt + 1); } /*