usr/src/uts/common/fs/zfs/dsl_dir.c
changeset 14031 e4eb37f33d60
parent 13980 d7059eb1884c
child 14160 85f7bb2246ca
equal deleted inserted replaced
14030:99b3fd6e18da 14031:e4eb37f33d60
    19  * CDDL HEADER END
    19  * CDDL HEADER END
    20  */
    20  */
    21 /*
    21 /*
    22  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
    22  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
    23  * Copyright (c) 2013 by Delphix. All rights reserved.
    23  * Copyright (c) 2013 by Delphix. All rights reserved.
       
    24  * Copyright (c) 2013 Martin Matuska. All rights reserved.
    24  */
    25  */
    25 
    26 
    26 #include <sys/dmu.h>
    27 #include <sys/dmu.h>
    27 #include <sys/dmu_objset.h>
    28 #include <sys/dmu_objset.h>
    28 #include <sys/dmu_tx.h>
    29 #include <sys/dmu_tx.h>
   965 	dsl_dataset_t *ds;
   966 	dsl_dataset_t *ds;
   966 	uint64_t newval;
   967 	uint64_t newval;
   967 
   968 
   968 	VERIFY0(dsl_dataset_hold(dp, ddsqra->ddsqra_name, FTAG, &ds));
   969 	VERIFY0(dsl_dataset_hold(dp, ddsqra->ddsqra_name, FTAG, &ds));
   969 
   970 
   970 	dsl_prop_set_sync_impl(ds, zfs_prop_to_name(ZFS_PROP_QUOTA),
   971 	if (spa_version(dp->dp_spa) >= SPA_VERSION_RECVD_PROPS) {
   971 	    ddsqra->ddsqra_source, sizeof (ddsqra->ddsqra_value), 1,
   972 		dsl_prop_set_sync_impl(ds, zfs_prop_to_name(ZFS_PROP_QUOTA),
   972 	    &ddsqra->ddsqra_value, tx);
   973 		    ddsqra->ddsqra_source, sizeof (ddsqra->ddsqra_value), 1,
   973 
   974 		    &ddsqra->ddsqra_value, tx);
   974 	VERIFY0(dsl_prop_get_int_ds(ds,
   975 
   975 	    zfs_prop_to_name(ZFS_PROP_QUOTA), &newval));
   976 		VERIFY0(dsl_prop_get_int_ds(ds,
       
   977 		    zfs_prop_to_name(ZFS_PROP_QUOTA), &newval));
       
   978 	} else {
       
   979 		newval = ddsqra->ddsqra_value;
       
   980 		spa_history_log_internal_ds(ds, "set", tx, "%s=%lld",
       
   981 		    zfs_prop_to_name(ZFS_PROP_QUOTA), (longlong_t)newval);
       
   982 	}
   976 
   983 
   977 	dmu_buf_will_dirty(ds->ds_dir->dd_dbuf, tx);
   984 	dmu_buf_will_dirty(ds->ds_dir->dd_dbuf, tx);
   978 	mutex_enter(&ds->ds_dir->dd_lock);
   985 	mutex_enter(&ds->ds_dir->dd_lock);
   979 	ds->ds_dir->dd_phys->dd_quota = newval;
   986 	ds->ds_dir->dd_phys->dd_quota = newval;
   980 	mutex_exit(&ds->ds_dir->dd_lock);
   987 	mutex_exit(&ds->ds_dir->dd_lock);
  1081 	dsl_dataset_t *ds;
  1088 	dsl_dataset_t *ds;
  1082 	uint64_t newval;
  1089 	uint64_t newval;
  1083 
  1090 
  1084 	VERIFY0(dsl_dataset_hold(dp, ddsqra->ddsqra_name, FTAG, &ds));
  1091 	VERIFY0(dsl_dataset_hold(dp, ddsqra->ddsqra_name, FTAG, &ds));
  1085 
  1092 
  1086 	dsl_prop_set_sync_impl(ds, zfs_prop_to_name(ZFS_PROP_RESERVATION),
  1093 	if (spa_version(dp->dp_spa) >= SPA_VERSION_RECVD_PROPS) {
  1087 	    ddsqra->ddsqra_source, sizeof (ddsqra->ddsqra_value), 1,
  1094 		dsl_prop_set_sync_impl(ds,
  1088 	    &ddsqra->ddsqra_value, tx);
  1095 		    zfs_prop_to_name(ZFS_PROP_RESERVATION),
  1089 
  1096 		    ddsqra->ddsqra_source, sizeof (ddsqra->ddsqra_value), 1,
  1090 	VERIFY0(dsl_prop_get_int_ds(ds,
  1097 		    &ddsqra->ddsqra_value, tx);
  1091 	    zfs_prop_to_name(ZFS_PROP_RESERVATION), &newval));
  1098 
       
  1099 		VERIFY0(dsl_prop_get_int_ds(ds,
       
  1100 		    zfs_prop_to_name(ZFS_PROP_RESERVATION), &newval));
       
  1101 	} else {
       
  1102 		newval = ddsqra->ddsqra_value;
       
  1103 		spa_history_log_internal_ds(ds, "set", tx, "%s=%lld",
       
  1104 		    zfs_prop_to_name(ZFS_PROP_RESERVATION),
       
  1105 		    (longlong_t)newval);
       
  1106 	}
  1092 
  1107 
  1093 	dsl_dir_set_reservation_sync_impl(ds->ds_dir, newval, tx);
  1108 	dsl_dir_set_reservation_sync_impl(ds->ds_dir, newval, tx);
  1094 	dsl_dataset_rele(ds, FTAG);
  1109 	dsl_dataset_rele(ds, FTAG);
  1095 }
  1110 }
  1096 
  1111