17 * information: Portions Copyright [yyyy] [name of copyright owner] |
17 * information: Portions Copyright [yyyy] [name of copyright owner] |
18 * |
18 * |
19 * CDDL HEADER END |
19 * CDDL HEADER END |
20 */ |
20 */ |
21 /* |
21 /* |
22 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. |
22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. |
23 * Use is subject to license terms. |
23 * Use is subject to license terms. |
24 */ |
24 */ |
25 |
25 |
26 #pragma ident "%Z%%M% %I% %E% SMI" |
26 #pragma ident "%Z%%M% %I% %E% SMI" |
27 |
27 |
278 { |
278 { |
279 dsl_dir_t *dd; |
279 dsl_dir_t *dd; |
280 dsl_prop_cb_record_t *cbr; |
280 dsl_prop_cb_record_t *cbr; |
281 objset_t *mos = dp->dp_meta_objset; |
281 objset_t *mos = dp->dp_meta_objset; |
282 zap_cursor_t zc; |
282 zap_cursor_t zc; |
283 zap_attribute_t za; |
283 zap_attribute_t *za; |
284 int err; |
284 int err; |
285 |
285 |
286 ASSERT(RW_WRITE_HELD(&dp->dp_config_rwlock)); |
286 ASSERT(RW_WRITE_HELD(&dp->dp_config_rwlock)); |
287 err = dsl_dir_open_obj(dp, ddobj, NULL, FTAG, &dd); |
287 err = dsl_dir_open_obj(dp, ddobj, NULL, FTAG, &dd); |
288 if (err) |
288 if (err) |
309 cbr->cbr_func(cbr->cbr_arg, value); |
309 cbr->cbr_func(cbr->cbr_arg, value); |
310 } |
310 } |
311 } |
311 } |
312 mutex_exit(&dd->dd_lock); |
312 mutex_exit(&dd->dd_lock); |
313 |
313 |
|
314 za = kmem_alloc(sizeof (zap_attribute_t), KM_SLEEP); |
314 for (zap_cursor_init(&zc, mos, |
315 for (zap_cursor_init(&zc, mos, |
315 dd->dd_phys->dd_child_dir_zapobj); |
316 dd->dd_phys->dd_child_dir_zapobj); |
316 zap_cursor_retrieve(&zc, &za) == 0; |
317 zap_cursor_retrieve(&zc, za) == 0; |
317 zap_cursor_advance(&zc)) { |
318 zap_cursor_advance(&zc)) { |
318 /* XXX recursion could blow stack; esp. za! */ |
319 dsl_prop_changed_notify(dp, za->za_first_integer, |
319 dsl_prop_changed_notify(dp, za.za_first_integer, |
|
320 propname, value, FALSE); |
320 propname, value, FALSE); |
321 } |
321 } |
|
322 kmem_free(za, sizeof (zap_attribute_t)); |
322 zap_cursor_fini(&zc); |
323 zap_cursor_fini(&zc); |
323 dsl_dir_close(dd, FTAG); |
324 dsl_dir_close(dd, FTAG); |
324 } |
325 } |
325 |
326 |
326 struct prop_set_arg { |
327 struct prop_set_arg { |