Ceph-client内核代码分析(三)

static bool single_major = false;

模块参数,在进行第一次执行rbd map时,通过modinfo检查模块是否有single_major参数,如果有,则使用单主设备号模式。

static int rbd_major;

单主设备模式下,记录主设备号。

static DEFINE_IDA(rbd_dev_id_ida);

用来获取唯一的设备id。

static struct attribute *rbd_bus_attrs[]

bus属性,add,remove,add_single_major,remove_single_major

static const struct attribute_group rbd_bus_group

bus属性组,is_visible检查属性的可见性。

__ATTRIBUTE_GROUPS(rbd_bus);

bus属性组的属性组,rbd_bus_groups。

static struct bus_type rbd_bus_type

rbd设备的总线类型。

static struct device rbd_root_dev

rbd设备注册信息。

static const struct block_device_operations rbd_bd_ops

定义rbd块设备的通用操作,比如open,release,ioctl

static match_table_t rbd_opts_tokens

rbd map时默认块是可读写模式,可以指定–read-only,表示rbd块只读。

static struct attribute *rbd_attrs[]

rbd设备属性,比如大小,主次设备号,pool,image等。

static struct attribute_group rbd_attr_group

rbd设备属性组。

static const struct attribute_group *rbd_attr_groups[]

rbd设备属性组的属性组。

static struct device_type rbd_device_type

rbd设备类型。

static DEFINE_MUTEX(client_mutex);

保证在内核中rbd_client的创建是串行的。

static LIST_HEAD(rbd_dev_list);

每个rbd设备对应一个rbd_device结构,所有的rbd设备都挂在rbd_dev_list上。

static DEFINE_SPINLOCK(rbd_dev_list_lock);

保证在rbd_dev_list上添加删除rbd_device是串行的。

static LIST_HEAD(rbd_client_list);

每个rbd设备都需要一个rbd_client连接ceph集群,一个rbd_client可能服务多个rbd设备,每个rbd_client挂在rbd_client_list上。

static DEFINE_SPINLOCK(rbd_client_list_lock);

保证在rbd_client_list上添加删除rbd_client是串行的。

static struct kmem_cache *rbd_img_request_cache;

static struct kmem_cache *rbd_obj_request_cache;

static struct kmem_cache *rbd_segment_name_cache;

slab分配器,常用结构

static struct workqueue_struct *rbd_wq;

工作队列。

你可能感兴趣的:(ceph,rbd,krbd)