return 0 != (flags & DRBD_GENL_F_SET_DEFAULTS);
}
-/* Maybe we should we generate these functions
- * from the drbd_genl.h magic as well?
- * That way we would not "accidentally forget" to add defaults here. */
-
-#define RESET_ARRAY_FIELD(field) do { \
- memset(field, 0, sizeof(field)); \
- field ## _len = 0; \
-} while (0)
-void drbd_set_res_opts_default(struct res_opts *r)
-{
- RESET_ARRAY_FIELD(r->cpu_mask);
- r->on_no_data = DRBD_ON_NO_DATA_DEF;
-}
-
-static void drbd_set_net_conf_defaults(struct net_conf *nc)
-{
- /* Do NOT (re)set those fields marked as GENLA_F_INVARIANT
- * in drbd_genl.h, they can only be change with disconnect/reconnect */
- RESET_ARRAY_FIELD(nc->shared_secret);
-
- RESET_ARRAY_FIELD(nc->cram_hmac_alg);
- RESET_ARRAY_FIELD(nc->integrity_alg);
- RESET_ARRAY_FIELD(nc->verify_alg);
- RESET_ARRAY_FIELD(nc->csums_alg);
-#undef RESET_ARRAY_FIELD
-
- nc->wire_protocol = DRBD_PROTOCOL_DEF;
- nc->try_connect_int = DRBD_CONNECT_INT_DEF;
- nc->timeout = DRBD_TIMEOUT_DEF;
- nc->ping_int = DRBD_PING_INT_DEF;
- nc->ping_timeo = DRBD_PING_TIMEO_DEF;
- nc->sndbuf_size = DRBD_SNDBUF_SIZE_DEF;
- nc->rcvbuf_size = DRBD_RCVBUF_SIZE_DEF;
- nc->ko_count = DRBD_KO_COUNT_DEF;
- nc->max_buffers = DRBD_MAX_BUFFERS_DEF;
- nc->max_epoch_size = DRBD_MAX_EPOCH_SIZE_DEF;
- nc->unplug_watermark = DRBD_UNPLUG_WATERMARK_DEF;
- nc->after_sb_0p = DRBD_AFTER_SB_0P_DEF;
- nc->after_sb_1p = DRBD_AFTER_SB_1P_DEF;
- nc->after_sb_2p = DRBD_AFTER_SB_2P_DEF;
- nc->rr_conflict = DRBD_RR_CONFLICT_DEF;
- nc->on_congestion = DRBD_ON_CONGESTION_DEF;
- nc->cong_fill = DRBD_CONG_FILL_DEF;
- nc->cong_extents = DRBD_CONG_EXTENTS_DEF;
- nc->two_primaries = 0;
- nc->no_cork = 0;
- nc->always_asbp = 0;
- nc->use_rle = 0;
-}
-
-static void drbd_set_disk_conf_defaults(struct disk_conf *dc)
-{
- /* Do NOT (re)set those fields marked as GENLA_F_INVARIANT
- * in drbd_genl.h, they can only be change with detach/reattach */
- dc->on_io_error = DRBD_ON_IO_ERROR_DEF;
- dc->fencing = DRBD_FENCING_DEF;
- dc->resync_rate = DRBD_RATE_DEF;
- dc->resync_after = DRBD_AFTER_DEF;
- dc->al_extents = DRBD_AL_EXTENTS_DEF;
- dc->c_plan_ahead = DRBD_C_PLAN_AHEAD_DEF;
- dc->c_delay_target = DRBD_C_DELAY_TARGET_DEF;
- dc->c_fill_target = DRBD_C_FILL_TARGET_DEF;
- dc->c_max_rate = DRBD_C_MAX_RATE_DEF;
- dc->c_min_rate = DRBD_C_MIN_RATE_DEF;
- dc->no_disk_barrier = 0;
- dc->no_disk_flush = 0;
- dc->no_disk_drain = 0;
- dc->no_md_flush = 0;
-}
-
-
int drbd_adm_disk_opts(struct sk_buff *skb, struct genl_info *info)
{
enum drbd_ret_code retcode;
memcpy(new_disk_conf, &mdev->ldev->dc, sizeof(*new_disk_conf));
if (should_set_defaults(info))
- drbd_set_disk_conf_defaults(new_disk_conf);
+ set_disk_conf_defaults(new_disk_conf);
err = disk_conf_from_attrs_for_change(new_disk_conf, info);
if (err) {
goto fail;
}
- drbd_set_disk_conf_defaults(&nbc->dc);
+ set_disk_conf_defaults(&nbc->dc);
err = disk_conf_from_attrs(&nbc->dc, info);
if (err) {
*new_conf = *old_conf;
if (should_set_defaults(info))
- drbd_set_net_conf_defaults(new_conf);
+ set_net_conf_defaults(new_conf);
err = net_conf_from_attrs_for_change(new_conf, info);
if (err) {
goto fail;
}
- drbd_set_net_conf_defaults(new_conf);
+ set_net_conf_defaults(new_conf);
err = net_conf_from_attrs(new_conf, info);
if (err) {
return 0;
}
+void drbd_set_res_opts_defaults(struct res_opts *r)
+{
+ return set_res_opts_defaults(r);
+}
+
int drbd_adm_resource_opts(struct sk_buff *skb, struct genl_info *info)
{
enum drbd_ret_code retcode;
res_opts = tconn->res_opts;
if (should_set_defaults(info))
- drbd_set_res_opts_default(&res_opts);
+ set_res_opts_defaults(&res_opts);
err = res_opts_from_attrs(&res_opts, info);
if (err) {
* but it won't propagate through the stack */
__u32_field(5, GENLA_F_MANDATORY | GENLA_F_INVARIANT, max_bio_bvecs)
- __u32_field(6, GENLA_F_MANDATORY, on_io_error)
- __u32_field(7, GENLA_F_MANDATORY, fencing)
-
- __u32_field(8, GENLA_F_MANDATORY, resync_rate)
- __u32_field(9, GENLA_F_MANDATORY, resync_after)
- __u32_field(10, GENLA_F_MANDATORY, al_extents)
- __u32_field(11, GENLA_F_MANDATORY, c_plan_ahead)
- __u32_field(12, GENLA_F_MANDATORY, c_delay_target)
- __u32_field(13, GENLA_F_MANDATORY, c_fill_target)
- __u32_field(14, GENLA_F_MANDATORY, c_max_rate)
- __u32_field(15, GENLA_F_MANDATORY, c_min_rate)
-
- __flg_field(16, GENLA_F_MANDATORY, no_disk_barrier)
- __flg_field(17, GENLA_F_MANDATORY, no_disk_flush)
- __flg_field(18, GENLA_F_MANDATORY, no_disk_drain)
- __flg_field(19, GENLA_F_MANDATORY, no_md_flush)
-
+ __u32_field_def(6, GENLA_F_MANDATORY, on_io_error, DRBD_ON_IO_ERROR_DEF)
+ __u32_field_def(7, GENLA_F_MANDATORY, fencing, DRBD_FENCING_DEF)
+
+ __u32_field_def(8, GENLA_F_MANDATORY, resync_rate, DRBD_RATE_DEF)
+ __u32_field_def(9, GENLA_F_MANDATORY, resync_after, DRBD_AFTER_DEF)
+ __u32_field_def(10, GENLA_F_MANDATORY, al_extents, DRBD_AL_EXTENTS_DEF)
+ __u32_field_def(11, GENLA_F_MANDATORY, c_plan_ahead, DRBD_C_PLAN_AHEAD_DEF)
+ __u32_field_def(12, GENLA_F_MANDATORY, c_delay_target, DRBD_C_DELAY_TARGET_DEF)
+ __u32_field_def(13, GENLA_F_MANDATORY, c_fill_target, DRBD_C_FILL_TARGET_DEF)
+ __u32_field_def(14, GENLA_F_MANDATORY, c_max_rate, DRBD_C_MAX_RATE_DEF)
+ __u32_field_def(15, GENLA_F_MANDATORY, c_min_rate, DRBD_C_MIN_RATE_DEF)
+
+ __flg_field_def(16, GENLA_F_MANDATORY, no_disk_barrier, 0)
+ __flg_field_def(17, GENLA_F_MANDATORY, no_disk_flush, 0)
+ __flg_field_def(18, GENLA_F_MANDATORY, no_disk_drain, 0)
+ __flg_field_def(19, GENLA_F_MANDATORY, no_md_flush, 0)
)
GENL_struct(DRBD_NLA_RESOURCE_OPTS, 4, res_opts,
- __str_field(1, GENLA_F_MANDATORY, cpu_mask, 32)
- __u32_field(2, GENLA_F_MANDATORY, on_no_data)
+ __str_field_def(1, GENLA_F_MANDATORY, cpu_mask, 32)
+ __u32_field_def(2, GENLA_F_MANDATORY, on_no_data, DRBD_ON_NO_DATA_DEF)
)
GENL_struct(DRBD_NLA_NET_CONF, 5, net_conf,
__bin_field(1, GENLA_F_REQUIRED | GENLA_F_INVARIANT, my_addr, 128)
__bin_field(2, GENLA_F_REQUIRED | GENLA_F_INVARIANT, peer_addr, 128)
- __str_field(3, GENLA_F_MANDATORY | GENLA_F_SENSITIVE,
+ __str_field_def(3, GENLA_F_MANDATORY | GENLA_F_SENSITIVE,
shared_secret, SHARED_SECRET_MAX)
- __str_field(4, GENLA_F_MANDATORY, cram_hmac_alg, SHARED_SECRET_MAX)
- __str_field(5, GENLA_F_MANDATORY, integrity_alg, SHARED_SECRET_MAX)
- __str_field(6, GENLA_F_MANDATORY, verify_alg, SHARED_SECRET_MAX)
- __str_field(7, GENLA_F_MANDATORY, csums_alg, SHARED_SECRET_MAX)
- __u32_field(8, GENLA_F_MANDATORY, wire_protocol)
- __u32_field(9, GENLA_F_MANDATORY, try_connect_int)
- __u32_field(10, GENLA_F_MANDATORY, timeout)
- __u32_field(11, GENLA_F_MANDATORY, ping_int)
- __u32_field(12, GENLA_F_MANDATORY, ping_timeo)
- __u32_field(13, GENLA_F_MANDATORY, sndbuf_size)
- __u32_field(14, GENLA_F_MANDATORY, rcvbuf_size)
- __u32_field(15, GENLA_F_MANDATORY, ko_count)
- __u32_field(16, GENLA_F_MANDATORY, max_buffers)
- __u32_field(17, GENLA_F_MANDATORY, max_epoch_size)
- __u32_field(18, GENLA_F_MANDATORY, unplug_watermark)
- __u32_field(19, GENLA_F_MANDATORY, after_sb_0p)
- __u32_field(20, GENLA_F_MANDATORY, after_sb_1p)
- __u32_field(21, GENLA_F_MANDATORY, after_sb_2p)
- __u32_field(22, GENLA_F_MANDATORY, rr_conflict)
- __u32_field(23, GENLA_F_MANDATORY, on_congestion)
- __u32_field(24, GENLA_F_MANDATORY, cong_fill)
- __u32_field(25, GENLA_F_MANDATORY, cong_extents)
- __flg_field(26, GENLA_F_MANDATORY, two_primaries)
+ __str_field_def(4, GENLA_F_MANDATORY, cram_hmac_alg, SHARED_SECRET_MAX)
+ __str_field_def(5, GENLA_F_MANDATORY, integrity_alg, SHARED_SECRET_MAX)
+ __str_field_def(6, GENLA_F_MANDATORY, verify_alg, SHARED_SECRET_MAX)
+ __str_field_def(7, GENLA_F_MANDATORY, csums_alg, SHARED_SECRET_MAX)
+ __u32_field_def(8, GENLA_F_MANDATORY, wire_protocol, DRBD_PROTOCOL_DEF)
+ __u32_field_def(9, GENLA_F_MANDATORY, try_connect_int, DRBD_CONNECT_INT_DEF)
+ __u32_field_def(10, GENLA_F_MANDATORY, timeout, DRBD_TIMEOUT_DEF)
+ __u32_field_def(11, GENLA_F_MANDATORY, ping_int, DRBD_PING_INT_DEF)
+ __u32_field_def(12, GENLA_F_MANDATORY, ping_timeo, DRBD_PING_TIMEO_DEF)
+ __u32_field_def(13, GENLA_F_MANDATORY, sndbuf_size, DRBD_SNDBUF_SIZE_DEF)
+ __u32_field_def(14, GENLA_F_MANDATORY, rcvbuf_size, DRBD_RCVBUF_SIZE_DEF)
+ __u32_field_def(15, GENLA_F_MANDATORY, ko_count, DRBD_KO_COUNT_DEF)
+ __u32_field_def(16, GENLA_F_MANDATORY, max_buffers, DRBD_MAX_BUFFERS_DEF)
+ __u32_field_def(17, GENLA_F_MANDATORY, max_epoch_size, DRBD_MAX_EPOCH_SIZE_DEF)
+ __u32_field_def(18, GENLA_F_MANDATORY, unplug_watermark, DRBD_UNPLUG_WATERMARK_DEF)
+ __u32_field_def(19, GENLA_F_MANDATORY, after_sb_0p, DRBD_AFTER_SB_0P_DEF)
+ __u32_field_def(20, GENLA_F_MANDATORY, after_sb_1p, DRBD_AFTER_SB_1P_DEF)
+ __u32_field_def(21, GENLA_F_MANDATORY, after_sb_2p, DRBD_AFTER_SB_2P_DEF)
+ __u32_field_def(22, GENLA_F_MANDATORY, rr_conflict, DRBD_RR_CONFLICT_DEF)
+ __u32_field_def(23, GENLA_F_MANDATORY, on_congestion, DRBD_ON_CONGESTION_DEF)
+ __u32_field_def(24, GENLA_F_MANDATORY, cong_fill, DRBD_CONG_FILL_DEF)
+ __u32_field_def(25, GENLA_F_MANDATORY, cong_extents, DRBD_CONG_EXTENTS_DEF)
+ __flg_field_def(26, GENLA_F_MANDATORY, two_primaries, 0)
__flg_field(27, GENLA_F_MANDATORY | GENLA_F_INVARIANT, want_lose)
- __flg_field(28, GENLA_F_MANDATORY, no_cork)
- __flg_field(29, GENLA_F_MANDATORY, always_asbp)
+ __flg_field_def(28, GENLA_F_MANDATORY, no_cork, 0)
+ __flg_field_def(29, GENLA_F_MANDATORY, always_asbp, 0)
__flg_field(30, GENLA_F_MANDATORY | GENLA_F_INVARIANT, dry_run)
- __flg_field(31, GENLA_F_MANDATORY, use_rle)
+ __flg_field_def(31, GENLA_F_MANDATORY, use_rle, 0)
)
GENL_struct(DRBD_NLA_SET_ROLE_PARMS, 6, set_role_parms,