• Pankaj Raghav's avatar
    brd: use radix_tree_maybe_preload instead of radix_tree_preload · 0aa2988e
    Pankaj Raghav authored
    Unconditionally calling radix_tree_preload_end() results in a OOPS
    message as the preload is only conditionally called for
    gfpflags_allow_blocking().
    
    [   20.267323] BUG: using smp_processor_id() in preemptible [00000000] code: fio/416
    [   20.267837] caller is brd_insert_page.part.0+0xbe/0x190 [brd]
    [   20.269436] Call Trace:
    [   20.269598]  <TASK>
    [   20.269742]  dump_stack_lvl+0x32/0x50
    [   20.269982]  check_preemption_disabled+0xd1/0xe0
    [   20.270289]  brd_insert_page.part.0+0xbe/0x190 [brd]
    [   20.270664]  brd_submit_bio+0x33f/0xf40 [brd]
    
    Use radix_tree_maybe_preload() which does preload only if
    gfpflags_allow_blocking() is true but also takes the lock. Therefore,
    unconditionally calling radix_tree_preload_end() should not create any
    issues and the message disappears.
    
    Fixes: 6ded703c ("brd: check for REQ_NOWAIT and set correct page allocation mask")
    Signed-off-by: default avatarPankaj Raghav <p.raghav@samsung.com>
    Link: https://lore.kernel.org/r/20230217121442.33914-1-p.raghav@samsung.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    0aa2988e
brd.c 12.3 KB