return 0;
 }
 
+/* initialize private fields of damos_quota and return the pointer */
+static struct damos_quota *damos_quota_init_priv(struct damos_quota *quota)
+{
+       quota->total_charged_sz = 0;
+       quota->total_charged_ns = 0;
+       quota->esz = 0;
+       quota->charged_sz = 0;
+       quota->charged_from = 0;
+       quota->charge_target_from = NULL;
+       quota->charge_addr_from = 0;
+       return quota;
+}
+
 struct damos *damon_new_scheme(struct damos_access_pattern *pattern,
                        enum damos_action action, struct damos_quota *quota,
                        struct damos_watermarks *wmarks)
        scheme->stat = (struct damos_stat){};
        INIT_LIST_HEAD(&scheme->list);
 
-       scheme->quota = *quota;
-       /* caller might not zero-initialized the private fileds */
-       scheme->quota.total_charged_sz = 0;
-       scheme->quota.total_charged_ns = 0;
-       scheme->quota.esz = 0;
-       scheme->quota.charged_sz = 0;
-       scheme->quota.charged_from = 0;
-       scheme->quota.charge_target_from = NULL;
-       scheme->quota.charge_addr_from = 0;
+       scheme->quota = *(damos_quota_init_priv(quota));
 
        scheme->wmarks = *wmarks;
        scheme->wmarks.activated = true;