1. 13 1月, 2023 1 次提交
    • A
      md: fix incorrect declaration about claim_rdev in md_import_device · b0907cad
      Adrian Huang 提交于
      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: NAdrian Huang <ahuang12@lenovo.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NSong Liu <song@kernel.org>
      b0907cad
  2. 05 1月, 2023 1 次提交
  3. 03 12月, 2022 3 次提交
  4. 15 11月, 2022 3 次提交
    • M
      md: fix a crash in mempool_free · 341097ee
      Mikulas Patocka 提交于
      There's a crash in mempool_free when running the lvm test
      shell/lvchange-rebuild-raid.sh.
      
      The reason for the crash is this:
      * super_written calls atomic_dec_and_test(&mddev->pending_writes) and
        wake_up(&mddev->sb_wait). Then it calls rdev_dec_pending(rdev, mddev)
        and bio_put(bio).
      * so, the process that waited on sb_wait and that is woken up is racing
        with bio_put(bio).
      * if the process wins the race, it calls bioset_exit before bio_put(bio)
        is executed.
      * bio_put(bio) attempts to free a bio into a destroyed bio set - causing
        a crash in mempool_free.
      
      We fix this bug by moving bio_put before atomic_dec_and_test.
      
      We also move rdev_dec_pending before atomic_dec_and_test as suggested by
      Neil Brown.
      
      The function md_end_flush has a similar bug - we must call bio_put before
      we decrement the number of in-progress bios.
      
       BUG: kernel NULL pointer dereference, address: 0000000000000000
       #PF: supervisor write access in kernel mode
       #PF: error_code(0x0002) - not-present page
       PGD 11557f0067 P4D 11557f0067 PUD 0
       Oops: 0002 [#1] PREEMPT SMP
       CPU: 0 PID: 73 Comm: kworker/0:1 Not tainted 6.1.0-rc3 #5
       Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-2 04/01/2014
       Workqueue: kdelayd flush_expired_bios [dm_delay]
       RIP: 0010:mempool_free+0x47/0x80
       Code: 48 89 ef 5b 5d ff e0 f3 c3 48 89 f7 e8 32 45 3f 00 48 63 53 08 48 89 c6 3b 53 04 7d 2d 48 8b 43 10 8d 4a 01 48 89 df 89 4b 08 <48> 89 2c d0 e8 b0 45 3f 00 48 8d 7b 30 5b 5d 31 c9 ba 01 00 00 00
       RSP: 0018:ffff88910036bda8 EFLAGS: 00010093
       RAX: 0000000000000000 RBX: ffff8891037b65d8 RCX: 0000000000000001
       RDX: 0000000000000000 RSI: 0000000000000202 RDI: ffff8891037b65d8
       RBP: ffff8891447ba240 R08: 0000000000012908 R09: 00000000003d0900
       R10: 0000000000000000 R11: 0000000000173544 R12: ffff889101a14000
       R13: ffff8891562ac300 R14: ffff889102b41440 R15: ffffe8ffffa00d05
       FS:  0000000000000000(0000) GS:ffff88942fa00000(0000) knlGS:0000000000000000
       CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       CR2: 0000000000000000 CR3: 0000001102e99000 CR4: 00000000000006b0
       Call Trace:
        <TASK>
        clone_endio+0xf4/0x1c0 [dm_mod]
        clone_endio+0xf4/0x1c0 [dm_mod]
        __submit_bio+0x76/0x120
        submit_bio_noacct_nocheck+0xb6/0x2a0
        flush_expired_bios+0x28/0x2f [dm_delay]
        process_one_work+0x1b4/0x300
        worker_thread+0x45/0x3e0
        ? rescuer_thread+0x380/0x380
        kthread+0xc2/0x100
        ? kthread_complete_and_exit+0x20/0x20
        ret_from_fork+0x1f/0x30
        </TASK>
       Modules linked in: brd dm_delay dm_raid dm_mod af_packet uvesafb cfbfillrect cfbimgblt cn cfbcopyarea fb font fbdev tun autofs4 binfmt_misc configfs ipv6 virtio_rng virtio_balloon rng_core virtio_net pcspkr net_failover failover qemu_fw_cfg button mousedev raid10 raid456 libcrc32c async_raid6_recov async_memcpy async_pq raid6_pq async_xor xor async_tx raid1 raid0 md_mod sd_mod t10_pi crc64_rocksoft crc64 virtio_scsi scsi_mod evdev psmouse bsg scsi_common [last unloaded: brd]
       CR2: 0000000000000000
       ---[ end trace 0000000000000000 ]---
      Signed-off-by: NMikulas Patocka <mpatocka@redhat.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: NSong Liu <song@kernel.org>
      341097ee
    • Y
      md: introduce md_ro_state · f97a5528
      Ye Bin 提交于
      Introduce md_ro_state for mddev->ro, so it is easy to understand.
      Signed-off-by: NYe Bin <yebin10@huawei.com>
      Signed-off-by: NSong Liu <song@kernel.org>
      f97a5528
    • Y
      md: factor out __md_set_array_info() · 2f6d261e
      Ye Bin 提交于
      Factor out __md_set_array_info(). No functional change.
      Signed-off-by: NYe Bin <yebin10@huawei.com>
      Signed-off-by: NSong Liu <song@kernel.org>
      2f6d261e
  5. 27 9月, 2022 1 次提交
  6. 22 9月, 2022 1 次提交
  7. 25 8月, 2022 3 次提交
  8. 03 8月, 2022 21 次提交
  9. 15 7月, 2022 2 次提交
  10. 28 6月, 2022 1 次提交
  11. 16 6月, 2022 1 次提交
  12. 23 5月, 2022 2 次提交