diff options
Diffstat (limited to 'net/ceph/ceph_common.c')
-rw-r--r-- | net/ceph/ceph_common.c | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/net/ceph/ceph_common.c b/net/ceph/ceph_common.c index ba4323bce0e9..69e38db28e5f 100644 --- a/net/ceph/ceph_common.c +++ b/net/ceph/ceph_common.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/string.h> | 17 | #include <linux/string.h> |
18 | 18 | ||
19 | 19 | ||
20 | #include <linux/ceph/ceph_features.h> | ||
20 | #include <linux/ceph/libceph.h> | 21 | #include <linux/ceph/libceph.h> |
21 | #include <linux/ceph/debugfs.h> | 22 | #include <linux/ceph/debugfs.h> |
22 | #include <linux/ceph/decode.h> | 23 | #include <linux/ceph/decode.h> |
@@ -460,27 +461,23 @@ struct ceph_client *ceph_create_client(struct ceph_options *opt, void *private, | |||
460 | client->auth_err = 0; | 461 | client->auth_err = 0; |
461 | 462 | ||
462 | client->extra_mon_dispatch = NULL; | 463 | client->extra_mon_dispatch = NULL; |
463 | client->supported_features = CEPH_FEATURE_SUPPORTED_DEFAULT | | 464 | client->supported_features = CEPH_FEATURES_SUPPORTED_DEFAULT | |
464 | supported_features; | 465 | supported_features; |
465 | client->required_features = CEPH_FEATURE_REQUIRED_DEFAULT | | 466 | client->required_features = CEPH_FEATURES_REQUIRED_DEFAULT | |
466 | required_features; | 467 | required_features; |
467 | 468 | ||
468 | /* msgr */ | 469 | /* msgr */ |
469 | if (ceph_test_opt(client, MYIP)) | 470 | if (ceph_test_opt(client, MYIP)) |
470 | myaddr = &client->options->my_addr; | 471 | myaddr = &client->options->my_addr; |
471 | client->msgr = ceph_messenger_create(myaddr, | 472 | ceph_messenger_init(&client->msgr, myaddr, |
472 | client->supported_features, | 473 | client->supported_features, |
473 | client->required_features); | 474 | client->required_features, |
474 | if (IS_ERR(client->msgr)) { | 475 | ceph_test_opt(client, NOCRC)); |
475 | err = PTR_ERR(client->msgr); | ||
476 | goto fail; | ||
477 | } | ||
478 | client->msgr->nocrc = ceph_test_opt(client, NOCRC); | ||
479 | 476 | ||
480 | /* subsystems */ | 477 | /* subsystems */ |
481 | err = ceph_monc_init(&client->monc, client); | 478 | err = ceph_monc_init(&client->monc, client); |
482 | if (err < 0) | 479 | if (err < 0) |
483 | goto fail_msgr; | 480 | goto fail; |
484 | err = ceph_osdc_init(&client->osdc, client); | 481 | err = ceph_osdc_init(&client->osdc, client); |
485 | if (err < 0) | 482 | if (err < 0) |
486 | goto fail_monc; | 483 | goto fail_monc; |
@@ -489,8 +486,6 @@ struct ceph_client *ceph_create_client(struct ceph_options *opt, void *private, | |||
489 | 486 | ||
490 | fail_monc: | 487 | fail_monc: |
491 | ceph_monc_stop(&client->monc); | 488 | ceph_monc_stop(&client->monc); |
492 | fail_msgr: | ||
493 | ceph_messenger_destroy(client->msgr); | ||
494 | fail: | 489 | fail: |
495 | kfree(client); | 490 | kfree(client); |
496 | return ERR_PTR(err); | 491 | return ERR_PTR(err); |
@@ -501,6 +496,8 @@ void ceph_destroy_client(struct ceph_client *client) | |||
501 | { | 496 | { |
502 | dout("destroy_client %p\n", client); | 497 | dout("destroy_client %p\n", client); |
503 | 498 | ||
499 | atomic_set(&client->msgr.stopping, 1); | ||
500 | |||
504 | /* unmount */ | 501 | /* unmount */ |
505 | ceph_osdc_stop(&client->osdc); | 502 | ceph_osdc_stop(&client->osdc); |
506 | 503 | ||
@@ -508,8 +505,6 @@ void ceph_destroy_client(struct ceph_client *client) | |||
508 | 505 | ||
509 | ceph_debugfs_client_cleanup(client); | 506 | ceph_debugfs_client_cleanup(client); |
510 | 507 | ||
511 | ceph_messenger_destroy(client->msgr); | ||
512 | |||
513 | ceph_destroy_options(client->options); | 508 | ceph_destroy_options(client->options); |
514 | 509 | ||
515 | kfree(client); | 510 | kfree(client); |