diff --git a/drivers/base/node.c b/drivers/base/node.c index 89996ae43f4f0aa64bdc00ace8bdbd11e7795a63..2e5e38e7bea7fdc78cf54cc2791abc23fe2910c0 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c @@ -453,7 +453,7 @@ static ssize_t node_read_meminfo(struct device *dev, #else nid, K(node_page_state(pgdat, NR_SLAB_UNRECLAIMABLE))); #endif - len += hugetlb_report_node_meminfo(nid, buf + len); + len += hugetlb_report_node_meminfo(buf, len, nid); return len; } diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 588f9f2a44fceb6630fdee663fc499d3d5fd0f45..2d2b06b36bd001f73a8fa5ecaab718575841d6b3 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h @@ -102,7 +102,7 @@ void __unmap_hugepage_range(struct mmu_gather *tlb, struct vm_area_struct *vma, unsigned long start, unsigned long end, struct page *ref_page); void hugetlb_report_meminfo(struct seq_file *); -int hugetlb_report_node_meminfo(int, char *); +int hugetlb_report_node_meminfo(char *buf, int len, int nid); void hugetlb_show_meminfo(void); unsigned long hugetlb_total_pages(void); vm_fault_t hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, @@ -188,7 +188,7 @@ static inline void adjust_range_if_pmd_sharing_possible( static inline void hugetlb_report_meminfo(struct seq_file *m) { } -#define hugetlb_report_node_meminfo(n, buf) 0 +#define hugetlb_report_node_meminfo(buf, len, nid) 0 static inline void hugetlb_show_meminfo(void) { } diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 5b6a050fd6c15c991a31fa06c51aeeadd34fdde5..e8ef6c62da34c1195444211f926fa7dd22512e22 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -3417,18 +3417,20 @@ void hugetlb_report_meminfo(struct seq_file *m) seq_printf(m, "Hugetlb: %8lu kB\n", total / 1024); } -int hugetlb_report_node_meminfo(int nid, char *buf) +int hugetlb_report_node_meminfo(char *buf, int len, int nid) { struct hstate *h = &default_hstate; + if (!hugepages_supported()) return 0; - return sprintf(buf, - "Node %d HugePages_Total: %5u\n" - "Node %d HugePages_Free: %5u\n" - "Node %d HugePages_Surp: %5u\n", - nid, h->nr_huge_pages_node[nid], - nid, h->free_huge_pages_node[nid], - nid, h->surplus_huge_pages_node[nid]); + + return sysfs_emit_at(buf, len, + "Node %d HugePages_Total: %5u\n" + "Node %d HugePages_Free: %5u\n" + "Node %d HugePages_Surp: %5u\n", + nid, h->nr_huge_pages_node[nid], + nid, h->free_huge_pages_node[nid], + nid, h->surplus_huge_pages_node[nid]); } void hugetlb_show_meminfo(void)