noop-iosched.c
上传用户:ajay2009
上传日期:2009-05-22
资源大小:495k
文件大小:2k
源码类别:

驱动编程

开发平台:

Unix_Linux

  1. /*
  2.  * elevator noop
  3.  */
  4. #include <linux/blkdev.h>
  5. #include <linux/elevator.h>
  6. #include <linux/bio.h>
  7. #include <linux/module.h>
  8. #include <linux/init.h>
  9. /*
  10.  * See if we can find a request that this buffer can be coalesced with.
  11.  */
  12. static int elevator_noop_merge(request_queue_t *q, struct request **req,
  13.        struct bio *bio)
  14. {
  15. int ret;
  16. ret = elv_try_last_merge(q, bio);
  17. if (ret != ELEVATOR_NO_MERGE)
  18. *req = q->last_merge;
  19. return ret;
  20. }
  21. static void elevator_noop_merge_requests(request_queue_t *q, struct request *req,
  22.  struct request *next)
  23. {
  24. list_del_init(&next->queuelist);
  25. }
  26. static void elevator_noop_add_request(request_queue_t *q, struct request *rq,
  27.       int where)
  28. {
  29. if (where == ELEVATOR_INSERT_FRONT)
  30. list_add(&rq->queuelist, &q->queue_head);
  31. else
  32. list_add_tail(&rq->queuelist, &q->queue_head);
  33. /*
  34.  * new merges must not precede this barrier
  35.  */
  36. if (rq->flags & REQ_HARDBARRIER)
  37. q->last_merge = NULL;
  38. else if (!q->last_merge)
  39. q->last_merge = rq;
  40. }
  41. static struct request *elevator_noop_next_request(request_queue_t *q)
  42. {
  43. if (!list_empty(&q->queue_head))
  44. return list_entry_rq(q->queue_head.next);
  45. return NULL;
  46. }
  47. static struct elevator_type elevator_noop = {
  48. .ops = {
  49. .elevator_merge_fn = elevator_noop_merge,
  50. .elevator_merge_req_fn = elevator_noop_merge_requests,
  51. .elevator_next_req_fn = elevator_noop_next_request,
  52. .elevator_add_req_fn = elevator_noop_add_request,
  53. },
  54. .elevator_name = "noop",
  55. .elevator_owner = THIS_MODULE,
  56. };
  57. static int __init noop_init(void)
  58. {
  59. return elv_register(&elevator_noop);
  60. }
  61. static void __exit noop_exit(void)
  62. {
  63. elv_unregister(&elevator_noop);
  64. }
  65. module_init(noop_init);
  66. module_exit(noop_exit);
  67. MODULE_AUTHOR("Jens Axboe");
  68. MODULE_LICENSE("GPL");
  69. MODULE_DESCRIPTION("No-op IO scheduler");