Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Device removal panics on 32-bit systems #8790

Merged
merged 1 commit into from May 24, 2019

Commits on May 21, 2019

  1. Device removal panics on 32-bit systems

    The issue is caused by an incorrect usage of the sizeof() operator
    in vdev_obsolete_sm_object(): on 64-bit systems this is not an issue
    since both "uint64_t" and "uint64_t*" are 8 bytes in size. However on
    32-bit systems pointers are 4 bytes long which is not supported by
    zap_lookup_impl(). Trying to remove a top-level vdev on a 32-bit system
    will cause the following failure:
    
    VERIFY3(0 == vdev_obsolete_sm_object(vd, &obsolete_sm_object)) failed (0 == 22)
    PANIC at vdev_indirect.c:833:vdev_indirect_sync_obsolete()
    Showing stack for process 1315
    CPU: 6 PID: 1315 Comm: txg_sync Tainted: P           OE   4.4.69+ openzfs#2
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-2.fc27 04/01/2014
     c1abc6e7 0ae10898 00000286 d4ac3bc0 c14397bc da4cd7d8 d4ac3bf0 d4ac3bd0
     d790e7ce d7911cc1 00000523 d4ac3d00 d790e7d7 d7911ce4 da4cd7d8 00000341
     da4ce664 da4cd8c0 da33fa6e 49524556 28335946 3d3d2030 65647620 626f5f76
    Call Trace:
     [<>] dump_stack+0x58/0x7c
     [<>] spl_dumpstack+0x23/0x27 [spl]
     [<>] spl_panic.cold.0+0x5/0x41 [spl]
     [<>] ? dbuf_rele+0x3e/0x90 [zfs]
     [<>] ? zap_lookup_norm+0xbe/0xe0 [zfs]
     [<>] ? zap_lookup+0x57/0x70 [zfs]
     [<>] ? vdev_obsolete_sm_object+0x102/0x12b [zfs]
     [<>] vdev_indirect_sync_obsolete+0x3e1/0x64d [zfs]
     [<>] ? txg_verify+0x1d/0x160 [zfs]
     [<>] ? dmu_tx_create_dd+0x80/0xc0 [zfs]
     [<>] vdev_sync+0xbf/0x550 [zfs]
     [<>] ? mutex_lock+0x10/0x30
     [<>] ? txg_list_remove+0x9f/0x1a0 [zfs]
     [<>] ? zap_contains+0x4d/0x70 [zfs]
     [<>] spa_sync+0x9f1/0x1b10 [zfs]
     ...
     [<>] ? kthread_stop+0x110/0x110
    
    This commit simply corrects the "integer_size" parameter used to lookup
    the vdev's ZAP object.
    
    Signed-off-by: loli10K <ezomori.nozomu@gmail.com>
    loli10K committed May 21, 2019
    Configuration menu
    Copy the full SHA
    d435d11 View commit details
    Browse the repository at this point in the history