Lines Matching refs:connection

185 		     nla_len(adm_ctx->my_addr) > sizeof(adm_ctx->connection->my_addr)) ||  in drbd_adm_prepare()
187 nla_len(adm_ctx->peer_addr) > sizeof(adm_ctx->connection->peer_addr))) { in drbd_adm_prepare()
227 adm_ctx->connection = conn_get_by_addrs(nla_data(adm_ctx->my_addr), in drbd_adm_prepare()
231 if (!adm_ctx->connection) { in drbd_adm_prepare()
260 : adm_ctx->connection ? adm_ctx->connection->resource : NULL; in drbd_adm_prepare()
280 if (adm_ctx->connection) { in drbd_adm_finish()
281 kref_put(&adm_ctx->connection->kref, &drbd_destroy_connection); in drbd_adm_finish()
282 adm_ctx->connection = NULL; in drbd_adm_finish()
297 static void setup_khelper_env(struct drbd_connection *connection, char **envp) in setup_khelper_env() argument
302 if (connection->my_addr_len == 0 || connection->peer_addr_len == 0) in setup_khelper_env()
305 switch (((struct sockaddr *)&connection->peer_addr)->sa_family) { in setup_khelper_env()
309 &((struct sockaddr_in6 *)&connection->peer_addr)->sin6_addr); in setup_khelper_env()
314 &((struct sockaddr_in *)&connection->peer_addr)->sin_addr); in setup_khelper_env()
319 &((struct sockaddr_in *)&connection->peer_addr)->sin_addr); in setup_khelper_env()
334 struct drbd_connection *connection = first_peer_device(device)->connection; in drbd_khelper() local
338 if (current == connection->worker.task) in drbd_khelper()
339 set_bit(CALLBACK_PENDING, &connection->flags); in drbd_khelper()
342 setup_khelper_env(connection, envp); in drbd_khelper()
365 if (current == connection->worker.task) in drbd_khelper()
366 clear_bit(CALLBACK_PENDING, &connection->flags); in drbd_khelper()
374 static int conn_khelper(struct drbd_connection *connection, char *cmd) in conn_khelper() argument
382 char *resource_name = connection->resource->name; in conn_khelper()
386 setup_khelper_env(connection, envp); in conn_khelper()
387 conn_md_sync(connection); in conn_khelper()
389 drbd_info(connection, "helper command: %s %s %s\n", usermode_helper, cmd, resource_name); in conn_khelper()
394 drbd_warn(connection, "helper command: %s %s %s exit code %u (0x%x)\n", in conn_khelper()
398 drbd_info(connection, "helper command: %s %s %s exit code %u (0x%x)\n", in conn_khelper()
409 static enum drbd_fencing_p highest_fencing_policy(struct drbd_connection *connection) in highest_fencing_policy() argument
416 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { in highest_fencing_policy()
431 peer_device = idr_get_next(&connection->peer_devices, &vnr); in highest_fencing_policy()
438 bool conn_try_outdate_peer(struct drbd_connection *connection) in conn_try_outdate_peer() argument
447 spin_lock_irq(&connection->resource->req_lock); in conn_try_outdate_peer()
448 if (connection->cstate >= C_WF_REPORT_PARAMS) { in conn_try_outdate_peer()
449 drbd_err(connection, "Expected cstate < C_WF_REPORT_PARAMS\n"); in conn_try_outdate_peer()
450 spin_unlock_irq(&connection->resource->req_lock); in conn_try_outdate_peer()
454 connect_cnt = connection->connect_cnt; in conn_try_outdate_peer()
455 spin_unlock_irq(&connection->resource->req_lock); in conn_try_outdate_peer()
457 fp = highest_fencing_policy(connection); in conn_try_outdate_peer()
460 drbd_warn(connection, "Not fencing peer, I'm not even Consistent myself.\n"); in conn_try_outdate_peer()
467 r = conn_khelper(connection, "fence-peer"); in conn_try_outdate_peer()
481 if (conn_highest_disk(connection) == D_UP_TO_DATE) { in conn_try_outdate_peer()
494 drbd_warn(connection, "Peer is primary, outdating myself.\n"); in conn_try_outdate_peer()
500 drbd_err(connection, "fence-peer() = 7 && fencing != Stonith !!!\n"); in conn_try_outdate_peer()
507 drbd_err(connection, "fence-peer helper broken, returned %d\n", (r>>8)&0xff); in conn_try_outdate_peer()
511 drbd_info(connection, "fence-peer helper returned %d (%s)\n", in conn_try_outdate_peer()
520 spin_lock_irq(&connection->resource->req_lock); in conn_try_outdate_peer()
521 if (connection->cstate < C_WF_REPORT_PARAMS && !test_bit(STATE_SENT, &connection->flags)) { in conn_try_outdate_peer()
522 if (connection->connect_cnt != connect_cnt) in conn_try_outdate_peer()
525 drbd_info(connection, "Ignoring fence-peer exit code\n"); in conn_try_outdate_peer()
527 _conn_request_state(connection, mask, val, CS_VERBOSE); in conn_try_outdate_peer()
529 spin_unlock_irq(&connection->resource->req_lock); in conn_try_outdate_peer()
531 return conn_highest_pdsk(connection) <= D_OUTDATED; in conn_try_outdate_peer()
536 struct drbd_connection *connection = (struct drbd_connection *)data; in _try_outdate_peer_async() local
538 conn_try_outdate_peer(connection); in _try_outdate_peer_async()
540 kref_put(&connection->kref, drbd_destroy_connection); in _try_outdate_peer_async()
544 void conn_try_outdate_peer_async(struct drbd_connection *connection) in conn_try_outdate_peer_async() argument
548 kref_get(&connection->kref); in conn_try_outdate_peer_async()
555 opa = kthread_run(_try_outdate_peer_async, connection, "drbd_async_h"); in conn_try_outdate_peer_async()
557 drbd_err(connection, "out of mem, failed to invoke fence-peer helper\n"); in conn_try_outdate_peer_async()
558 kref_put(&connection->kref, drbd_destroy_connection); in conn_try_outdate_peer_async()
566 struct drbd_connection *const connection = peer_device ? peer_device->connection : NULL; in drbd_set_role() local
575 struct drbd_connection *connection; in drbd_set_role() local
580 for_each_connection(connection, device->resource) in drbd_set_role()
581 request_ping(connection); in drbd_set_role()
614 if (conn_try_outdate_peer(connection)) { in drbd_set_role()
624 if (!conn_try_outdate_peer(connection) && force) { in drbd_set_role()
637 nc = rcu_dereference(connection->net_conf); in drbd_set_role()
672 nc = connection->net_conf; in drbd_set_role()
1152 struct drbd_connection *connection = first_peer_device(device)->connection; in drbd_setup_queue_param() local
1155 (connection->cstate < C_CONNECTED || connection->agreed_features & FF_TRIM)) { in drbd_setup_queue_param()
1200 if (first_peer_device(device)->connection->agreed_pro_version < 94) in drbd_reconsider_max_bio_size()
1203 else if (first_peer_device(device)->connection->agreed_pro_version == 94) in drbd_reconsider_max_bio_size()
1205 else if (first_peer_device(device)->connection->agreed_pro_version < 100) in drbd_reconsider_max_bio_size()
1229 static void conn_reconfig_start(struct drbd_connection *connection) in conn_reconfig_start() argument
1231 drbd_thread_start(&connection->worker); in conn_reconfig_start()
1232 drbd_flush_workqueue(&connection->sender_work); in conn_reconfig_start()
1236 static void conn_reconfig_done(struct drbd_connection *connection) in conn_reconfig_done() argument
1239 spin_lock_irq(&connection->resource->req_lock); in conn_reconfig_done()
1240 stop_threads = conn_all_vols_unconf(connection) && in conn_reconfig_done()
1241 connection->cstate == C_STANDALONE; in conn_reconfig_done()
1242 spin_unlock_irq(&connection->resource->req_lock); in conn_reconfig_done()
1246 drbd_thread_stop(&connection->receiver); in conn_reconfig_done()
1247 drbd_thread_stop(&connection->worker); in conn_reconfig_done()
1457 struct drbd_connection *connection; in drbd_adm_attach() local
1481 connection = peer_device ? peer_device->connection : NULL; in drbd_adm_attach()
1482 conn_reconfig_start(connection); in drbd_adm_attach()
1549 nc = rcu_dereference(connection->net_conf); in drbd_adm_attach()
1669 drbd_flush_workqueue(&connection->sender_work); in drbd_adm_attach()
1865 conn_reconfig_done(connection); in drbd_adm_attach()
1876 conn_reconfig_done(connection); in drbd_adm_attach()
1958 static bool conn_resync_running(struct drbd_connection *connection) in conn_resync_running() argument
1965 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { in conn_resync_running()
1980 static bool conn_ov_running(struct drbd_connection *connection) in conn_ov_running() argument
1987 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { in conn_ov_running()
2001 _check_net_options(struct drbd_connection *connection, struct net_conf *old_net_conf, struct net_co… in _check_net_options() argument
2006 …if (old_net_conf && connection->cstate == C_WF_REPORT_PARAMS && connection->agreed_pro_version < 1… in _check_net_options()
2018 conn_highest_role(connection) == R_PRIMARY && in _check_net_options()
2019 conn_highest_peer(connection) == R_PRIMARY) in _check_net_options()
2026 idr_for_each_entry(&connection->peer_devices, peer_device, i) { in _check_net_options()
2045 check_net_options(struct drbd_connection *connection, struct net_conf *new_net_conf) in check_net_options() argument
2052 rv = _check_net_options(connection, rcu_dereference(connection->net_conf), new_net_conf); in check_net_options()
2056 idr_for_each_entry(&connection->peer_devices, peer_device, i) { in check_net_options()
2130 struct drbd_connection *connection; in drbd_adm_net_opts() local
2143 connection = adm_ctx.connection; in drbd_adm_net_opts()
2152 conn_reconfig_start(connection); in drbd_adm_net_opts()
2154 mutex_lock(&connection->data.mutex); in drbd_adm_net_opts()
2155 mutex_lock(&connection->resource->conf_update); in drbd_adm_net_opts()
2156 old_net_conf = connection->net_conf; in drbd_adm_net_opts()
2175 retcode = check_net_options(connection, new_net_conf); in drbd_adm_net_opts()
2180 rsr = conn_resync_running(connection); in drbd_adm_net_opts()
2187 ovr = conn_ov_running(connection); in drbd_adm_net_opts()
2197 rcu_assign_pointer(connection->net_conf, new_net_conf); in drbd_adm_net_opts()
2200 crypto_free_hash(connection->csums_tfm); in drbd_adm_net_opts()
2201 connection->csums_tfm = crypto.csums_tfm; in drbd_adm_net_opts()
2205 crypto_free_hash(connection->verify_tfm); in drbd_adm_net_opts()
2206 connection->verify_tfm = crypto.verify_tfm; in drbd_adm_net_opts()
2210 crypto_free_hash(connection->integrity_tfm); in drbd_adm_net_opts()
2211 connection->integrity_tfm = crypto.integrity_tfm; in drbd_adm_net_opts()
2212 if (connection->cstate >= C_WF_REPORT_PARAMS && connection->agreed_pro_version >= 100) in drbd_adm_net_opts()
2214 __drbd_send_protocol(connection, P_PROTOCOL_UPDATE); in drbd_adm_net_opts()
2216 crypto_free_hash(connection->cram_hmac_tfm); in drbd_adm_net_opts()
2217 connection->cram_hmac_tfm = crypto.cram_hmac_tfm; in drbd_adm_net_opts()
2219 mutex_unlock(&connection->resource->conf_update); in drbd_adm_net_opts()
2220 mutex_unlock(&connection->data.mutex); in drbd_adm_net_opts()
2224 if (connection->cstate >= C_WF_REPORT_PARAMS) { in drbd_adm_net_opts()
2228 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) in drbd_adm_net_opts()
2235 mutex_unlock(&connection->resource->conf_update); in drbd_adm_net_opts()
2236 mutex_unlock(&connection->data.mutex); in drbd_adm_net_opts()
2240 conn_reconfig_done(connection); in drbd_adm_net_opts()
2255 struct drbd_connection *connection; in drbd_adm_connect() local
2276 for_each_connection(connection, resource) { in drbd_adm_connect()
2277 if (nla_len(adm_ctx.my_addr) == connection->my_addr_len && in drbd_adm_connect()
2278 !memcmp(nla_data(adm_ctx.my_addr), &connection->my_addr, in drbd_adm_connect()
2279 connection->my_addr_len)) { in drbd_adm_connect()
2284 if (nla_len(adm_ctx.peer_addr) == connection->peer_addr_len && in drbd_adm_connect()
2285 !memcmp(nla_data(adm_ctx.peer_addr), &connection->peer_addr, in drbd_adm_connect()
2286 connection->peer_addr_len)) { in drbd_adm_connect()
2294 connection = first_connection(adm_ctx.resource); in drbd_adm_connect()
2295 conn_reconfig_start(connection); in drbd_adm_connect()
2297 if (connection->cstate > C_STANDALONE) { in drbd_adm_connect()
2318 retcode = check_net_options(connection, new_net_conf); in drbd_adm_connect()
2328 drbd_flush_workqueue(&connection->sender_work); in drbd_adm_connect()
2331 old_net_conf = connection->net_conf; in drbd_adm_connect()
2337 rcu_assign_pointer(connection->net_conf, new_net_conf); in drbd_adm_connect()
2339 conn_free_crypto(connection); in drbd_adm_connect()
2340 connection->cram_hmac_tfm = crypto.cram_hmac_tfm; in drbd_adm_connect()
2341 connection->integrity_tfm = crypto.integrity_tfm; in drbd_adm_connect()
2342 connection->csums_tfm = crypto.csums_tfm; in drbd_adm_connect()
2343 connection->verify_tfm = crypto.verify_tfm; in drbd_adm_connect()
2345 connection->my_addr_len = nla_len(adm_ctx.my_addr); in drbd_adm_connect()
2346 memcpy(&connection->my_addr, nla_data(adm_ctx.my_addr), connection->my_addr_len); in drbd_adm_connect()
2347 connection->peer_addr_len = nla_len(adm_ctx.peer_addr); in drbd_adm_connect()
2348 memcpy(&connection->peer_addr, nla_data(adm_ctx.peer_addr), connection->peer_addr_len); in drbd_adm_connect()
2353 idr_for_each_entry(&connection->peer_devices, peer_device, i) { in drbd_adm_connect()
2360 retcode = conn_request_state(connection, NS(conn, C_UNCONNECTED), CS_VERBOSE); in drbd_adm_connect()
2362 conn_reconfig_done(connection); in drbd_adm_connect()
2371 conn_reconfig_done(connection); in drbd_adm_connect()
2378 static enum drbd_state_rv conn_try_disconnect(struct drbd_connection *connection, bool force) in conn_try_disconnect() argument
2382 rv = conn_request_state(connection, NS(conn, C_DISCONNECTING), in conn_try_disconnect()
2392 rv = conn_request_state(connection, NS2(conn, C_DISCONNECTING, pdsk, D_OUTDATED), 0); in conn_try_disconnect()
2395 rv = conn_request_state(connection, NS(conn, C_DISCONNECTING), CS_VERBOSE); in conn_try_disconnect()
2400 rv = conn_request_state(connection, NS2(conn, C_DISCONNECTING, in conn_try_disconnect()
2403 rv = conn_request_state(connection, NS(conn, C_DISCONNECTING), in conn_try_disconnect()
2417 drbd_thread_stop(&connection->receiver); in conn_try_disconnect()
2425 rv2 = conn_request_state(connection, NS(conn, C_STANDALONE), in conn_try_disconnect()
2428 drbd_err(connection, in conn_try_disconnect()
2439 struct drbd_connection *connection; in drbd_adm_disconnect() local
2450 connection = adm_ctx.connection; in drbd_adm_disconnect()
2462 rv = conn_try_disconnect(connection, parms.force_disconnect); in drbd_adm_disconnect()
2481 iass = test_bit(RESOLVE_CONFLICTS, &first_peer_device(device)->connection->flags); in resync_after_online_grow()
2538 if (rs.no_resync && first_peer_device(device)->connection->agreed_pro_version < 93) { in drbd_adm_resize()
2687 drbd_flush_workqueue(&first_peer_device(device)->connection->sender_work); in drbd_adm_invalidate()
2764 drbd_flush_workqueue(&first_peer_device(device)->connection->sender_work); in drbd_adm_invalidate_peer()
2865 tl_clear(first_peer_device(device)->connection); in drbd_adm_resume_io()
2867 tl_restart(first_peer_device(device)->connection, FAIL_FROZEN_DISK_IO); in drbd_adm_resume_io()
2883 struct drbd_connection *connection, in nla_put_drbd_cfg_context() argument
2895 if (connection) { in nla_put_drbd_cfg_context()
2896 if (connection->my_addr_len && in nla_put_drbd_cfg_context()
2897 nla_put(skb, T_ctx_my_addr, connection->my_addr_len, &connection->my_addr)) in nla_put_drbd_cfg_context()
2899 if (connection->peer_addr_len && in nla_put_drbd_cfg_context()
2900 nla_put(skb, T_ctx_peer_addr, connection->peer_addr_len, &connection->peer_addr)) in nla_put_drbd_cfg_context()
2967 nc = rcu_dereference(first_peer_device(device)->connection->net_conf); in nla_put_status_info()
3144 struct drbd_connection *connection; in get_one_status() local
3148 connection = the_only_connection(resource); in get_one_status()
3149 if (nla_put_drbd_cfg_context(skb, resource, connection, NULL)) in get_one_status()
3151 if (connection) { in get_one_status()
3154 nc = rcu_dereference(connection->net_conf); in get_one_status()
3359 first_peer_device(device)->connection->agreed_pro_version >= 90 && in drbd_adm_new_c_uuid()
3535 struct drbd_connection *connection; in adm_del_resource() local
3537 for_each_connection(connection, resource) { in adm_del_resource()
3538 if (connection->cstate > C_STANDALONE) in adm_del_resource()
3547 list_for_each_entry(connection, &resource->connections, connections) in adm_del_resource()
3548 drbd_thread_stop(&connection->worker); in adm_del_resource()
3558 struct drbd_connection *connection; in drbd_adm_down() local
3572 for_each_connection(connection, resource) { in drbd_adm_down()
3575 idr_for_each_entry(&connection->peer_devices, peer_device, i) { in drbd_adm_down()
3583 retcode = conn_try_disconnect(connection, 0); in drbd_adm_down()