Lines Matching refs:adm_ctx
159 static int drbd_adm_prepare(struct drbd_config_context *adm_ctx, in drbd_adm_prepare() argument
166 memset(adm_ctx, 0, sizeof(*adm_ctx)); in drbd_adm_prepare()
172 adm_ctx->reply_skb = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL); in drbd_adm_prepare()
173 if (!adm_ctx->reply_skb) { in drbd_adm_prepare()
178 adm_ctx->reply_dh = genlmsg_put_reply(adm_ctx->reply_skb, in drbd_adm_prepare()
182 if (!adm_ctx->reply_dh) { in drbd_adm_prepare()
187 adm_ctx->reply_dh->minor = d_in->minor; in drbd_adm_prepare()
188 adm_ctx->reply_dh->ret_code = NO_ERROR; in drbd_adm_prepare()
190 adm_ctx->volume = VOLUME_UNSPECIFIED; in drbd_adm_prepare()
200 err = nla_put_nohdr(adm_ctx->reply_skb, in drbd_adm_prepare()
209 adm_ctx->volume = nla_get_u32(nla); in drbd_adm_prepare()
212 adm_ctx->resource_name = nla_data(nla); in drbd_adm_prepare()
213 adm_ctx->my_addr = nested_attr_tb[__nla_type(T_ctx_my_addr)]; in drbd_adm_prepare()
214 adm_ctx->peer_addr = nested_attr_tb[__nla_type(T_ctx_peer_addr)]; in drbd_adm_prepare()
215 if ((adm_ctx->my_addr && in drbd_adm_prepare()
216 nla_len(adm_ctx->my_addr) > sizeof(adm_ctx->connection->my_addr)) || in drbd_adm_prepare()
217 (adm_ctx->peer_addr && in drbd_adm_prepare()
218 nla_len(adm_ctx->peer_addr) > sizeof(adm_ctx->connection->peer_addr))) { in drbd_adm_prepare()
224 adm_ctx->minor = d_in->minor; in drbd_adm_prepare()
225 adm_ctx->device = minor_to_device(d_in->minor); in drbd_adm_prepare()
230 if (adm_ctx->device) in drbd_adm_prepare()
231 kref_get(&adm_ctx->device->kref); in drbd_adm_prepare()
233 if (adm_ctx->resource_name) { in drbd_adm_prepare()
234 adm_ctx->resource = drbd_find_resource(adm_ctx->resource_name); in drbd_adm_prepare()
237 if (!adm_ctx->device && (flags & DRBD_ADM_NEED_MINOR)) { in drbd_adm_prepare()
238 drbd_msg_put_info(adm_ctx->reply_skb, "unknown minor"); in drbd_adm_prepare()
241 if (!adm_ctx->resource && (flags & DRBD_ADM_NEED_RESOURCE)) { in drbd_adm_prepare()
242 drbd_msg_put_info(adm_ctx->reply_skb, "unknown resource"); in drbd_adm_prepare()
243 if (adm_ctx->resource_name) in drbd_adm_prepare()
249 if (adm_ctx->resource) { in drbd_adm_prepare()
250 drbd_msg_put_info(adm_ctx->reply_skb, "no resource name expected"); in drbd_adm_prepare()
253 if (adm_ctx->device) { in drbd_adm_prepare()
254 drbd_msg_put_info(adm_ctx->reply_skb, "no minor number expected"); in drbd_adm_prepare()
257 if (adm_ctx->my_addr && adm_ctx->peer_addr) in drbd_adm_prepare()
258 adm_ctx->connection = conn_get_by_addrs(nla_data(adm_ctx->my_addr), in drbd_adm_prepare()
259 nla_len(adm_ctx->my_addr), in drbd_adm_prepare()
260 nla_data(adm_ctx->peer_addr), in drbd_adm_prepare()
261 nla_len(adm_ctx->peer_addr)); in drbd_adm_prepare()
262 if (!adm_ctx->connection) { in drbd_adm_prepare()
263 drbd_msg_put_info(adm_ctx->reply_skb, "unknown connection"); in drbd_adm_prepare()
269 if (adm_ctx->device && adm_ctx->resource && in drbd_adm_prepare()
270 adm_ctx->device->resource != adm_ctx->resource) { in drbd_adm_prepare()
272 adm_ctx->minor, adm_ctx->resource->name, in drbd_adm_prepare()
273 adm_ctx->device->resource->name); in drbd_adm_prepare()
274 drbd_msg_put_info(adm_ctx->reply_skb, "minor exists in different resource"); in drbd_adm_prepare()
277 if (adm_ctx->device && in drbd_adm_prepare()
278 adm_ctx->volume != VOLUME_UNSPECIFIED && in drbd_adm_prepare()
279 adm_ctx->volume != adm_ctx->device->vnr) { in drbd_adm_prepare()
281 adm_ctx->minor, adm_ctx->volume, in drbd_adm_prepare()
282 adm_ctx->device->vnr, adm_ctx->device->resource->name); in drbd_adm_prepare()
283 drbd_msg_put_info(adm_ctx->reply_skb, "minor exists as different volume"); in drbd_adm_prepare()
288 if (!adm_ctx->resource) { in drbd_adm_prepare()
289 adm_ctx->resource = adm_ctx->device ? adm_ctx->device->resource in drbd_adm_prepare()
290 : adm_ctx->connection ? adm_ctx->connection->resource : NULL; in drbd_adm_prepare()
291 if (adm_ctx->resource) in drbd_adm_prepare()
292 kref_get(&adm_ctx->resource->kref); in drbd_adm_prepare()
298 nlmsg_free(adm_ctx->reply_skb); in drbd_adm_prepare()
299 adm_ctx->reply_skb = NULL; in drbd_adm_prepare()
303 static int drbd_adm_finish(struct drbd_config_context *adm_ctx, in drbd_adm_finish() argument
306 if (adm_ctx->device) { in drbd_adm_finish()
307 kref_put(&adm_ctx->device->kref, drbd_destroy_device); in drbd_adm_finish()
308 adm_ctx->device = NULL; in drbd_adm_finish()
310 if (adm_ctx->connection) { in drbd_adm_finish()
311 kref_put(&adm_ctx->connection->kref, &drbd_destroy_connection); in drbd_adm_finish()
312 adm_ctx->connection = NULL; in drbd_adm_finish()
314 if (adm_ctx->resource) { in drbd_adm_finish()
315 kref_put(&adm_ctx->resource->kref, drbd_destroy_resource); in drbd_adm_finish()
316 adm_ctx->resource = NULL; in drbd_adm_finish()
319 if (!adm_ctx->reply_skb) in drbd_adm_finish()
322 adm_ctx->reply_dh->ret_code = retcode; in drbd_adm_finish()
323 drbd_adm_send_reply(adm_ctx->reply_skb, info); in drbd_adm_finish()
769 struct drbd_config_context adm_ctx; in drbd_adm_set_role() local
774 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); in drbd_adm_set_role()
775 if (!adm_ctx.reply_skb) in drbd_adm_set_role()
785 drbd_msg_put_info(adm_ctx.reply_skb, from_attrs_err_to_txt(err)); in drbd_adm_set_role()
790 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_set_role()
793 retcode = (enum drbd_ret_code)drbd_set_role(adm_ctx.device, in drbd_adm_set_role()
796 retcode = (enum drbd_ret_code)drbd_set_role(adm_ctx.device, in drbd_adm_set_role()
799 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_set_role()
802 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_set_role()
1567 struct drbd_config_context adm_ctx; in drbd_adm_disk_opts() local
1575 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); in drbd_adm_disk_opts()
1576 if (!adm_ctx.reply_skb) in drbd_adm_disk_opts()
1581 device = adm_ctx.device; in drbd_adm_disk_opts()
1582 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_disk_opts()
1606 drbd_msg_put_info(adm_ctx.reply_skb, from_attrs_err_to_txt(err)); in drbd_adm_disk_opts()
1632 drbd_msg_put_info(adm_ctx.reply_skb, in drbd_adm_disk_opts()
1696 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_disk_opts()
1698 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_disk_opts()
1786 struct drbd_config_context adm_ctx; in drbd_adm_attach() local
1803 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); in drbd_adm_attach()
1804 if (!adm_ctx.reply_skb) in drbd_adm_attach()
1809 device = adm_ctx.device; in drbd_adm_attach()
1810 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_attach()
1855 drbd_msg_put_info(adm_ctx.reply_skb, from_attrs_err_to_txt(err)); in drbd_adm_attach()
2006 drbd_msg_sprintf_info(adm_ctx.reply_skb, in drbd_adm_attach()
2180 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_attach()
2181 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_attach()
2199 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_attach()
2201 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_attach()
2223 struct drbd_config_context adm_ctx; in drbd_adm_detach() local
2228 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); in drbd_adm_detach()
2229 if (!adm_ctx.reply_skb) in drbd_adm_detach()
2238 drbd_msg_put_info(adm_ctx.reply_skb, from_attrs_err_to_txt(err)); in drbd_adm_detach()
2243 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_detach()
2244 retcode = adm_detach(adm_ctx.device, parms.force_detach); in drbd_adm_detach()
2245 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_detach()
2247 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_detach()
2421 struct drbd_config_context adm_ctx; in drbd_adm_net_opts() local
2430 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_CONNECTION); in drbd_adm_net_opts()
2431 if (!adm_ctx.reply_skb) in drbd_adm_net_opts()
2436 connection = adm_ctx.connection; in drbd_adm_net_opts()
2437 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_net_opts()
2452 drbd_msg_put_info(adm_ctx.reply_skb, "net conf missing, try connect"); in drbd_adm_net_opts()
2464 drbd_msg_put_info(adm_ctx.reply_skb, from_attrs_err_to_txt(err)); in drbd_adm_net_opts()
2535 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_net_opts()
2537 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_net_opts()
2566 struct drbd_config_context adm_ctx; in drbd_adm_connect() local
2576 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_RESOURCE); in drbd_adm_connect()
2578 if (!adm_ctx.reply_skb) in drbd_adm_connect()
2582 if (!(adm_ctx.my_addr && adm_ctx.peer_addr)) { in drbd_adm_connect()
2583 drbd_msg_put_info(adm_ctx.reply_skb, "connection endpoint(s) missing"); in drbd_adm_connect()
2593 if (nla_len(adm_ctx.my_addr) == connection->my_addr_len && in drbd_adm_connect()
2594 !memcmp(nla_data(adm_ctx.my_addr), &connection->my_addr, in drbd_adm_connect()
2600 if (nla_len(adm_ctx.peer_addr) == connection->peer_addr_len && in drbd_adm_connect()
2601 !memcmp(nla_data(adm_ctx.peer_addr), &connection->peer_addr, in drbd_adm_connect()
2609 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_connect()
2610 connection = first_connection(adm_ctx.resource); in drbd_adm_connect()
2630 drbd_msg_put_info(adm_ctx.reply_skb, from_attrs_err_to_txt(err)); in drbd_adm_connect()
2646 mutex_lock(&adm_ctx.resource->conf_update); in drbd_adm_connect()
2650 mutex_unlock(&adm_ctx.resource->conf_update); in drbd_adm_connect()
2661 connection->my_addr_len = nla_len(adm_ctx.my_addr); in drbd_adm_connect()
2662 memcpy(&connection->my_addr, nla_data(adm_ctx.my_addr), connection->my_addr_len); in drbd_adm_connect()
2663 connection->peer_addr_len = nla_len(adm_ctx.peer_addr); in drbd_adm_connect()
2664 memcpy(&connection->peer_addr, nla_data(adm_ctx.peer_addr), connection->peer_addr_len); in drbd_adm_connect()
2682 mutex_unlock(&adm_ctx.resource->conf_update); in drbd_adm_connect()
2696 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_connect()
2697 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_connect()
2705 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_connect()
2707 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_connect()
2779 struct drbd_config_context adm_ctx; in drbd_adm_disconnect() local
2786 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_CONNECTION); in drbd_adm_disconnect()
2787 if (!adm_ctx.reply_skb) in drbd_adm_disconnect()
2792 connection = adm_ctx.connection; in drbd_adm_disconnect()
2798 drbd_msg_put_info(adm_ctx.reply_skb, from_attrs_err_to_txt(err)); in drbd_adm_disconnect()
2803 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_disconnect()
2809 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_disconnect()
2811 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_disconnect()
2833 struct drbd_config_context adm_ctx; in drbd_adm_resize() local
2844 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); in drbd_adm_resize()
2845 if (!adm_ctx.reply_skb) in drbd_adm_resize()
2850 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_resize()
2851 device = adm_ctx.device; in drbd_adm_resize()
2864 drbd_msg_put_info(adm_ctx.reply_skb, from_attrs_err_to_txt(err)); in drbd_adm_resize()
2957 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_resize()
2959 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_resize()
2970 struct drbd_config_context adm_ctx; in drbd_adm_resource_opts() local
2975 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_RESOURCE); in drbd_adm_resource_opts()
2976 if (!adm_ctx.reply_skb) in drbd_adm_resource_opts()
2981 res_opts = adm_ctx.resource->res_opts; in drbd_adm_resource_opts()
2988 drbd_msg_put_info(adm_ctx.reply_skb, from_attrs_err_to_txt(err)); in drbd_adm_resource_opts()
2992 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_resource_opts()
2993 err = set_resource_options(adm_ctx.resource, &res_opts); in drbd_adm_resource_opts()
2999 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_resource_opts()
3002 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_resource_opts()
3008 struct drbd_config_context adm_ctx; in drbd_adm_invalidate() local
3012 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); in drbd_adm_invalidate()
3013 if (!adm_ctx.reply_skb) in drbd_adm_invalidate()
3018 device = adm_ctx.device; in drbd_adm_invalidate()
3024 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_invalidate()
3047 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_invalidate()
3050 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_invalidate()
3057 struct drbd_config_context adm_ctx; in drbd_adm_simple_request_state() local
3060 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); in drbd_adm_simple_request_state()
3061 if (!adm_ctx.reply_skb) in drbd_adm_simple_request_state()
3066 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_simple_request_state()
3067 retcode = drbd_request_state(adm_ctx.device, mask, val); in drbd_adm_simple_request_state()
3068 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_simple_request_state()
3070 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_simple_request_state()
3085 struct drbd_config_context adm_ctx; in drbd_adm_invalidate_peer() local
3089 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); in drbd_adm_invalidate_peer()
3090 if (!adm_ctx.reply_skb) in drbd_adm_invalidate_peer()
3095 device = adm_ctx.device; in drbd_adm_invalidate_peer()
3101 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_invalidate_peer()
3127 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_invalidate_peer()
3130 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_invalidate_peer()
3136 struct drbd_config_context adm_ctx; in drbd_adm_pause_sync() local
3139 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); in drbd_adm_pause_sync()
3140 if (!adm_ctx.reply_skb) in drbd_adm_pause_sync()
3145 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_pause_sync()
3146 if (drbd_request_state(adm_ctx.device, NS(user_isp, 1)) == SS_NOTHING_TO_DO) in drbd_adm_pause_sync()
3148 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_pause_sync()
3150 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_pause_sync()
3156 struct drbd_config_context adm_ctx; in drbd_adm_resume_sync() local
3160 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); in drbd_adm_resume_sync()
3161 if (!adm_ctx.reply_skb) in drbd_adm_resume_sync()
3166 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_resume_sync()
3167 if (drbd_request_state(adm_ctx.device, NS(user_isp, 0)) == SS_NOTHING_TO_DO) { in drbd_adm_resume_sync()
3168 s = adm_ctx.device->state; in drbd_adm_resume_sync()
3176 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_resume_sync()
3178 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_resume_sync()
3189 struct drbd_config_context adm_ctx; in drbd_adm_resume_io() local
3193 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); in drbd_adm_resume_io()
3194 if (!adm_ctx.reply_skb) in drbd_adm_resume_io()
3199 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_resume_io()
3200 device = adm_ctx.device; in drbd_adm_resume_io()
3237 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_resume_io()
3239 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_resume_io()
3892 struct drbd_config_context adm_ctx; in drbd_adm_get_status() local
3896 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); in drbd_adm_get_status()
3897 if (!adm_ctx.reply_skb) in drbd_adm_get_status()
3902 err = nla_put_status_info(adm_ctx.reply_skb, adm_ctx.device, NULL); in drbd_adm_get_status()
3904 nlmsg_free(adm_ctx.reply_skb); in drbd_adm_get_status()
3908 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_get_status()
4095 struct drbd_config_context adm_ctx; in drbd_adm_get_timeout_type() local
4100 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); in drbd_adm_get_timeout_type()
4101 if (!adm_ctx.reply_skb) in drbd_adm_get_timeout_type()
4107 adm_ctx.device->state.pdsk == D_OUTDATED ? UT_PEER_OUTDATED : in drbd_adm_get_timeout_type()
4108 test_bit(USE_DEGR_WFC_T, &adm_ctx.device->flags) ? UT_DEGRADED : in drbd_adm_get_timeout_type()
4111 err = timeout_parms_to_priv_skb(adm_ctx.reply_skb, &tp); in drbd_adm_get_timeout_type()
4113 nlmsg_free(adm_ctx.reply_skb); in drbd_adm_get_timeout_type()
4117 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_get_timeout_type()
4123 struct drbd_config_context adm_ctx; in drbd_adm_start_ov() local
4128 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); in drbd_adm_start_ov()
4129 if (!adm_ctx.reply_skb) in drbd_adm_start_ov()
4134 device = adm_ctx.device; in drbd_adm_start_ov()
4143 drbd_msg_put_info(adm_ctx.reply_skb, from_attrs_err_to_txt(err)); in drbd_adm_start_ov()
4147 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_start_ov()
4160 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_start_ov()
4162 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_start_ov()
4169 struct drbd_config_context adm_ctx; in drbd_adm_new_c_uuid() local
4176 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); in drbd_adm_new_c_uuid()
4177 if (!adm_ctx.reply_skb) in drbd_adm_new_c_uuid()
4182 device = adm_ctx.device; in drbd_adm_new_c_uuid()
4188 drbd_msg_put_info(adm_ctx.reply_skb, from_attrs_err_to_txt(err)); in drbd_adm_new_c_uuid()
4193 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_new_c_uuid()
4238 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_new_c_uuid()
4240 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_new_c_uuid()
4245 drbd_check_resource_name(struct drbd_config_context *adm_ctx) in drbd_check_resource_name() argument
4247 const char *name = adm_ctx->resource_name; in drbd_check_resource_name()
4249 drbd_msg_put_info(adm_ctx->reply_skb, "resource name missing"); in drbd_check_resource_name()
4255 drbd_msg_put_info(adm_ctx->reply_skb, "invalid resource name"); in drbd_check_resource_name()
4273 struct drbd_config_context adm_ctx; in drbd_adm_new_resource() local
4278 retcode = drbd_adm_prepare(&adm_ctx, skb, info, 0); in drbd_adm_new_resource()
4279 if (!adm_ctx.reply_skb) in drbd_adm_new_resource()
4288 drbd_msg_put_info(adm_ctx.reply_skb, from_attrs_err_to_txt(err)); in drbd_adm_new_resource()
4292 retcode = drbd_check_resource_name(&adm_ctx); in drbd_adm_new_resource()
4296 if (adm_ctx.resource) { in drbd_adm_new_resource()
4299 drbd_msg_put_info(adm_ctx.reply_skb, "resource exists"); in drbd_adm_new_resource()
4307 connection = conn_create(adm_ctx.resource_name, &res_opts); in drbd_adm_new_resource()
4322 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_new_resource()
4335 struct drbd_config_context adm_ctx; in drbd_adm_new_minor() local
4339 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_RESOURCE); in drbd_adm_new_minor()
4340 if (!adm_ctx.reply_skb) in drbd_adm_new_minor()
4346 drbd_msg_put_info(adm_ctx.reply_skb, "requested minor out of range"); in drbd_adm_new_minor()
4350 if (adm_ctx.volume > DRBD_VOLUME_MAX) { in drbd_adm_new_minor()
4351 drbd_msg_put_info(adm_ctx.reply_skb, "requested volume id out of range"); in drbd_adm_new_minor()
4358 if (adm_ctx.device) { in drbd_adm_new_minor()
4365 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_new_minor()
4366 retcode = drbd_create_device(&adm_ctx, dh->minor); in drbd_adm_new_minor()
4397 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_new_minor()
4399 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_new_minor()
4442 struct drbd_config_context adm_ctx; in drbd_adm_del_minor() local
4445 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); in drbd_adm_del_minor()
4446 if (!adm_ctx.reply_skb) in drbd_adm_del_minor()
4451 mutex_lock(&adm_ctx.resource->adm_mutex); in drbd_adm_del_minor()
4452 retcode = adm_del_minor(adm_ctx.device); in drbd_adm_del_minor()
4453 mutex_unlock(&adm_ctx.resource->adm_mutex); in drbd_adm_del_minor()
4455 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_del_minor()
4491 struct drbd_config_context adm_ctx; in drbd_adm_down() local
4498 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_RESOURCE); in drbd_adm_down()
4499 if (!adm_ctx.reply_skb) in drbd_adm_down()
4504 resource = adm_ctx.resource; in drbd_adm_down()
4513 drbd_msg_put_info(adm_ctx.reply_skb, "failed to demote"); in drbd_adm_down()
4520 drbd_msg_put_info(adm_ctx.reply_skb, "failed to disconnect"); in drbd_adm_down()
4529 drbd_msg_put_info(adm_ctx.reply_skb, "failed to detach"); in drbd_adm_down()
4539 drbd_msg_put_info(adm_ctx.reply_skb, "failed to delete volume"); in drbd_adm_down()
4548 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_down()
4554 struct drbd_config_context adm_ctx; in drbd_adm_del_resource() local
4558 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_RESOURCE); in drbd_adm_del_resource()
4559 if (!adm_ctx.reply_skb) in drbd_adm_del_resource()
4563 resource = adm_ctx.resource; in drbd_adm_del_resource()
4569 drbd_adm_finish(&adm_ctx, info, retcode); in drbd_adm_del_resource()