struct elevator_queue
来源:互联网 发布:尼泊尔淘宝 编辑:程序博客网 时间:2024/06/05 08:56
struct elevator_queue{struct elevator_type *type;void *elevator_data;struct kobject kobj;struct mutex sysfs_lock;unsigned int registered:1;DECLARE_HASHTABLE(hash, ELV_HASH_BITS);};
struct elevator_type{/* managed by elevator core */struct kmem_cache *icq_cache;/* fields provided by elevator implementation */struct elevator_ops ops;size_t icq_size;/* see iocontext.h */size_t icq_align;/* ditto */struct elv_fs_entry *elevator_attrs;char elevator_name[ELV_NAME_MAX];struct module *elevator_owner;/* managed by elevator core */char icq_cache_name[ELV_NAME_MAX + 5];/* elvname + "_io_cq" */struct list_head list;};
struct elevator_ops{elevator_merge_fn *elevator_merge_fn;elevator_merged_fn *elevator_merged_fn;elevator_merge_req_fn *elevator_merge_req_fn;elevator_allow_bio_merge_fn *elevator_allow_bio_merge_fn;elevator_allow_rq_merge_fn *elevator_allow_rq_merge_fn;elevator_bio_merged_fn *elevator_bio_merged_fn;elevator_dispatch_fn *elevator_dispatch_fn;elevator_add_req_fn *elevator_add_req_fn;elevator_activate_req_fn *elevator_activate_req_fn;elevator_deactivate_req_fn *elevator_deactivate_req_fn;elevator_completed_req_fn *elevator_completed_req_fn;elevator_request_list_fn *elevator_former_req_fn;elevator_request_list_fn *elevator_latter_req_fn;elevator_init_icq_fn *elevator_init_icq_fn;/* see iocontext.h */elevator_exit_icq_fn *elevator_exit_icq_fn;/* ditto */elevator_set_req_fn *elevator_set_req_fn;elevator_put_req_fn *elevator_put_req_fn;elevator_may_queue_fn *elevator_may_queue_fn;elevator_init_fn *elevator_init_fn;elevator_exit_fn *elevator_exit_fn;elevator_registered_fn *elevator_registered_fn;};
elevator_init()
int elevator_init(struct request_queue *q, char *name){struct elevator_type *e = NULL;int err;/* * q->sysfs_lock must be held to provide mutual exclusion between * elevator_switch() and here. */lockdep_assert_held(&q->sysfs_lock);if (unlikely(q->elevator))return 0;INIT_LIST_HEAD(&q->queue_head);q->last_merge = NULL;q->end_sector = 0;q->boundary_rq = NULL;if (name) {e = elevator_get(name, true);if (!e)return -EINVAL;}/* * Use the default elevator specified by config boot param or * config option. Don't try to load modules as we could be running * off async and request_module() isn't allowed from async. */if (!e && *chosen_elevator) {e = elevator_get(chosen_elevator, false);if (!e)printk(KERN_ERR "I/O scheduler %s not found\n",chosen_elevator);}if (!e) {e = elevator_get(CONFIG_DEFAULT_IOSCHED, false);if (!e) {printk(KERN_ERR"Default I/O scheduler not found. " \"Using noop.\n");e = elevator_get("noop", false);}}err = e->ops.elevator_init_fn(q, e);if (err)elevator_put(e);return err;}
void __init load_default_elevator_module(void);int elv_register(struct elevator_type *);void elv_unregister(struct elevator_type *);
Cfq-iosched.c elv_register(&iosched_cfq);Deadline-iosched.c elv_register(&iosched_deadline);
Noop-iosched.c elv_register(&elevator_noop);
0 0
- struct elevator_queue
- Struct
- struct
- struct
- struct
- Struct
- struct
- struct
- struct
- struct
- struct
- struct
- struct
- struct
- struct
- struct
- struct
- struct
- 类的模板
- 畅通工程 并查集
- 数据回显
- GeoHash核心原理解析
- gettid和pthread_self区别
- struct elevator_queue
- 一个今天遇到的vs编译器怪现象
- HINSTANCE和HWND的区别
- "finally block does not complete normally"警告解决
- 常用TCP端口表
- Win2003下IIS以FastCGI模式运行PHP
- Android利用 Zxing 生成/识别二维码
- 分糖果
- LeetCode题解(Week2):21. Merge Two Sorted Lists