Print this page
5056 ZFS deadlock on db_mtx and dn_holds
Reviewed by: Will Andrews <willa@spectralogic.com>
Reviewed by: Matt Ahrens <mahrens@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Approved by: Dan McDonald <danmcd@omniti.com>


 116 
 117 int sa_handle_get(objset_t *, uint64_t, void *userp,
 118     sa_handle_type_t, sa_handle_t **);
 119 int sa_handle_get_from_db(objset_t *, dmu_buf_t *, void *userp,
 120     sa_handle_type_t, sa_handle_t **);
 121 void sa_handle_destroy(sa_handle_t *);
 122 int sa_buf_hold(objset_t *, uint64_t, void *, dmu_buf_t **);
 123 void sa_buf_rele(dmu_buf_t *, void *);
 124 int sa_lookup(sa_handle_t *, sa_attr_type_t, void *buf, uint32_t buflen);
 125 int sa_update(sa_handle_t *, sa_attr_type_t, void *buf,
 126     uint32_t buflen, dmu_tx_t *);
 127 int sa_remove(sa_handle_t *, sa_attr_type_t, dmu_tx_t *);
 128 int sa_bulk_lookup(sa_handle_t *, sa_bulk_attr_t *, int count);
 129 int sa_bulk_lookup_locked(sa_handle_t *, sa_bulk_attr_t *, int count);
 130 int sa_bulk_update(sa_handle_t *, sa_bulk_attr_t *, int count, dmu_tx_t *);
 131 int sa_size(sa_handle_t *, sa_attr_type_t, int *);
 132 int sa_update_from_cb(sa_handle_t *, sa_attr_type_t,
 133     uint32_t buflen, sa_data_locator_t *, void *userdata, dmu_tx_t *);
 134 void sa_object_info(sa_handle_t *, dmu_object_info_t *);
 135 void sa_object_size(sa_handle_t *, uint32_t *, u_longlong_t *);
 136 void sa_update_user(sa_handle_t *, sa_handle_t *);
 137 void *sa_get_userdata(sa_handle_t *);
 138 void sa_set_userp(sa_handle_t *, void *);
 139 dmu_buf_t *sa_get_db(sa_handle_t *);
 140 uint64_t sa_handle_object(sa_handle_t *);
 141 boolean_t sa_attr_would_spill(sa_handle_t *, sa_attr_type_t, int size);
 142 void sa_register_update_callback(objset_t *, sa_update_cb_t *);
 143 int sa_setup(objset_t *, uint64_t, sa_attr_reg_t *, int, sa_attr_type_t **);
 144 void sa_tear_down(objset_t *);
 145 int sa_replace_all_by_template(sa_handle_t *, sa_bulk_attr_t *,
 146     int, dmu_tx_t *);
 147 int sa_replace_all_by_template_locked(sa_handle_t *, sa_bulk_attr_t *,
 148     int, dmu_tx_t *);
 149 boolean_t sa_enabled(objset_t *);
 150 void sa_cache_init();
 151 void sa_cache_fini();
 152 int sa_set_sa_object(objset_t *, uint64_t);
 153 int sa_hdrsize(void *);
 154 void sa_handle_lock(sa_handle_t *);
 155 void sa_handle_unlock(sa_handle_t *);
 156 


 116 
 117 int sa_handle_get(objset_t *, uint64_t, void *userp,
 118     sa_handle_type_t, sa_handle_t **);
 119 int sa_handle_get_from_db(objset_t *, dmu_buf_t *, void *userp,
 120     sa_handle_type_t, sa_handle_t **);
 121 void sa_handle_destroy(sa_handle_t *);
 122 int sa_buf_hold(objset_t *, uint64_t, void *, dmu_buf_t **);
 123 void sa_buf_rele(dmu_buf_t *, void *);
 124 int sa_lookup(sa_handle_t *, sa_attr_type_t, void *buf, uint32_t buflen);
 125 int sa_update(sa_handle_t *, sa_attr_type_t, void *buf,
 126     uint32_t buflen, dmu_tx_t *);
 127 int sa_remove(sa_handle_t *, sa_attr_type_t, dmu_tx_t *);
 128 int sa_bulk_lookup(sa_handle_t *, sa_bulk_attr_t *, int count);
 129 int sa_bulk_lookup_locked(sa_handle_t *, sa_bulk_attr_t *, int count);
 130 int sa_bulk_update(sa_handle_t *, sa_bulk_attr_t *, int count, dmu_tx_t *);
 131 int sa_size(sa_handle_t *, sa_attr_type_t, int *);
 132 int sa_update_from_cb(sa_handle_t *, sa_attr_type_t,
 133     uint32_t buflen, sa_data_locator_t *, void *userdata, dmu_tx_t *);
 134 void sa_object_info(sa_handle_t *, dmu_object_info_t *);
 135 void sa_object_size(sa_handle_t *, uint32_t *, u_longlong_t *);

 136 void *sa_get_userdata(sa_handle_t *);
 137 void sa_set_userp(sa_handle_t *, void *);
 138 dmu_buf_t *sa_get_db(sa_handle_t *);
 139 uint64_t sa_handle_object(sa_handle_t *);
 140 boolean_t sa_attr_would_spill(sa_handle_t *, sa_attr_type_t, int size);
 141 void sa_register_update_callback(objset_t *, sa_update_cb_t *);
 142 int sa_setup(objset_t *, uint64_t, sa_attr_reg_t *, int, sa_attr_type_t **);
 143 void sa_tear_down(objset_t *);
 144 int sa_replace_all_by_template(sa_handle_t *, sa_bulk_attr_t *,
 145     int, dmu_tx_t *);
 146 int sa_replace_all_by_template_locked(sa_handle_t *, sa_bulk_attr_t *,
 147     int, dmu_tx_t *);
 148 boolean_t sa_enabled(objset_t *);
 149 void sa_cache_init();
 150 void sa_cache_fini();
 151 int sa_set_sa_object(objset_t *, uint64_t);
 152 int sa_hdrsize(void *);
 153 void sa_handle_lock(sa_handle_t *);
 154 void sa_handle_unlock(sa_handle_t *);
 155