• Adrian Huang's avatar
    md: fix incorrect declaration about claim_rdev in md_import_device · b0907cad
    Adrian Huang authored
    Commit fb541ca4 ("md: remove lock_bdev / unlock_bdev") removes
    wrappers for blkdev_get/blkdev_put. However, the uninitialized local
    static variable of pointer type 'claim_rdev' in md_import_device()
    is NULL, which leads to the following warning call trace:
    
      WARNING: CPU: 22 PID: 1037 at block/bdev.c:577 bd_prepare_to_claim+0x131/0x150
      CPU: 22 PID: 1037 Comm: mdadm Not tainted 6.2.0-rc3+ #69
      ..
      RIP: 0010:bd_prepare_to_claim+0x131/0x150
      ..
      Call Trace:
       <TASK>
       ? _raw_spin_unlock+0x15/0x30
       ? iput+0x6a/0x220
       blkdev_get_by_dev.part.0+0x4b/0x300
       md_import_device+0x126/0x1d0
       new_dev_store+0x184/0x240
       md_attr_store+0x80/0xf0
       kernfs_fop_write_iter+0x128/0x1c0
       vfs_write+0x2be/0x3c0
       ksys_write+0x5f/0xe0
       do_syscall_64+0x38/0x90
       entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
    It turns out the md device cannot be used:
    
      md: could not open device unknown-block(259,0).
      md: md127 stopped.
    
    Fix the issue by declaring the local static variable of struct type
    and passing the pointer of the variable to blkdev_get_by_dev().
    
    Fixes: fb541ca4 ("md: remove lock_bdev / unlock_bdev")
    Cc: Christoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarAdrian Huang <ahuang12@lenovo.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarSong Liu <song@kernel.org>
    b0907cad
md.c 260 KB