weixin_39718006 2020-11-22 02:52
浏览 0

zpool create and zpool destroy can deadlock

Tester died once with these stacks;

zpool create


      1001  zpool_do_create + 2111 (zpool + 22062) [0x10c28d62e]
        1001  zpool_create + 536 (libzfs.2.dylib + 79574) [0x10c5de6d6]
          1001  zfs_ioctl + 55 (libzfs.2.dylib + 142290) [0x10c5edbd2]
            1001  __ioctl + 10 (libsystem_kernel.dylib + 103918) [0x7fff9d1345ee
]
             *1001  hndl_unix_scall64 + 22 (kernel + 638358) [0xffffff800029bd96
]
               *1001  unix_syscall64 + 597 (kernel + 6442325) [0xffffff8000824d5
5]
                 *1001  ioctl + 1411 (kernel + 5886867) [0xffffff800079d393]
                   *1001  fo_ioctl + 123 (kernel + 5580955) [0xffffff800075289b]
                     *1001  ??? (kernel + 3389156) [0xffffff800053b6e4]
                       *1001  VNOP_IOCTL + 366 (kernel + 3448670) [0xffffff80005
49f5e]
                         *1001  spec_ioctl + 163 (kernel + 3492531) [0xffffff800
0554ab3]
                           *1001  zfsdev_ioctl + 1586 (zfs_ioctl.c:6111,11 in zf
s + 970626) [0xffffff7f83567f82]
                             *1001  zfs_ioc_pool_create + 547 (zfs_ioctl.c:1413,
10 in zfs + 944659) [0xffffff7f83561a13]
                               *1001  spa_create + 111 (spa.c:3803,2 in zfs + 57
5807) [0xffffff7f8350793f]
                                 *1001  spl_mutex_enter + 46 (spl-mutex.c:298,5
in spl + 47814) [0xffffff7f82290ac6]
                                   *1001  lck_mtx_lock + 653 (kernel + 622269) [
0xffffff8000297ebd]
zpool destroy


      1001  zpool_do_destroy + 310 (zpool + 22694) [0x10c41e8a6]
        1001  zpool_destroy + 160 (libzfs.2.dylib + 80067) [0x10c7698c3]
          1001  zfs_ioctl + 55 (libzfs.2.dylib + 142290) [0x10c778bd2]
            1001  __ioctl + 10 (libsystem_kernel.dylib + 103918) [0x7fff9d1345ee]
             *1001  hndl_unix_scall64 + 22 (kernel + 638358) [0xffffff800029bd96]
               *1001  unix_syscall64 + 597 (kernel + 6442325) [0xffffff8000824d55]
                 *1001  ioctl + 1411 (kernel + 5886867) [0xffffff800079d393]
                   *1001  fo_ioctl + 123 (kernel + 5580955) [0xffffff800075289b]
                     *1001  ??? (kernel + 3389156) [0xffffff800053b6e4]
                       *1001  VNOP_IOCTL + 366 (kernel + 3448670) [0xffffff8000549f5e]
                         *1001  spec_ioctl + 163 (kernel + 3492531) [0xffffff8000554ab3]
                           *1001  zfsdev_ioctl + 1586 (zfs_ioctl.c:6111,11 in zfs + 970626) [0xffffff7f83567f82]
                             *1001  zfs_ioc_pool_destroy + 30 (zfs_ioctl.c:1436,10 in zfs + 948238) [0xffffff7f8356280e]
                               *1001  spa_destroy + 37 (spa.c:4711,10 in zfs + 589269) [0xffffff7f8350add5]
                                 *1001  spa_export_common + 335 (spa.c:4633,3 in zfs + 589615) [0xffffff7f8350af2f]
                                   *1001  txg_wait_synced + 307 (txg.c:693,3 in zfs + 676003) [0xffffff7f835200a3]
                                     *1001  spl_cv_wait + 51 (spl-condvar.c:74,12 in spl + 6767) [0xffffff7f82286a6f]

It would seem zpool destroy waits for the final txg_sync while holding spa_namespace_lock.

and zpool create wants spa_namespace_lock pretty much right away, so what is syncing waiting for?

该提问来源于开源项目:openzfsonosx/zfs

  • 写回答

11条回答 默认 最新

  • weixin_39718006 2020-11-22 02:52
    关注

    Syncing thread

    txg_sync

    
       *1001  txg_sync_thread + 1044 (txg.c:567,3 in zfs + 675140) [0xffffff7f8351fd44]
         *1001  spa_sync + 1357 (spa.c:6892,3 in zfs + 605149) [0xffffff7f8350ebdd]
           *1001  dsl_pool_sync + 977 (dsl_pool.c:596,4 in zfs + 377825) [0xffffff7f834d73e1]
             *1001  dsl_sync_task_sync + 315 (dsl_synctask.c:182,3 in zfs + 420731) [0xffffff7f834e1b7b]
               *1001  spa_history_log_sync + 892 (spa_history.c:262,8 in zfs + 637884) [0xffffff7f83516bbc]
                 *1001  spa_history_write + 263 (spa_history.c:169,2 in zfs + 640823) [0xffffff7f83517737]
                   *1001  dmu_write + 245 (dmu.c:1002,2 in zfs + 137733) [0xffffff7f8349ca05]
                     *1001  dmu_write_impl + 190 (dmu.c:977,4 in zfs + 137950) [0xffffff7f8349cade]
                       *1001  dmu_buf_will_dirty + 296 (dbuf.c:1918,9 in zfs + 89400) [0xffffff7f83490d38]
                         *1001  dbuf_read + 871 (dbuf.c:1207,10 in zfs + 83639) [0xffffff7f8348f6b7]
                           *1001  zio_wait + 726 (zio.c:1745,3 in zfs + 1224902) [0xffffff7f835a60c6]
                             *1001  spl_cv_wait + 51 (spl-condvar.c:74,12 in spl + 6767) [0xffffff7f82286a6f]
    

    wmsg="zio->io_cv"

    评论

报告相同问题?