Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[sfrench/cifs-2.6.git] / mm / page_owner.c
index 9ab4a9b5bc091b80915850038d4d3f04eb331ee1..0993f5f36b011ec567e3b559f50bb4dafde90479 100644 (file)
@@ -59,20 +59,19 @@ void __reset_page_owner(struct page *page, unsigned int order)
 
 void __set_page_owner(struct page *page, unsigned int order, gfp_t gfp_mask)
 {
-       struct page_ext *page_ext;
-       struct stack_trace *trace;
-
-       page_ext = lookup_page_ext(page);
+       struct page_ext *page_ext = lookup_page_ext(page);
+       struct stack_trace trace = {
+               .nr_entries = 0,
+               .max_entries = ARRAY_SIZE(page_ext->trace_entries),
+               .entries = &page_ext->trace_entries[0],
+               .skip = 3,
+       };
 
-       trace = &page_ext->trace;
-       trace->nr_entries = 0;
-       trace->max_entries = ARRAY_SIZE(page_ext->trace_entries);
-       trace->entries = &page_ext->trace_entries[0];
-       trace->skip = 3;
-       save_stack_trace(&page_ext->trace);
+       save_stack_trace(&trace);
 
        page_ext->order = order;
        page_ext->gfp_mask = gfp_mask;
+       page_ext->nr_entries = trace.nr_entries;
 
        __set_bit(PAGE_EXT_OWNER, &page_ext->flags);
 }
@@ -84,6 +83,10 @@ print_page_owner(char __user *buf, size_t count, unsigned long pfn,
        int ret;
        int pageblock_mt, page_mt;
        char *kbuf;
+       struct stack_trace trace = {
+               .nr_entries = page_ext->nr_entries,
+               .entries = &page_ext->trace_entries[0],
+       };
 
        kbuf = kmalloc(count, GFP_KERNEL);
        if (!kbuf)
@@ -121,8 +124,7 @@ print_page_owner(char __user *buf, size_t count, unsigned long pfn,
        if (ret >= count)
                goto err;
 
-       ret += snprint_stack_trace(kbuf + ret, count - ret,
-                                       &page_ext->trace, 0);
+       ret += snprint_stack_trace(kbuf + ret, count - ret, &trace, 0);
        if (ret >= count)
                goto err;