#include <linux/init.h>
#include <linux/compiler.h>
#include <linux/delay.h>
+#include <linux/blktrace_api.h>
#include <asm/uaccess.h>
strcpy(chosen_elevator, "anticipatory");
else
strncpy(chosen_elevator, str, sizeof(chosen_elevator) - 1);
- return 0;
+ return 1;
}
__setup("elevator=", elevator_setup);
{
struct list_head *pos;
unsigned ordseq;
+ int unplug_it = 1;
+
+ blk_add_trace_rq(q, rq, BLK_TA_INSERT);
rq->q = q;
}
list_add_tail(&rq->queuelist, pos);
+ /*
+ * most requeues happen because of a busy condition, don't
+ * force unplug of the queue for that case.
+ */
+ unplug_it = 0;
break;
default:
BUG();
}
- if (blk_queue_plugged(q)) {
+ if (unplug_it && blk_queue_plugged(q)) {
int nrq = q->rq.count[READ] + q->rq.count[WRITE]
- q->in_flight;
* not be passed by new incoming requests
*/
rq->flags |= REQ_STARTED;
+ blk_add_trace_rq(q, rq, BLK_TA_ISSUE);
}
if (!q->boundary_rq || q->boundary_rq == rq) {
error = kobject_add(&e->kobj);
if (!error) {
- struct attribute **attr = e->elevator_type->elevator_attrs;
+ struct elv_fs_entry *attr = e->elevator_type->elevator_attrs;
if (attr) {
- while (*attr) {
- if (sysfs_create_file(&e->kobj,*attr++))
+ while (attr->attr.name) {
+ if (sysfs_create_file(&e->kobj, &attr->attr))
break;
+ attr++;
}
}
kobject_uevent(&e->kobj, KOBJ_ADD);
int elv_register(struct elevator_type *e)
{
spin_lock_irq(&elv_list_lock);
- if (elevator_find(e->elevator_name))
- BUG();
+ BUG_ON(elevator_find(e->elevator_name));
list_add_tail(&e->list, &elv_list);
spin_unlock_irq(&elv_list_lock);
EXPORT_SYMBOL(elv_dispatch_sort);
EXPORT_SYMBOL(elv_add_request);
EXPORT_SYMBOL(__elv_add_request);
-EXPORT_SYMBOL(elv_requeue_request);
EXPORT_SYMBOL(elv_next_request);
EXPORT_SYMBOL(elv_dequeue_request);
EXPORT_SYMBOL(elv_queue_empty);
-EXPORT_SYMBOL(elv_completed_request);
EXPORT_SYMBOL(elevator_exit);
EXPORT_SYMBOL(elevator_init);