usr/src/uts/common/fs/zfs/dsl_prop.c
changeset 6047 235fee4665e7
parent 5569 d3caac36d311
child 6689 47572a2f5e73
equal deleted inserted replaced
6046:d0233eaf883a 6047:235fee4665e7
    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 {