summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/block/elevator.c10
-rw-r--r--drivers/block/ll_rw_blk.c4
-rw-r--r--drivers/s390/block/dasd.c6
-rw-r--r--include/linux/elevator.h4
4 files changed, 13 insertions, 11 deletions
diff --git a/drivers/block/elevator.c b/drivers/block/elevator.c
index 9237eec87ba4..0b1517f93501 100644
--- a/drivers/block/elevator.c
+++ b/drivers/block/elevator.c
@@ -217,9 +217,11 @@ struct request *elevator_noop_next_request(request_queue_t *q)
/*
* general block -> elevator interface starts here
*/
-int elevator_init(request_queue_t *q, elevator_t *e, elevator_t type)
+int elevator_init(request_queue_t *q, elevator_t *type)
{
- *e = type;
+ elevator_t *e = &q->elevator;
+
+ memcpy(e, type, sizeof(*e));
INIT_LIST_HEAD(&q->queue_head);
q->last_merge = NULL;
@@ -230,8 +232,10 @@ int elevator_init(request_queue_t *q, elevator_t *e, elevator_t type)
return 0;
}
-void elevator_exit(request_queue_t *q, elevator_t *e)
+void elevator_exit(request_queue_t *q)
{
+ elevator_t *e = &q->elevator;
+
if (e->elevator_exit_fn)
e->elevator_exit_fn(q, e);
}
diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c
index 01720fdccb1c..e5a0f98423d2 100644
--- a/drivers/block/ll_rw_blk.c
+++ b/drivers/block/ll_rw_blk.c
@@ -1145,7 +1145,7 @@ void blk_cleanup_queue(request_queue_t * q)
if (blk_queue_tagged(q))
blk_queue_free_tags(q);
- elevator_exit(q, &q->elevator);
+ elevator_exit(q);
memset(q, 0, sizeof(*q));
}
@@ -1227,7 +1227,7 @@ int blk_init_queue(request_queue_t *q, request_fn_proc *rfn, spinlock_t *lock)
if (blk_init_free_list(q))
return -ENOMEM;
- if ((ret = elevator_init(q, &q->elevator, iosched_deadline))) {
+ if ((ret = elevator_init(q, &iosched_deadline))) {
blk_cleanup_queue(q);
return ret;
}
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index e9278eec247e..6ae8a0053b0a 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -2046,10 +2046,8 @@ dasd_setup_blkdev(dasd_device_t * device)
&device->request_queue_lock);
if (rc)
return rc;
- elevator_exit(device->request_queue, &device->request_queue->elevator);
- rc = elevator_init(device->request_queue,
- &device->request_queue->elevator,
- elevator_noop);
+ elevator_exit(device->request_queue);
+ rc = elevator_init(device->request_queue, &elevator_noop);
if (rc) {
blk_cleanup_queue(device->request_queue);
return rc;
diff --git a/include/linux/elevator.h b/include/linux/elevator.h
index 5c6c7db6e97e..8a54a1c5e5af 100644
--- a/include/linux/elevator.h
+++ b/include/linux/elevator.h
@@ -73,8 +73,8 @@ typedef struct blkelv_ioctl_arg_s {
#define BLKELVGET _IOR(0x12,106,sizeof(blkelv_ioctl_arg_t))
#define BLKELVSET _IOW(0x12,107,sizeof(blkelv_ioctl_arg_t))
-extern int elevator_init(request_queue_t *, elevator_t *, elevator_t);
-extern void elevator_exit(request_queue_t *, elevator_t *);
+extern int elevator_init(request_queue_t *, elevator_t *);
+extern void elevator_exit(request_queue_t *);
extern inline int bio_rq_in_between(struct bio *, struct request *, struct list_head *);
extern inline int elv_rq_merge_ok(struct request *, struct bio *);
extern inline int elv_try_merge(struct request *, struct bio *);