From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CD8A8C4742C for ; Sun, 1 Nov 2020 20:13:09 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 66B75208B6 for ; Sun, 1 Nov 2020 20:13:09 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 66B75208B6 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=perches.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 01FA46B0078; Sun, 1 Nov 2020 15:13:09 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id EC0146B007D; Sun, 1 Nov 2020 15:13:08 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D61C66B007E; Sun, 1 Nov 2020 15:13:08 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0117.hostedemail.com [216.40.44.117]) by kanga.kvack.org (Postfix) with ESMTP id 9F3CB6B0078 for ; Sun, 1 Nov 2020 15:13:08 -0500 (EST) Received: from smtpin09.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id 76DD08249980 for ; Sun, 1 Nov 2020 20:13:07 +0000 (UTC) X-FDA: 77436948414.09.trail13_5816714272aa Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin09.hostedemail.com (Postfix) with ESMTP id 59C1C180AD815 for ; Sun, 1 Nov 2020 20:13:07 +0000 (UTC) X-HE-Tag: trail13_5816714272aa X-Filterd-Recvd-Size: 13780 Received: from smtprelay.hostedemail.com (smtprelay0203.hostedemail.com [216.40.44.203]) by imf46.hostedemail.com (Postfix) with ESMTP for ; Sun, 1 Nov 2020 20:13:06 +0000 (UTC) Received: from filter.hostedemail.com (clb03-v110.bra.tucows.net [216.40.38.60]) by smtprelay03.hostedemail.com (Postfix) with ESMTP id 87447837F253; Sun, 1 Nov 2020 20:13:06 +0000 (UTC) X-Session-Marker: 6A6F6540706572636865732E636F6D X-HE-Tag: soda60_3013aa7272aa X-Filterd-Recvd-Size: 12623 Received: from joe-laptop.perches.com (unknown [47.151.133.149]) (Authenticated sender: joe@perches.com) by omf04.hostedemail.com (Postfix) with ESMTPA; Sun, 1 Nov 2020 20:13:05 +0000 (UTC) From: Joe Perches To: Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH 5/5] mm: slub: Convert sysfs sprintf family to sysfs_emit/sysfs_emit_at Date: Sun, 1 Nov 2020 12:12:52 -0800 Message-Id: X-Mailer: git-send-email 2.26.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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: Convert the unbounded uses of sprintf to sysfs_emit. A few conversions may now not end in a newline if the output buffer is overflowed. Signed-off-by: Joe Perches --- mm/slub.c | 148 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 76 insertions(+), 72 deletions(-) diff --git a/mm/slub.c b/mm/slub.c index b23fa366552b..ac40dd18d68f 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -4724,7 +4724,7 @@ static void process_slab(struct loc_track *t, struc= t kmem_cache *s, } =20 static int list_locations(struct kmem_cache *s, char *buf, - enum track_item alloc) + enum track_item alloc) { int len =3D 0; unsigned long i; @@ -4734,7 +4734,7 @@ static int list_locations(struct kmem_cache *s, cha= r *buf, =20 if (!alloc_loc_track(&t, PAGE_SIZE / sizeof(struct location), GFP_KERNEL)) { - return sprintf(buf, "Out of memory\n"); + return sysfs_emit(buf, "Out of memory\n"); } /* Push back cpu slabs */ flush_all(s); @@ -4757,50 +4757,45 @@ static int list_locations(struct kmem_cache *s, c= har *buf, for (i =3D 0; i < t.count; i++) { struct location *l =3D &t.loc[i]; =20 - if (len > PAGE_SIZE - KSYM_SYMBOL_LEN - 100) - break; - len +=3D sprintf(buf + len, "%7ld ", l->count); + len +=3D sysfs_emit_at(buf, len, "%7ld ", l->count); =20 if (l->addr) - len +=3D sprintf(buf + len, "%pS", (void *)l->addr); + len +=3D sysfs_emit_at(buf, len, "%pS", (void *)l->addr); else - len +=3D sprintf(buf + len, ""); - - if (l->sum_time !=3D l->min_time) { - len +=3D sprintf(buf + len, " age=3D%ld/%ld/%ld", - l->min_time, - (long)div_u64(l->sum_time, l->count), - l->max_time); - } else - len +=3D sprintf(buf + len, " age=3D%ld", - l->min_time); + len +=3D sysfs_emit_at(buf, len, ""); + + if (l->sum_time !=3D l->min_time) + len +=3D sysfs_emit_at(buf, len, " age=3D%ld/%ld/%ld", + l->min_time, + (long)div_u64(l->sum_time, + l->count), + l->max_time); + else + len +=3D sysfs_emit_at(buf, len, " age=3D%ld", l->min_time); =20 if (l->min_pid !=3D l->max_pid) - len +=3D sprintf(buf + len, " pid=3D%ld-%ld", - l->min_pid, l->max_pid); + len +=3D sysfs_emit_at(buf, len, " pid=3D%ld-%ld", + l->min_pid, l->max_pid); else - len +=3D sprintf(buf + len, " pid=3D%ld", - l->min_pid); + len +=3D sysfs_emit_at(buf, len, " pid=3D%ld", + l->min_pid); =20 if (num_online_cpus() > 1 && - !cpumask_empty(to_cpumask(l->cpus)) && - len < PAGE_SIZE - 60) - len +=3D scnprintf(buf + len, PAGE_SIZE - len - 50, - " cpus=3D%*pbl", - cpumask_pr_args(to_cpumask(l->cpus))); - - if (nr_online_nodes > 1 && !nodes_empty(l->nodes) && - len < PAGE_SIZE - 60) - len +=3D scnprintf(buf + len, PAGE_SIZE - len - 50, - " nodes=3D%*pbl", - nodemask_pr_args(&l->nodes)); - - len +=3D sprintf(buf + len, "\n"); + !cpumask_empty(to_cpumask(l->cpus))) + len +=3D sysfs_emit_at(buf, len, " cpus=3D%*pbl", + cpumask_pr_args(to_cpumask(l->cpus))); + + if (nr_online_nodes > 1 && !nodes_empty(l->nodes)) + len +=3D sysfs_emit_at(buf, len, " nodes=3D%*pbl", + nodemask_pr_args(&l->nodes)); + + len +=3D sysfs_emit_at(buf, len, "\n"); } =20 free_loc_track(&t); if (!t.count) - len +=3D sprintf(buf, "No data\n"); + len +=3D sysfs_emit_at(buf, len, "No data\n"); + return len; } #endif /* CONFIG_SLUB_DEBUG */ @@ -4897,12 +4892,13 @@ __setup("slub_memcg_sysfs=3D", setup_slub_memcg_s= ysfs); #endif =20 static ssize_t show_slab_objects(struct kmem_cache *s, - char *buf, unsigned long flags) + char *buf, unsigned long flags) { unsigned long total =3D 0; int node; int x; unsigned long *nodes; + int len =3D 0; =20 nodes =3D kcalloc(nr_node_ids, sizeof(unsigned long), GFP_KERNEL); if (!nodes) @@ -4991,15 +4987,19 @@ static ssize_t show_slab_objects(struct kmem_cach= e *s, nodes[node] +=3D x; } } - x =3D sprintf(buf, "%lu", total); + + len +=3D sysfs_emit_at(buf, len, "%lu", total); #ifdef CONFIG_NUMA - for (node =3D 0; node < nr_node_ids; node++) + for (node =3D 0; node < nr_node_ids; node++) { if (nodes[node]) - x +=3D sprintf(buf + x, " N%d=3D%lu", - node, nodes[node]); + len +=3D sysfs_emit_at(buf, len, " N%d=3D%lu", + node, nodes[node]); + } #endif + len +=3D sysfs_emit_at(buf, len, "\n"); kfree(nodes); - return x + sprintf(buf + x, "\n"); + + return len; } =20 #define to_slab_attr(n) container_of(n, struct slab_attribute, attr) @@ -5021,37 +5021,37 @@ struct slab_attribute { =20 static ssize_t slab_size_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%u\n", s->size); + return sysfs_emit(buf, "%u\n", s->size); } SLAB_ATTR_RO(slab_size); =20 static ssize_t align_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%u\n", s->align); + return sysfs_emit(buf, "%u\n", s->align); } SLAB_ATTR_RO(align); =20 static ssize_t object_size_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%u\n", s->object_size); + return sysfs_emit(buf, "%u\n", s->object_size); } SLAB_ATTR_RO(object_size); =20 static ssize_t objs_per_slab_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%u\n", oo_objects(s->oo)); + return sysfs_emit(buf, "%u\n", oo_objects(s->oo)); } SLAB_ATTR_RO(objs_per_slab); =20 static ssize_t order_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%u\n", oo_order(s->oo)); + return sysfs_emit(buf, "%u\n", oo_order(s->oo)); } SLAB_ATTR_RO(order); =20 static ssize_t min_partial_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%lu\n", s->min_partial); + return sysfs_emit(buf, "%lu\n", s->min_partial); } =20 static ssize_t min_partial_store(struct kmem_cache *s, const char *buf, @@ -5071,7 +5071,7 @@ SLAB_ATTR(min_partial); =20 static ssize_t cpu_partial_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%u\n", slub_cpu_partial(s)); + return sysfs_emit(buf, "%u\n", slub_cpu_partial(s)); } =20 static ssize_t cpu_partial_store(struct kmem_cache *s, const char *buf, @@ -5096,13 +5096,13 @@ static ssize_t ctor_show(struct kmem_cache *s, ch= ar *buf) { if (!s->ctor) return 0; - return sprintf(buf, "%pS\n", s->ctor); + return sysfs_emit(buf, "%pS\n", s->ctor); } SLAB_ATTR_RO(ctor); =20 static ssize_t aliases_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%d\n", s->refcount < 0 ? 0 : s->refcount - 1); + return sysfs_emit(buf, "%d\n", s->refcount < 0 ? 0 : s->refcount - 1); } SLAB_ATTR_RO(aliases); =20 @@ -5135,7 +5135,7 @@ static ssize_t slabs_cpu_partial_show(struct kmem_c= ache *s, char *buf) int objects =3D 0; int pages =3D 0; int cpu; - int len; + int len =3D 0; =20 for_each_online_cpu(cpu) { struct page *page; @@ -5148,7 +5148,7 @@ static ssize_t slabs_cpu_partial_show(struct kmem_c= ache *s, char *buf) } } =20 - len =3D sprintf(buf, "%d(%d)", objects, pages); + len +=3D sysfs_emit_at(buf, len, "%d(%d)", objects, pages); =20 #ifdef CONFIG_SMP for_each_online_cpu(cpu) { @@ -5156,44 +5156,45 @@ static ssize_t slabs_cpu_partial_show(struct kmem= _cache *s, char *buf) =20 page =3D slub_percpu_partial(per_cpu_ptr(s->cpu_slab, cpu)); =20 - if (page && len < PAGE_SIZE - 20) - len +=3D sprintf(buf + len, " C%d=3D%d(%d)", cpu, - page->pobjects, page->pages); + len +=3D sysfs_emit_at(buf, len, " C%d=3D%d(%d)", + cpu, page->pobjects, page->pages); } #endif - return len + sprintf(buf + len, "\n"); + len +=3D sysfs_emit_at(buf, len, "\n"); + + return len; } SLAB_ATTR_RO(slabs_cpu_partial); =20 static ssize_t reclaim_account_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%d\n", !!(s->flags & SLAB_RECLAIM_ACCOUNT)); + return sysfs_emit(buf, "%d\n", !!(s->flags & SLAB_RECLAIM_ACCOUNT)); } SLAB_ATTR_RO(reclaim_account); =20 static ssize_t hwcache_align_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%d\n", !!(s->flags & SLAB_HWCACHE_ALIGN)); + return sysfs_emit(buf, "%d\n", !!(s->flags & SLAB_HWCACHE_ALIGN)); } SLAB_ATTR_RO(hwcache_align); =20 #ifdef CONFIG_ZONE_DMA static ssize_t cache_dma_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%d\n", !!(s->flags & SLAB_CACHE_DMA)); + return sysfs_emit(buf, "%d\n", !!(s->flags & SLAB_CACHE_DMA)); } SLAB_ATTR_RO(cache_dma); #endif =20 static ssize_t usersize_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%u\n", s->usersize); + return sysfs_emit(buf, "%u\n", s->usersize); } SLAB_ATTR_RO(usersize); =20 static ssize_t destroy_by_rcu_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%d\n", !!(s->flags & SLAB_TYPESAFE_BY_RCU)); + return sysfs_emit(buf, "%d\n", !!(s->flags & SLAB_TYPESAFE_BY_RCU)); } SLAB_ATTR_RO(destroy_by_rcu); =20 @@ -5212,33 +5213,33 @@ SLAB_ATTR_RO(total_objects); =20 static ssize_t sanity_checks_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%d\n", !!(s->flags & SLAB_CONSISTENCY_CHECKS)); + return sysfs_emit(buf, "%d\n", !!(s->flags & SLAB_CONSISTENCY_CHECKS)); } SLAB_ATTR_RO(sanity_checks); =20 static ssize_t trace_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%d\n", !!(s->flags & SLAB_TRACE)); + return sysfs_emit(buf, "%d\n", !!(s->flags & SLAB_TRACE)); } SLAB_ATTR_RO(trace); =20 static ssize_t red_zone_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%d\n", !!(s->flags & SLAB_RED_ZONE)); + return sysfs_emit(buf, "%d\n", !!(s->flags & SLAB_RED_ZONE)); } =20 SLAB_ATTR_RO(red_zone); =20 static ssize_t poison_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%d\n", !!(s->flags & SLAB_POISON)); + return sysfs_emit(buf, "%d\n", !!(s->flags & SLAB_POISON)); } =20 SLAB_ATTR_RO(poison); =20 static ssize_t store_user_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%d\n", !!(s->flags & SLAB_STORE_USER)); + return sysfs_emit(buf, "%d\n", !!(s->flags & SLAB_STORE_USER)); } =20 SLAB_ATTR_RO(store_user); @@ -5282,7 +5283,7 @@ SLAB_ATTR_RO(free_calls); #ifdef CONFIG_FAILSLAB static ssize_t failslab_show(struct kmem_cache *s, char *buf) { - return sprintf(buf, "%d\n", !!(s->flags & SLAB_FAILSLAB)); + return sysfs_emit(buf, "%d\n", !!(s->flags & SLAB_FAILSLAB)); } SLAB_ATTR_RO(failslab); #endif @@ -5306,7 +5307,7 @@ SLAB_ATTR(shrink); #ifdef CONFIG_NUMA static ssize_t remote_node_defrag_ratio_show(struct kmem_cache *s, char = *buf) { - return sprintf(buf, "%u\n", s->remote_node_defrag_ratio / 10); + return sysfs_emit(buf, "%u\n", s->remote_node_defrag_ratio / 10); } =20 static ssize_t remote_node_defrag_ratio_store(struct kmem_cache *s, @@ -5333,7 +5334,7 @@ static int show_stat(struct kmem_cache *s, char *bu= f, enum stat_item si) { unsigned long sum =3D 0; int cpu; - int len; + int len =3D 0; int *data =3D kmalloc_array(nr_cpu_ids, sizeof(int), GFP_KERNEL); =20 if (!data) @@ -5346,16 +5347,19 @@ static int show_stat(struct kmem_cache *s, char *= buf, enum stat_item si) sum +=3D x; } =20 - len =3D sprintf(buf, "%lu", sum); + len +=3D sysfs_emit_at(buf, len, "%lu", sum); =20 #ifdef CONFIG_SMP for_each_online_cpu(cpu) { - if (data[cpu] && len < PAGE_SIZE - 20) - len +=3D sprintf(buf + len, " C%d=3D%u", cpu, data[cpu]); + if (data[cpu]) + len +=3D sysfs_emit_at(buf, len, " C%d=3D%u", + cpu, data[cpu]); } #endif kfree(data); - return len + sprintf(buf + len, "\n"); + len +=3D sysfs_emit_at(buf, len, "\n"); + + return len; } =20 static void clear_stat(struct kmem_cache *s, enum stat_item si) --=20 2.26.0