Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

bcachefs: Add gfp flags param to bch2_prt_task_backtrace()

Fixes: e6a2566f7a00 ("bcachefs: Better journal tracepoints")
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Reported-by: smatch

+11 -11
+2 -2
fs/bcachefs/btree_locking.c
··· 92 92 continue; 93 93 94 94 bch2_btree_trans_to_text(out, i->trans); 95 - bch2_prt_task_backtrace(out, task, i == g->g ? 5 : 1); 95 + bch2_prt_task_backtrace(out, task, i == g->g ? 5 : 1, GFP_NOWAIT); 96 96 } 97 97 } 98 98 ··· 227 227 prt_printf(&buf, "backtrace:"); 228 228 prt_newline(&buf); 229 229 printbuf_indent_add(&buf, 2); 230 - bch2_prt_task_backtrace(&buf, trans->locking_wait.task, 2); 230 + bch2_prt_task_backtrace(&buf, trans->locking_wait.task, 2, GFP_NOWAIT); 231 231 printbuf_indent_sub(&buf, 2); 232 232 prt_newline(&buf); 233 233 }
+1 -1
fs/bcachefs/debug.c
··· 627 627 prt_printf(&i->buf, "backtrace:"); 628 628 prt_newline(&i->buf); 629 629 printbuf_indent_add(&i->buf, 2); 630 - bch2_prt_task_backtrace(&i->buf, task, 0); 630 + bch2_prt_task_backtrace(&i->buf, task, 0, GFP_KERNEL); 631 631 printbuf_indent_sub(&i->buf, 2); 632 632 prt_newline(&i->buf); 633 633
+1 -1
fs/bcachefs/journal.c
··· 233 233 prt_str(&pbuf, "entry size: "); 234 234 prt_human_readable_u64(&pbuf, vstruct_bytes(buf->data)); 235 235 prt_newline(&pbuf); 236 - bch2_prt_task_backtrace(&pbuf, current, 1); 236 + bch2_prt_task_backtrace(&pbuf, current, 1, GFP_NOWAIT); 237 237 trace_journal_entry_close(c, pbuf.buf); 238 238 printbuf_exit(&pbuf); 239 239 }
+5 -5
fs/bcachefs/util.c
··· 272 272 console_unlock(); 273 273 } 274 274 275 - int bch2_save_backtrace(bch_stacktrace *stack, struct task_struct *task, unsigned skipnr) 275 + int bch2_save_backtrace(bch_stacktrace *stack, struct task_struct *task, unsigned skipnr, 276 + gfp_t gfp) 276 277 { 277 278 #ifdef CONFIG_STACKTRACE 278 279 unsigned nr_entries = 0; 279 - int ret = 0; 280 280 281 281 stack->nr = 0; 282 - ret = darray_make_room(stack, 32); 282 + int ret = darray_make_room_gfp(stack, 32, gfp); 283 283 if (ret) 284 284 return ret; 285 285 ··· 308 308 } 309 309 } 310 310 311 - int bch2_prt_task_backtrace(struct printbuf *out, struct task_struct *task, unsigned skipnr) 311 + int bch2_prt_task_backtrace(struct printbuf *out, struct task_struct *task, unsigned skipnr, gfp_t gfp) 312 312 { 313 313 bch_stacktrace stack = { 0 }; 314 - int ret = bch2_save_backtrace(&stack, task, skipnr + 1); 314 + int ret = bch2_save_backtrace(&stack, task, skipnr + 1, gfp); 315 315 316 316 bch2_prt_backtrace(out, &stack); 317 317 darray_exit(&stack);
+2 -2
fs/bcachefs/util.h
··· 348 348 void bch2_print_string_as_lines(const char *prefix, const char *lines); 349 349 350 350 typedef DARRAY(unsigned long) bch_stacktrace; 351 - int bch2_save_backtrace(bch_stacktrace *stack, struct task_struct *, unsigned); 351 + int bch2_save_backtrace(bch_stacktrace *stack, struct task_struct *, unsigned, gfp_t); 352 352 void bch2_prt_backtrace(struct printbuf *, bch_stacktrace *); 353 - int bch2_prt_task_backtrace(struct printbuf *, struct task_struct *, unsigned); 353 + int bch2_prt_task_backtrace(struct printbuf *, struct task_struct *, unsigned, gfp_t); 354 354 355 355 static inline void prt_bdevname(struct printbuf *out, struct block_device *bdev) 356 356 {