monc 4105 drivers/block/rbd.c ret = ceph_monc_blacklist_add(&client->monc, monc 176 fs/ceph/debugfs.c struct ceph_auth_client *ac = fsc->client->monc.auth; monc 4514 fs/ceph/mds_client.c ceph_monc_got_map(&fsc->client->monc, CEPH_SUB_FSMAP, epoch); monc 4516 fs/ceph/mds_client.c fsc->client->monc.fs_cluster_id = mount_fscid; monc 4517 fs/ceph/mds_client.c ceph_monc_want_map(&fsc->client->monc, CEPH_SUB_MDSMAP, monc 4519 fs/ceph/mds_client.c ceph_monc_renew_subs(&fsc->client->monc); monc 4584 fs/ceph/mds_client.c ceph_monc_got_map(&mdsc->fsc->client->monc, CEPH_SUB_MDSMAP, monc 4694 fs/ceph/mds_client.c struct ceph_auth_client *ac = mdsc->fsc->client->monc.auth; monc 4722 fs/ceph/mds_client.c struct ceph_auth_client *ac = mdsc->fsc->client->monc.auth; monc 4732 fs/ceph/mds_client.c struct ceph_auth_client *ac = mdsc->fsc->client->monc.auth; monc 4741 fs/ceph/mds_client.c struct ceph_auth_client *ac = mdsc->fsc->client->monc.auth; monc 4745 fs/ceph/mds_client.c return ceph_monc_validate_auth(&mdsc->fsc->client->monc); monc 49 fs/ceph/super.c struct ceph_mon_client *monc = &fsc->client->monc; monc 62 fs/ceph/super.c err = ceph_monc_do_statfs(monc, data_pool, &st); monc 98 fs/ceph/super.c mutex_lock(&monc->mutex); monc 99 fs/ceph/super.c fsid = le64_to_cpu(*(__le64 *)(&monc->monmap->fsid)) ^ monc 100 fs/ceph/super.c le64_to_cpu(*((__le64 *)&monc->monmap->fsid + 1)); monc 101 fs/ceph/super.c mutex_unlock(&monc->mutex); monc 708 fs/ceph/super.c ceph_monc_want_map(&fsc->client->monc, CEPH_SUB_MDSMAP, monc 711 fs/ceph/super.c ceph_monc_want_map(&fsc->client->monc, CEPH_SUB_FSMAP, monc 137 include/linux/ceph/libceph.h struct ceph_mon_client monc; monc 32 include/linux/ceph/mon_client.h typedef void (*ceph_monc_request_func_t)(struct ceph_mon_client *monc, monc 37 include/linux/ceph/mon_client.h struct ceph_mon_client *monc; monc 51 include/linux/ceph/mon_client.h struct ceph_mon_client *monc; monc 110 include/linux/ceph/mon_client.h extern int ceph_monc_init(struct ceph_mon_client *monc, struct ceph_client *cl); monc 111 include/linux/ceph/mon_client.h extern void ceph_monc_stop(struct ceph_mon_client *monc); monc 112 include/linux/ceph/mon_client.h extern void ceph_monc_reopen_session(struct ceph_mon_client *monc); monc 129 include/linux/ceph/mon_client.h bool ceph_monc_want_map(struct ceph_mon_client *monc, int sub, u32 epoch, monc 131 include/linux/ceph/mon_client.h void ceph_monc_got_map(struct ceph_mon_client *monc, int sub, u32 epoch); monc 132 include/linux/ceph/mon_client.h void ceph_monc_renew_subs(struct ceph_mon_client *monc); monc 134 include/linux/ceph/mon_client.h extern int ceph_monc_wait_osdmap(struct ceph_mon_client *monc, u32 epoch, monc 137 include/linux/ceph/mon_client.h int ceph_monc_do_statfs(struct ceph_mon_client *monc, u64 data_pool, monc 140 include/linux/ceph/mon_client.h int ceph_monc_get_version(struct ceph_mon_client *monc, const char *what, monc 142 include/linux/ceph/mon_client.h int ceph_monc_get_version_async(struct ceph_mon_client *monc, const char *what, monc 145 include/linux/ceph/mon_client.h int ceph_monc_blacklist_add(struct ceph_mon_client *monc, monc 148 include/linux/ceph/mon_client.h extern int ceph_monc_open_session(struct ceph_mon_client *monc); monc 150 include/linux/ceph/mon_client.h extern int ceph_monc_validate_auth(struct ceph_mon_client *monc); monc 181 net/ceph/ceph_common.c if (ceph_monmap_contains(client->monc.monmap, monc 634 net/ceph/ceph_common.c return client->monc.auth->global_id; monc 676 net/ceph/ceph_common.c err = ceph_monc_init(&client->monc, client); monc 686 net/ceph/ceph_common.c ceph_monc_stop(&client->monc); monc 702 net/ceph/ceph_common.c ceph_monc_stop(&client->monc); monc 717 net/ceph/ceph_common.c ceph_monc_reopen_session(&client->monc); monc 727 net/ceph/ceph_common.c return client->monc.monmap && client->monc.monmap->epoch && monc 740 net/ceph/ceph_common.c err = ceph_monc_open_session(&client->monc); monc 788 net/ceph/ceph_common.c ret = ceph_monc_get_version(&client->monc, "osdmap", &newest_epoch); monc 796 net/ceph/ceph_common.c return ceph_monc_wait_osdmap(&client->monc, newest_epoch, timeout); monc 39 net/ceph/debugfs.c if (client->monc.monmap == NULL) monc 42 net/ceph/debugfs.c seq_printf(s, "epoch %d\n", client->monc.monmap->epoch); monc 43 net/ceph/debugfs.c for (i = 0; i < client->monc.monmap->num_mon; i++) { monc 45 net/ceph/debugfs.c &client->monc.monmap->mon_inst[i]; monc 140 net/ceph/debugfs.c struct ceph_mon_client *monc = &client->monc; monc 144 net/ceph/debugfs.c mutex_lock(&monc->mutex); monc 146 net/ceph/debugfs.c for (i = 0; i < ARRAY_SIZE(monc->subs); i++) { monc 148 net/ceph/debugfs.c monc->subs[i].have); monc 149 net/ceph/debugfs.c if (monc->subs[i].want) monc 151 net/ceph/debugfs.c le64_to_cpu(monc->subs[i].item.start), monc 152 net/ceph/debugfs.c (monc->subs[i].item.flags & monc 156 net/ceph/debugfs.c seq_printf(s, "fs_cluster_id %d\n", monc->fs_cluster_id); monc 158 net/ceph/debugfs.c for (rp = rb_first(&monc->generic_request_tree); rp; rp = rb_next(rp)) { monc 170 net/ceph/debugfs.c mutex_unlock(&monc->mutex); monc 407 net/ceph/debugfs.c client->monc.auth->global_id); monc 413 net/ceph/debugfs.c client->monc.debugfs_file = debugfs_create_file("monc", monc 451 net/ceph/debugfs.c debugfs_remove(client->monc.debugfs_file); monc 37 net/ceph/mon_client.c static int __validate_auth(struct ceph_mon_client *monc); monc 108 net/ceph/mon_client.c static void __send_prepared_auth_request(struct ceph_mon_client *monc, int len) monc 110 net/ceph/mon_client.c monc->pending_auth = 1; monc 111 net/ceph/mon_client.c monc->m_auth->front.iov_len = len; monc 112 net/ceph/mon_client.c monc->m_auth->hdr.front_len = cpu_to_le32(len); monc 113 net/ceph/mon_client.c ceph_msg_revoke(monc->m_auth); monc 114 net/ceph/mon_client.c ceph_msg_get(monc->m_auth); /* keep our ref */ monc 115 net/ceph/mon_client.c ceph_con_send(&monc->con, monc->m_auth); monc 121 net/ceph/mon_client.c static void __close_session(struct ceph_mon_client *monc) monc 123 net/ceph/mon_client.c dout("__close_session closing mon%d\n", monc->cur_mon); monc 124 net/ceph/mon_client.c ceph_msg_revoke(monc->m_auth); monc 125 net/ceph/mon_client.c ceph_msg_revoke_incoming(monc->m_auth_reply); monc 126 net/ceph/mon_client.c ceph_msg_revoke(monc->m_subscribe); monc 127 net/ceph/mon_client.c ceph_msg_revoke_incoming(monc->m_subscribe_ack); monc 128 net/ceph/mon_client.c ceph_con_close(&monc->con); monc 130 net/ceph/mon_client.c monc->pending_auth = 0; monc 131 net/ceph/mon_client.c ceph_auth_reset(monc->auth); monc 138 net/ceph/mon_client.c static void pick_new_mon(struct ceph_mon_client *monc) monc 140 net/ceph/mon_client.c int old_mon = monc->cur_mon; monc 142 net/ceph/mon_client.c BUG_ON(monc->monmap->num_mon < 1); monc 144 net/ceph/mon_client.c if (monc->monmap->num_mon == 1) { monc 145 net/ceph/mon_client.c monc->cur_mon = 0; monc 147 net/ceph/mon_client.c int max = monc->monmap->num_mon; monc 151 net/ceph/mon_client.c if (monc->cur_mon >= 0) { monc 152 net/ceph/mon_client.c if (monc->cur_mon < monc->monmap->num_mon) monc 153 net/ceph/mon_client.c o = monc->cur_mon; monc 162 net/ceph/mon_client.c monc->cur_mon = n; monc 166 net/ceph/mon_client.c monc->cur_mon, monc->monmap->num_mon); monc 172 net/ceph/mon_client.c static void __open_session(struct ceph_mon_client *monc) monc 176 net/ceph/mon_client.c pick_new_mon(monc); monc 178 net/ceph/mon_client.c monc->hunting = true; monc 179 net/ceph/mon_client.c if (monc->had_a_connection) { monc 180 net/ceph/mon_client.c monc->hunt_mult *= CEPH_MONC_HUNT_BACKOFF; monc 181 net/ceph/mon_client.c if (monc->hunt_mult > CEPH_MONC_HUNT_MAX_MULT) monc 182 net/ceph/mon_client.c monc->hunt_mult = CEPH_MONC_HUNT_MAX_MULT; monc 185 net/ceph/mon_client.c monc->sub_renew_after = jiffies; /* i.e., expired */ monc 186 net/ceph/mon_client.c monc->sub_renew_sent = 0; monc 188 net/ceph/mon_client.c dout("%s opening mon%d\n", __func__, monc->cur_mon); monc 189 net/ceph/mon_client.c ceph_con_open(&monc->con, CEPH_ENTITY_TYPE_MON, monc->cur_mon, monc 190 net/ceph/mon_client.c &monc->monmap->mon_inst[monc->cur_mon].addr); monc 196 net/ceph/mon_client.c ceph_con_keepalive(&monc->con); monc 199 net/ceph/mon_client.c ret = ceph_auth_build_hello(monc->auth, monc 200 net/ceph/mon_client.c monc->m_auth->front.iov_base, monc 201 net/ceph/mon_client.c monc->m_auth->front_alloc_len); monc 203 net/ceph/mon_client.c __send_prepared_auth_request(monc, ret); monc 206 net/ceph/mon_client.c static void reopen_session(struct ceph_mon_client *monc) monc 208 net/ceph/mon_client.c if (!monc->hunting) monc 210 net/ceph/mon_client.c monc->cur_mon, ceph_pr_addr(&monc->con.peer_addr)); monc 212 net/ceph/mon_client.c __close_session(monc); monc 213 net/ceph/mon_client.c __open_session(monc); monc 216 net/ceph/mon_client.c void ceph_monc_reopen_session(struct ceph_mon_client *monc) monc 218 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 219 net/ceph/mon_client.c reopen_session(monc); monc 220 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 223 net/ceph/mon_client.c static void un_backoff(struct ceph_mon_client *monc) monc 225 net/ceph/mon_client.c monc->hunt_mult /= 2; /* reduce by 50% */ monc 226 net/ceph/mon_client.c if (monc->hunt_mult < 1) monc 227 net/ceph/mon_client.c monc->hunt_mult = 1; monc 228 net/ceph/mon_client.c dout("%s hunt_mult now %d\n", __func__, monc->hunt_mult); monc 234 net/ceph/mon_client.c static void __schedule_delayed(struct ceph_mon_client *monc) monc 238 net/ceph/mon_client.c if (monc->hunting) monc 239 net/ceph/mon_client.c delay = CEPH_MONC_HUNT_INTERVAL * monc->hunt_mult; monc 244 net/ceph/mon_client.c mod_delayed_work(system_wq, &monc->delayed_work, monc 259 net/ceph/mon_client.c static void __send_subscribe(struct ceph_mon_client *monc) monc 261 net/ceph/mon_client.c struct ceph_msg *msg = monc->m_subscribe; monc 267 net/ceph/mon_client.c dout("%s sent %lu\n", __func__, monc->sub_renew_sent); monc 269 net/ceph/mon_client.c BUG_ON(monc->cur_mon < 0); monc 271 net/ceph/mon_client.c if (!monc->sub_renew_sent) monc 272 net/ceph/mon_client.c monc->sub_renew_sent = jiffies | 1; /* never 0 */ monc 276 net/ceph/mon_client.c for (i = 0; i < ARRAY_SIZE(monc->subs); i++) { monc 277 net/ceph/mon_client.c if (monc->subs[i].want) monc 282 net/ceph/mon_client.c for (i = 0; i < ARRAY_SIZE(monc->subs); i++) { monc 286 net/ceph/mon_client.c if (!monc->subs[i].want) monc 291 net/ceph/mon_client.c monc->fs_cluster_id != CEPH_FS_CLUSTER_ID_NONE) monc 292 net/ceph/mon_client.c len += sprintf(buf + len, ".%d", monc->fs_cluster_id); monc 295 net/ceph/mon_client.c le64_to_cpu(monc->subs[i].item.start), monc 296 net/ceph/mon_client.c monc->subs[i].item.flags); monc 298 net/ceph/mon_client.c memcpy(p, &monc->subs[i].item, sizeof(monc->subs[i].item)); monc 299 net/ceph/mon_client.c p += sizeof(monc->subs[i].item); monc 306 net/ceph/mon_client.c ceph_con_send(&monc->con, ceph_msg_get(msg)); monc 309 net/ceph/mon_client.c static void handle_subscribe_ack(struct ceph_mon_client *monc, monc 319 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 320 net/ceph/mon_client.c if (monc->sub_renew_sent) { monc 325 net/ceph/mon_client.c monc->sub_renew_after = monc->sub_renew_sent + monc 328 net/ceph/mon_client.c monc->sub_renew_sent, seconds, monc->sub_renew_after); monc 329 net/ceph/mon_client.c monc->sub_renew_sent = 0; monc 332 net/ceph/mon_client.c monc->sub_renew_sent, monc->sub_renew_after); monc 334 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 347 net/ceph/mon_client.c static bool __ceph_monc_want_map(struct ceph_mon_client *monc, int sub, monc 356 net/ceph/mon_client.c if (monc->subs[sub].want && monc 357 net/ceph/mon_client.c monc->subs[sub].item.start == start && monc 358 net/ceph/mon_client.c monc->subs[sub].item.flags == flags) monc 361 net/ceph/mon_client.c monc->subs[sub].item.start = start; monc 362 net/ceph/mon_client.c monc->subs[sub].item.flags = flags; monc 363 net/ceph/mon_client.c monc->subs[sub].want = true; monc 368 net/ceph/mon_client.c bool ceph_monc_want_map(struct ceph_mon_client *monc, int sub, u32 epoch, monc 373 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 374 net/ceph/mon_client.c need_request = __ceph_monc_want_map(monc, sub, epoch, continuous); monc 375 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 386 net/ceph/mon_client.c static void __ceph_monc_got_map(struct ceph_mon_client *monc, int sub, monc 391 net/ceph/mon_client.c if (monc->subs[sub].want) { monc 392 net/ceph/mon_client.c if (monc->subs[sub].item.flags & CEPH_SUBSCRIBE_ONETIME) monc 393 net/ceph/mon_client.c monc->subs[sub].want = false; monc 395 net/ceph/mon_client.c monc->subs[sub].item.start = cpu_to_le64(epoch + 1); monc 398 net/ceph/mon_client.c monc->subs[sub].have = epoch; monc 401 net/ceph/mon_client.c void ceph_monc_got_map(struct ceph_mon_client *monc, int sub, u32 epoch) monc 403 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 404 net/ceph/mon_client.c __ceph_monc_got_map(monc, sub, epoch); monc 405 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 409 net/ceph/mon_client.c void ceph_monc_renew_subs(struct ceph_mon_client *monc) monc 411 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 412 net/ceph/mon_client.c __send_subscribe(monc); monc 413 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 423 net/ceph/mon_client.c int ceph_monc_wait_osdmap(struct ceph_mon_client *monc, u32 epoch, monc 429 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 430 net/ceph/mon_client.c while (monc->subs[CEPH_SUB_OSDMAP].have < epoch) { monc 431 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 436 net/ceph/mon_client.c ret = wait_event_interruptible_timeout(monc->client->auth_wq, monc 437 net/ceph/mon_client.c monc->subs[CEPH_SUB_OSDMAP].have >= epoch, monc 442 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 445 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 454 net/ceph/mon_client.c int ceph_monc_open_session(struct ceph_mon_client *monc) monc 456 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 457 net/ceph/mon_client.c __ceph_monc_want_map(monc, CEPH_SUB_MONMAP, 0, true); monc 458 net/ceph/mon_client.c __ceph_monc_want_map(monc, CEPH_SUB_OSDMAP, 0, false); monc 459 net/ceph/mon_client.c __open_session(monc); monc 460 net/ceph/mon_client.c __schedule_delayed(monc); monc 461 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 466 net/ceph/mon_client.c static void ceph_monc_handle_map(struct ceph_mon_client *monc, monc 469 net/ceph/mon_client.c struct ceph_client *client = monc->client; monc 470 net/ceph/mon_client.c struct ceph_monmap *monmap = NULL, *old = monc->monmap; monc 473 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 487 net/ceph/mon_client.c if (ceph_check_fsid(monc->client, &monmap->fsid) < 0) { monc 492 net/ceph/mon_client.c client->monc.monmap = monmap; monc 495 net/ceph/mon_client.c __ceph_monc_got_map(monc, CEPH_SUB_MONMAP, monc->monmap->epoch); monc 499 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 537 net/ceph/mon_client.c alloc_generic_request(struct ceph_mon_client *monc, gfp_t gfp) monc 545 net/ceph/mon_client.c req->monc = monc; monc 556 net/ceph/mon_client.c struct ceph_mon_client *monc = req->monc; monc 561 net/ceph/mon_client.c req->tid = ++monc->last_tid; monc 562 net/ceph/mon_client.c insert_generic_request(&monc->generic_request_tree, req); monc 565 net/ceph/mon_client.c static void send_generic_request(struct ceph_mon_client *monc, monc 572 net/ceph/mon_client.c ceph_con_send(&monc->con, ceph_msg_get(req->request)); monc 577 net/ceph/mon_client.c struct ceph_mon_client *monc = req->monc; monc 580 net/ceph/mon_client.c erase_generic_request(&monc->generic_request_tree, req); monc 603 net/ceph/mon_client.c struct ceph_mon_client *monc = req->monc; monc 608 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 609 net/ceph/mon_client.c lookup_req = lookup_generic_request(&monc->generic_request_tree, monc 616 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 637 net/ceph/mon_client.c struct ceph_mon_client *monc = con->private; monc 642 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 643 net/ceph/mon_client.c req = lookup_generic_request(&monc->generic_request_tree, tid); monc 658 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 665 net/ceph/mon_client.c static void handle_statfs_reply(struct ceph_mon_client *monc, monc 677 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 678 net/ceph/mon_client.c req = lookup_generic_request(&monc->generic_request_tree, tid); monc 680 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 687 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 700 net/ceph/mon_client.c int ceph_monc_do_statfs(struct ceph_mon_client *monc, u64 data_pool, monc 707 net/ceph/mon_client.c req = alloc_generic_request(monc, GFP_NOFS); monc 723 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 730 net/ceph/mon_client.c h->fsid = monc->monmap->fsid; monc 733 net/ceph/mon_client.c send_generic_request(monc, req); monc 734 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 743 net/ceph/mon_client.c static void handle_get_version_reply(struct ceph_mon_client *monc, monc 759 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 760 net/ceph/mon_client.c req = lookup_generic_request(&monc->generic_request_tree, handle); monc 762 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 769 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 780 net/ceph/mon_client.c __ceph_monc_get_version(struct ceph_mon_client *monc, const char *what, monc 785 net/ceph/mon_client.c req = alloc_generic_request(monc, GFP_NOIO); monc 803 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 813 net/ceph/mon_client.c send_generic_request(monc, req); monc 814 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 828 net/ceph/mon_client.c int ceph_monc_get_version(struct ceph_mon_client *monc, const char *what, monc 834 net/ceph/mon_client.c req = __ceph_monc_get_version(monc, what, NULL, 0); monc 852 net/ceph/mon_client.c int ceph_monc_get_version_async(struct ceph_mon_client *monc, const char *what, monc 857 net/ceph/mon_client.c req = __ceph_monc_get_version(monc, what, cb, private_data); monc 866 net/ceph/mon_client.c static void handle_command_ack(struct ceph_mon_client *monc, monc 880 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 881 net/ceph/mon_client.c req = lookup_generic_request(&monc->generic_request_tree, tid); monc 883 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 889 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 899 net/ceph/mon_client.c int ceph_monc_blacklist_add(struct ceph_mon_client *monc, monc 907 net/ceph/mon_client.c req = alloc_generic_request(monc, GFP_NOIO); monc 920 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 926 net/ceph/mon_client.c h->fsid = monc->monmap->fsid; monc 933 net/ceph/mon_client.c send_generic_request(monc, req); monc 934 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 944 net/ceph/mon_client.c ret = ceph_wait_for_latest_osdmap(monc->client, 0); monc 955 net/ceph/mon_client.c static void __resend_generic_request(struct ceph_mon_client *monc) monc 960 net/ceph/mon_client.c for (p = rb_first(&monc->generic_request_tree); p; p = rb_next(p)) { monc 964 net/ceph/mon_client.c ceph_con_send(&monc->con, ceph_msg_get(req->request)); monc 975 net/ceph/mon_client.c struct ceph_mon_client *monc = monc 979 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 980 net/ceph/mon_client.c if (monc->hunting) { monc 982 net/ceph/mon_client.c reopen_session(monc); monc 984 net/ceph/mon_client.c int is_auth = ceph_auth_is_authenticated(monc->auth); monc 985 net/ceph/mon_client.c if (ceph_con_keepalive_expired(&monc->con, monc 989 net/ceph/mon_client.c reopen_session(monc); monc 992 net/ceph/mon_client.c if (!monc->hunting) { monc 993 net/ceph/mon_client.c ceph_con_keepalive(&monc->con); monc 994 net/ceph/mon_client.c __validate_auth(monc); monc 995 net/ceph/mon_client.c un_backoff(monc); monc 999 net/ceph/mon_client.c !(monc->con.peer_features & CEPH_FEATURE_MON_STATEFUL_SUB)) { monc 1003 net/ceph/mon_client.c __func__, now, monc->sub_renew_after); monc 1004 net/ceph/mon_client.c if (time_after_eq(now, monc->sub_renew_after)) monc 1005 net/ceph/mon_client.c __send_subscribe(monc); monc 1008 net/ceph/mon_client.c __schedule_delayed(monc); monc 1009 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 1016 net/ceph/mon_client.c static int build_initial_monmap(struct ceph_mon_client *monc) monc 1018 net/ceph/mon_client.c struct ceph_options *opt = monc->client->options; monc 1024 net/ceph/mon_client.c monc->monmap = kzalloc(struct_size(monc->monmap, mon_inst, num_mon), monc 1026 net/ceph/mon_client.c if (!monc->monmap) monc 1029 net/ceph/mon_client.c monc->monmap->mon_inst[i].addr = mon_addr[i]; monc 1030 net/ceph/mon_client.c monc->monmap->mon_inst[i].addr.nonce = 0; monc 1031 net/ceph/mon_client.c monc->monmap->mon_inst[i].name.type = monc 1033 net/ceph/mon_client.c monc->monmap->mon_inst[i].name.num = cpu_to_le64(i); monc 1035 net/ceph/mon_client.c monc->monmap->num_mon = num_mon; monc 1039 net/ceph/mon_client.c int ceph_monc_init(struct ceph_mon_client *monc, struct ceph_client *cl) monc 1044 net/ceph/mon_client.c memset(monc, 0, sizeof(*monc)); monc 1045 net/ceph/mon_client.c monc->client = cl; monc 1046 net/ceph/mon_client.c monc->monmap = NULL; monc 1047 net/ceph/mon_client.c mutex_init(&monc->mutex); monc 1049 net/ceph/mon_client.c err = build_initial_monmap(monc); monc 1055 net/ceph/mon_client.c monc->auth = ceph_auth_init(cl->options->name, monc 1057 net/ceph/mon_client.c if (IS_ERR(monc->auth)) { monc 1058 net/ceph/mon_client.c err = PTR_ERR(monc->auth); monc 1061 net/ceph/mon_client.c monc->auth->want_keys = monc 1067 net/ceph/mon_client.c monc->m_subscribe_ack = ceph_msg_new(CEPH_MSG_MON_SUBSCRIBE_ACK, monc 1070 net/ceph/mon_client.c if (!monc->m_subscribe_ack) monc 1073 net/ceph/mon_client.c monc->m_subscribe = ceph_msg_new(CEPH_MSG_MON_SUBSCRIBE, 128, monc 1075 net/ceph/mon_client.c if (!monc->m_subscribe) monc 1078 net/ceph/mon_client.c monc->m_auth_reply = ceph_msg_new(CEPH_MSG_AUTH_REPLY, 4096, monc 1080 net/ceph/mon_client.c if (!monc->m_auth_reply) monc 1083 net/ceph/mon_client.c monc->m_auth = ceph_msg_new(CEPH_MSG_AUTH, 4096, GFP_KERNEL, true); monc 1084 net/ceph/mon_client.c monc->pending_auth = 0; monc 1085 net/ceph/mon_client.c if (!monc->m_auth) monc 1088 net/ceph/mon_client.c ceph_con_init(&monc->con, monc, &mon_con_ops, monc 1089 net/ceph/mon_client.c &monc->client->msgr); monc 1091 net/ceph/mon_client.c monc->cur_mon = -1; monc 1092 net/ceph/mon_client.c monc->had_a_connection = false; monc 1093 net/ceph/mon_client.c monc->hunt_mult = 1; monc 1095 net/ceph/mon_client.c INIT_DELAYED_WORK(&monc->delayed_work, delayed_work); monc 1096 net/ceph/mon_client.c monc->generic_request_tree = RB_ROOT; monc 1097 net/ceph/mon_client.c monc->last_tid = 0; monc 1099 net/ceph/mon_client.c monc->fs_cluster_id = CEPH_FS_CLUSTER_ID_NONE; monc 1104 net/ceph/mon_client.c ceph_msg_put(monc->m_auth_reply); monc 1106 net/ceph/mon_client.c ceph_msg_put(monc->m_subscribe); monc 1108 net/ceph/mon_client.c ceph_msg_put(monc->m_subscribe_ack); monc 1110 net/ceph/mon_client.c ceph_auth_destroy(monc->auth); monc 1112 net/ceph/mon_client.c kfree(monc->monmap); monc 1118 net/ceph/mon_client.c void ceph_monc_stop(struct ceph_mon_client *monc) monc 1121 net/ceph/mon_client.c cancel_delayed_work_sync(&monc->delayed_work); monc 1123 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 1124 net/ceph/mon_client.c __close_session(monc); monc 1125 net/ceph/mon_client.c monc->cur_mon = -1; monc 1126 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 1136 net/ceph/mon_client.c ceph_auth_destroy(monc->auth); monc 1138 net/ceph/mon_client.c WARN_ON(!RB_EMPTY_ROOT(&monc->generic_request_tree)); monc 1140 net/ceph/mon_client.c ceph_msg_put(monc->m_auth); monc 1141 net/ceph/mon_client.c ceph_msg_put(monc->m_auth_reply); monc 1142 net/ceph/mon_client.c ceph_msg_put(monc->m_subscribe); monc 1143 net/ceph/mon_client.c ceph_msg_put(monc->m_subscribe_ack); monc 1145 net/ceph/mon_client.c kfree(monc->monmap); monc 1149 net/ceph/mon_client.c static void finish_hunting(struct ceph_mon_client *monc) monc 1151 net/ceph/mon_client.c if (monc->hunting) { monc 1152 net/ceph/mon_client.c dout("%s found mon%d\n", __func__, monc->cur_mon); monc 1153 net/ceph/mon_client.c monc->hunting = false; monc 1154 net/ceph/mon_client.c monc->had_a_connection = true; monc 1155 net/ceph/mon_client.c un_backoff(monc); monc 1156 net/ceph/mon_client.c __schedule_delayed(monc); monc 1160 net/ceph/mon_client.c static void handle_auth_reply(struct ceph_mon_client *monc, monc 1166 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 1167 net/ceph/mon_client.c was_auth = ceph_auth_is_authenticated(monc->auth); monc 1168 net/ceph/mon_client.c monc->pending_auth = 0; monc 1169 net/ceph/mon_client.c ret = ceph_handle_auth_reply(monc->auth, msg->front.iov_base, monc 1171 net/ceph/mon_client.c monc->m_auth->front.iov_base, monc 1172 net/ceph/mon_client.c monc->m_auth->front_alloc_len); monc 1174 net/ceph/mon_client.c __send_prepared_auth_request(monc, ret); monc 1178 net/ceph/mon_client.c finish_hunting(monc); monc 1181 net/ceph/mon_client.c monc->client->auth_err = ret; monc 1182 net/ceph/mon_client.c } else if (!was_auth && ceph_auth_is_authenticated(monc->auth)) { monc 1185 net/ceph/mon_client.c monc->client->msgr.inst.name.type = CEPH_ENTITY_TYPE_CLIENT; monc 1186 net/ceph/mon_client.c monc->client->msgr.inst.name.num = monc 1187 net/ceph/mon_client.c cpu_to_le64(monc->auth->global_id); monc 1189 net/ceph/mon_client.c __send_subscribe(monc); monc 1190 net/ceph/mon_client.c __resend_generic_request(monc); monc 1192 net/ceph/mon_client.c pr_info("mon%d %s session established\n", monc->cur_mon, monc 1193 net/ceph/mon_client.c ceph_pr_addr(&monc->con.peer_addr)); monc 1197 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 1198 net/ceph/mon_client.c if (monc->client->auth_err < 0) monc 1199 net/ceph/mon_client.c wake_up_all(&monc->client->auth_wq); monc 1202 net/ceph/mon_client.c static int __validate_auth(struct ceph_mon_client *monc) monc 1206 net/ceph/mon_client.c if (monc->pending_auth) monc 1209 net/ceph/mon_client.c ret = ceph_build_auth(monc->auth, monc->m_auth->front.iov_base, monc 1210 net/ceph/mon_client.c monc->m_auth->front_alloc_len); monc 1213 net/ceph/mon_client.c __send_prepared_auth_request(monc, ret); monc 1217 net/ceph/mon_client.c int ceph_monc_validate_auth(struct ceph_mon_client *monc) monc 1221 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 1222 net/ceph/mon_client.c ret = __validate_auth(monc); monc 1223 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 1233 net/ceph/mon_client.c struct ceph_mon_client *monc = con->private; monc 1236 net/ceph/mon_client.c if (!monc) monc 1241 net/ceph/mon_client.c handle_auth_reply(monc, msg); monc 1245 net/ceph/mon_client.c handle_subscribe_ack(monc, msg); monc 1249 net/ceph/mon_client.c handle_statfs_reply(monc, msg); monc 1253 net/ceph/mon_client.c handle_get_version_reply(monc, msg); monc 1257 net/ceph/mon_client.c handle_command_ack(monc, msg); monc 1261 net/ceph/mon_client.c ceph_monc_handle_map(monc, msg); monc 1265 net/ceph/mon_client.c ceph_osdc_handle_map(&monc->client->osdc, msg); monc 1270 net/ceph/mon_client.c if (monc->client->extra_mon_dispatch && monc 1271 net/ceph/mon_client.c monc->client->extra_mon_dispatch(monc->client, msg) == 0) monc 1287 net/ceph/mon_client.c struct ceph_mon_client *monc = con->private; monc 1296 net/ceph/mon_client.c m = ceph_msg_get(monc->m_subscribe_ack); monc 1302 net/ceph/mon_client.c m = ceph_msg_get(monc->m_auth_reply); monc 1345 net/ceph/mon_client.c struct ceph_mon_client *monc = con->private; monc 1347 net/ceph/mon_client.c mutex_lock(&monc->mutex); monc 1348 net/ceph/mon_client.c dout("%s mon%d\n", __func__, monc->cur_mon); monc 1349 net/ceph/mon_client.c if (monc->cur_mon >= 0) { monc 1350 net/ceph/mon_client.c if (!monc->hunting) { monc 1352 net/ceph/mon_client.c reopen_session(monc); monc 1353 net/ceph/mon_client.c __schedule_delayed(monc); monc 1358 net/ceph/mon_client.c mutex_unlock(&monc->mutex); monc 2270 net/ceph/osd_client.c if (ceph_monc_want_map(&osdc->client->monc, CEPH_SUB_OSDMAP, monc 2272 net/ceph/osd_client.c ceph_monc_renew_subs(&osdc->client->monc); monc 2604 net/ceph/osd_client.c struct ceph_osd_client *osdc = &greq->monc->client->osdc; monc 2645 net/ceph/osd_client.c ret = ceph_monc_get_version_async(&osdc->client->monc, "osdmap", monc 3198 net/ceph/osd_client.c struct ceph_osd_client *osdc = &greq->monc->client->osdc; monc 3241 net/ceph/osd_client.c ret = ceph_monc_get_version_async(&osdc->client->monc, "osdmap", monc 4053 net/ceph/osd_client.c ceph_monc_got_map(&osdc->client->monc, CEPH_SUB_OSDMAP, monc 5582 net/ceph/osd_client.c struct ceph_auth_client *ac = osdc->client->monc.auth; monc 5610 net/ceph/osd_client.c struct ceph_auth_client *ac = osdc->client->monc.auth; monc 5620 net/ceph/osd_client.c struct ceph_auth_client *ac = osdc->client->monc.auth; monc 5629 net/ceph/osd_client.c struct ceph_auth_client *ac = osdc->client->monc.auth; monc 5632 net/ceph/osd_client.c return ceph_monc_validate_auth(&osdc->client->monc);