equal
deleted
inserted
replaced
68 offsetof(dsl_dataset_t, ds_dirty_link)); |
68 offsetof(dsl_dataset_t, ds_dirty_link)); |
69 txg_list_create(&dp->dp_dirty_dirs, |
69 txg_list_create(&dp->dp_dirty_dirs, |
70 offsetof(dsl_dir_t, dd_dirty_link)); |
70 offsetof(dsl_dir_t, dd_dirty_link)); |
71 txg_list_create(&dp->dp_sync_tasks, |
71 txg_list_create(&dp->dp_sync_tasks, |
72 offsetof(dsl_sync_task_group_t, dstg_node)); |
72 offsetof(dsl_sync_task_group_t, dstg_node)); |
73 list_create(&dp->dp_synced_objsets, sizeof (dsl_dataset_t), |
73 list_create(&dp->dp_synced_datasets, sizeof (dsl_dataset_t), |
74 offsetof(dsl_dataset_t, ds_synced_link)); |
74 offsetof(dsl_dataset_t, ds_synced_link)); |
75 |
75 |
76 return (dp); |
76 return (dp); |
77 } |
77 } |
78 |
78 |
127 if (dp->dp_meta_objset) |
127 if (dp->dp_meta_objset) |
128 dmu_objset_evict(NULL, dp->dp_meta_objset->os); |
128 dmu_objset_evict(NULL, dp->dp_meta_objset->os); |
129 |
129 |
130 txg_list_destroy(&dp->dp_dirty_datasets); |
130 txg_list_destroy(&dp->dp_dirty_datasets); |
131 txg_list_destroy(&dp->dp_dirty_dirs); |
131 txg_list_destroy(&dp->dp_dirty_dirs); |
132 list_destroy(&dp->dp_synced_objsets); |
132 list_destroy(&dp->dp_synced_datasets); |
133 |
133 |
134 arc_flush(); |
134 arc_flush(); |
135 txg_fini(dp); |
135 txg_fini(dp); |
136 rw_destroy(&dp->dp_config_rwlock); |
136 rw_destroy(&dp->dp_config_rwlock); |
137 kmem_free(dp, sizeof (dsl_pool_t)); |
137 kmem_free(dp, sizeof (dsl_pool_t)); |
179 tx = dmu_tx_create_assigned(dp, txg); |
179 tx = dmu_tx_create_assigned(dp, txg); |
180 |
180 |
181 zio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); |
181 zio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); |
182 while (ds = txg_list_remove(&dp->dp_dirty_datasets, txg)) { |
182 while (ds = txg_list_remove(&dp->dp_dirty_datasets, txg)) { |
183 if (!list_link_active(&ds->ds_synced_link)) |
183 if (!list_link_active(&ds->ds_synced_link)) |
184 list_insert_tail(&dp->dp_synced_objsets, ds); |
184 list_insert_tail(&dp->dp_synced_datasets, ds); |
185 else |
185 else |
186 dmu_buf_rele(ds->ds_dbuf, ds); |
186 dmu_buf_rele(ds->ds_dbuf, ds); |
187 dsl_dataset_sync(ds, zio, tx); |
187 dsl_dataset_sync(ds, zio, tx); |
188 } |
188 } |
189 err = zio_wait(zio); |
189 err = zio_wait(zio); |
210 void |
210 void |
211 dsl_pool_zil_clean(dsl_pool_t *dp) |
211 dsl_pool_zil_clean(dsl_pool_t *dp) |
212 { |
212 { |
213 dsl_dataset_t *ds; |
213 dsl_dataset_t *ds; |
214 |
214 |
215 while (ds = list_head(&dp->dp_synced_objsets)) { |
215 while (ds = list_head(&dp->dp_synced_datasets)) { |
216 list_remove(&dp->dp_synced_objsets, ds); |
216 list_remove(&dp->dp_synced_datasets, ds); |
217 ASSERT(ds->ds_user_ptr != NULL); |
217 ASSERT(ds->ds_user_ptr != NULL); |
218 zil_clean(((objset_impl_t *)ds->ds_user_ptr)->os_zil); |
218 zil_clean(((objset_impl_t *)ds->ds_user_ptr)->os_zil); |
219 dmu_buf_rele(ds->ds_dbuf, ds); |
219 dmu_buf_rele(ds->ds_dbuf, ds); |
220 } |
220 } |
221 } |
221 } |