Need a long hold in zpl_mount_impl
In zpl_mount_impl, there is: dmu_objset_hold ; returns with pool & ds held dsl_pool_rele sget dsl_dataset_rele As spelled out in the "DSL Pool Configuration Lock" in dsl_pool.c, this requires a long hold. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Paul Zuchowski <pzuchowski@datto.com> Signed-off-by: John Poduska <jpoduska@datto.com> Closes #10936
This commit is contained in:
parent
3902eaf9ed
commit
aa7817c151
|
@ -274,8 +274,12 @@ zpl_mount_impl(struct file_system_type *fs_type, int flags, zfs_mnt_t *zm)
|
||||||
* a txg sync. If the dsl_pool lock is held over sget()
|
* a txg sync. If the dsl_pool lock is held over sget()
|
||||||
* this can prevent the pool sync and cause a deadlock.
|
* this can prevent the pool sync and cause a deadlock.
|
||||||
*/
|
*/
|
||||||
|
dsl_dataset_long_hold(dmu_objset_ds(os), FTAG);
|
||||||
dsl_pool_rele(dmu_objset_pool(os), FTAG);
|
dsl_pool_rele(dmu_objset_pool(os), FTAG);
|
||||||
|
|
||||||
s = sget(fs_type, zpl_test_super, set_anon_super, flags, os);
|
s = sget(fs_type, zpl_test_super, set_anon_super, flags, os);
|
||||||
|
|
||||||
|
dsl_dataset_long_rele(dmu_objset_ds(os), FTAG);
|
||||||
dsl_dataset_rele(dmu_objset_ds(os), FTAG);
|
dsl_dataset_rele(dmu_objset_ds(os), FTAG);
|
||||||
|
|
||||||
if (IS_ERR(s))
|
if (IS_ERR(s))
|
||||||
|
|
Loading…
Reference in New Issue