jdike
77d59a6d63
lockdep false positive - move txg_kick() outside of ->dp_lock
...
This fixes a lockdep warning by breaking a link between ->tx_sync_lock
and ->dp_lock.
The deadlock envisioned by lockdep is this:
thread 1 holds db->db_mtx and tries to get dp->dp_lock:
dsl_pool_dirty_space+0x70/0x2d0 [zfs]
dbuf_dirty+0x778/0x31d0 [zfs]
thread 2 holds bpo->bpo_lock and tries to get db->db_mtx:
dmu_buf_will_dirty_impl
dmu_buf_will_dirty+0x6b/0x6c0 [zfs]
bpobj_iterate_impl+0xbe6/0x1410 [zfs]
thread 3 holds tx->tx_sync_lock and tries to get bpo->bpo_lock:
bpobj_space+0x63/0x470 [zfs]
dsl_scan_active+0x340/0x3d0 [zfs]
txg_sync_thread+0x3f2/0x1370 [zfs]
thread 4 holds dp->dp_lock and tries to get tx->tx_sync_lock
txg_kick+0x61/0x420 [zfs]
dsl_pool_need_dirty_delay+0x1c7/0x3f0 [zfs]
This patch is orginally from Brian Behlendorf and slightly simplified
by me.
It breaks this cycle in thread 4 by moving the call from
dsl_pool_need_dirty_delay to txg_kick outside the section controlled
by dp->dp_lock.
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov >
Reviewed-by: Matt Ahrens <mahrens@delphix.com >
Signed-off-by: Jeff Dike <jdike@akamai.com >
Closes #9094
2020-01-22 13:48:57 -08:00
..
2020-01-22 13:48:56 -08:00
2018-10-19 12:08:03 -07:00
2020-01-22 13:48:56 -08:00
2017-11-04 13:25:13 -07:00
2015-01-16 14:41:26 -08:00
2019-03-06 09:50:55 -08:00
2017-08-14 10:36:48 -07:00
2019-06-07 12:45:40 -07:00
2018-06-06 09:35:59 -07:00
2019-02-12 10:41:15 -08:00
2018-10-01 10:42:05 -07:00
2019-09-25 11:27:49 -07:00
2019-09-25 11:27:47 -07:00
2019-01-17 15:25:00 -08:00
2018-05-01 11:24:20 -07:00
2019-05-07 15:18:44 -07:00
2019-09-25 11:27:48 -07:00
2019-09-25 11:27:51 -07:00
2019-05-07 15:18:44 -07:00
2018-08-15 09:53:44 -07:00
2019-09-25 11:27:50 -07:00
2019-05-23 13:46:33 -07:00
2019-09-25 11:27:47 -07:00
2019-06-07 12:45:40 -07:00
2019-09-25 11:27:51 -07:00
2019-03-13 11:00:43 -07:00
2019-09-25 11:27:49 -07:00
2019-03-21 10:36:58 -07:00
2018-04-14 12:16:17 -07:00
2018-05-29 16:00:33 -07:00
2019-09-25 11:27:49 -07:00
2019-04-12 11:30:59 -07:00
2020-01-22 13:48:57 -08:00
2018-05-29 16:00:33 -07:00
2019-09-25 11:27:51 -07:00
2020-01-22 13:48:56 -08:00
2019-02-15 12:41:38 -08:00
2016-11-29 14:34:27 -08:00
2018-07-30 11:30:03 -07:00
2018-05-29 16:00:33 -07:00
2017-10-11 16:54:48 -04:00
2019-05-02 16:46:04 -07:00
2015-01-16 14:41:26 -08:00
2019-03-29 09:13:20 -07:00
2020-01-22 13:48:57 -08:00
2019-03-21 12:47:57 -07:00
2019-09-25 11:27:48 -07:00
2019-09-25 11:27:49 -07:00
2019-09-25 11:27:50 -07:00
2019-09-25 11:27:51 -07:00
2019-09-25 11:27:51 -07:00
2019-09-25 11:27:51 -07:00
2019-09-25 11:27:51 -07:00
2019-04-04 18:57:06 -07:00
2018-10-09 10:05:48 -07:00
2018-10-01 10:42:05 -07:00
2019-09-25 11:27:50 -07:00
2018-03-15 10:53:58 -07:00
2016-11-29 14:34:27 -08:00
2010-08-31 13:41:58 -07:00
2019-02-12 10:38:11 -08:00
2019-09-25 11:27:51 -07:00
2018-05-29 16:00:33 -07:00
2018-10-08 21:57:02 -07:00
2019-09-25 11:27:51 -07:00
2019-04-04 18:57:06 -07:00
2019-09-25 11:27:51 -07:00
2019-04-04 18:57:06 -07:00
2018-04-14 12:16:17 -07:00
2018-06-06 09:35:59 -07:00
2018-06-06 09:35:59 -07:00
2018-04-14 12:16:17 -07:00
2020-01-22 13:48:56 -08:00
2019-03-21 12:47:57 -07:00
2016-08-31 14:35:34 -07:00
2018-05-29 16:00:33 -07:00
2019-09-25 11:27:51 -07:00
2019-09-25 11:27:48 -07:00
2019-09-25 11:27:49 -07:00
2019-02-12 10:38:11 -08:00
2019-09-25 11:27:48 -07:00
2019-03-29 09:13:20 -07:00
2019-09-25 11:27:47 -07:00
2019-09-25 11:27:48 -07:00
2019-09-25 11:27:48 -07:00
2019-09-25 11:27:47 -07:00
2019-05-08 10:18:40 -07:00
2017-01-22 13:25:40 -08:00
2016-11-29 14:34:33 -08:00
2019-05-08 10:18:40 -07:00
2019-05-08 10:18:40 -07:00
2016-12-12 10:46:26 -08:00
2017-01-22 13:25:40 -08:00
2019-09-25 11:27:50 -07:00
2016-11-29 14:34:33 -08:00
2019-05-08 10:18:40 -07:00
2019-09-25 11:27:47 -07:00
2019-09-25 11:27:48 -07:00
2019-09-25 11:27:47 -07:00
2019-09-25 11:27:48 -07:00
2019-03-29 09:13:20 -07:00
2019-09-25 11:27:47 -07:00
2019-01-18 09:58:46 -08:00
2019-09-25 11:27:47 -07:00
2019-09-25 11:27:47 -07:00
2019-09-25 11:27:49 -07:00
2018-02-08 15:29:24 -08:00
2018-07-12 10:49:27 -07:00
2018-06-26 10:07:42 -07:00
2020-01-22 13:48:56 -08:00
2019-04-16 10:01:51 -07:00
2018-05-29 16:00:33 -07:00
2018-05-29 16:00:33 -07:00
2019-09-25 11:27:49 -07:00
2019-04-04 18:57:06 -07:00
2019-02-12 10:41:15 -08:00
2018-11-08 16:47:24 -08:00
2018-05-29 16:00:33 -07:00
2019-09-25 11:27:50 -07:00
2020-01-22 13:48:56 -08:00
2018-05-29 16:00:33 -07:00
2018-03-04 17:34:51 -08:00
2019-09-25 11:27:51 -07:00
2018-10-11 10:19:33 -07:00
2018-02-13 14:54:54 -08:00
2019-09-25 11:27:48 -07:00
2019-09-25 11:27:50 -07:00
2019-09-25 11:27:50 -07:00
2019-09-25 11:27:50 -07:00
2020-01-22 13:48:56 -08:00
2017-11-04 13:25:13 -07:00
2018-08-29 11:33:33 -07:00
2019-04-10 15:39:40 -07:00
2019-03-15 14:14:31 -07:00
2020-01-22 13:48:56 -08:00
2018-02-09 10:08:05 -08:00
2018-05-02 15:01:24 -07:00
2016-12-12 10:46:26 -08:00
2019-05-08 10:04:04 -07:00
2019-05-08 10:04:04 -07:00
2018-09-24 17:11:25 -07:00
2019-09-25 11:27:49 -07:00
2018-05-29 16:00:33 -07:00
2019-04-04 09:44:46 -07:00
2020-01-22 13:48:56 -08:00