rbd.c
rbd 在内核的linux-3.13.8/drivers/block目录下。
模块的初始化文件为rbd_init.
5321 module_init(rbd_init);
5322 module_exit(rbd_exit);
rbd_slab_init kmem_cache_create 从 kmem_cache 中获取一个缓存器描述符,并且根据参数初始化一些必要字段。
rbd_sysfs_init->device_register ->bus_register
static struct device rbd_root_dev = { .init_name = "rbd", .release = rbd_root_dev_release, };
调用流程
rbd_add->rbd_add_parse_args->ceph_parse_options -> ceph_parse_ips ->match_token->parse_extra_token ->get_secret->(request_key,ceph_crypto_key_clone) ->rbd_dev_create ->rbd_dev_image_probe ->rbd_dev_header_watch_sync ->rbd_obj_request_create ->rbd_osd_req_create->ceph_osdc_alloc_request->ceph_msg_new
libceph.ko
44 module_init(init_ceph_lib); 645 module_exit(exit_ceph_lib);
init_ceph_lib ->ceph_crypto_init->register_key_type;
key_type_ceph 结构体
484 struct key_type key_type_ceph = { 485 .name = "ceph", 486 .instantiate = ceph_key_instantiate, 487 .match = ceph_key_match, 488 .destroy = ceph_key_destroy, 489 };
ceph_key_instantiate->ceph_crypto_key_decode
660 static const struct ceph_auth_client_ops ceph_x_ops = { 661 .name = "x", 662 .is_authenticated = ceph_x_is_authenticated, 663 .should_authenticate = ceph_x_should_authenticate, 664 .build_request = ceph_x_build_request, 665 .handle_reply = ceph_x_handle_reply, 666 .create_authorizer = ceph_x_create_authorizer, 667 .update_authorizer = ceph_x_update_authorizer, 668 .verify_authorizer_reply = ceph_x_verify_authorizer_reply, 669 .destroy_authorizer = ceph_x_destroy_authorizer, 670 .invalidate_authorizer = ceph_x_invalidate_authorizer, 671 .reset = ceph_x_reset, 672 .destroy = ceph_x_destroy, 673 };
ceph涉及AES加密流程:
dispatch->handle_auth_reply ->ceph_handle_auth_reply ->ceph_x_handle_reply ->ceph_x_proc_ticket_reply ->ceph_x_decrypt ->ceph_decrypt2 ->ceph_aes_decrypt2