git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
block: fix bad definition of BIO_RW_SYNC
[safe/jmp/linux-2.6]
/
block
/
elevator.c
diff --git
a/block/elevator.c
b/block/elevator.c
index
e5677fe
..
98259ed
100644
(file)
--- a/
block/elevator.c
+++ b/
block/elevator.c
@@
-65,7
+65,7
@@
DEFINE_TRACE(block_rq_issue);
static int elv_iosched_allow_merge(struct request *rq, struct bio *bio)
{
struct request_queue *q = rq->q;
static int elv_iosched_allow_merge(struct request *rq, struct bio *bio)
{
struct request_queue *q = rq->q;
-
elevator_t
*e = q->elevator;
+
struct elevator_queue
*e = q->elevator;
if (e->ops->elevator_allow_merge_fn)
return e->ops->elevator_allow_merge_fn(q, rq, bio);
if (e->ops->elevator_allow_merge_fn)
return e->ops->elevator_allow_merge_fn(q, rq, bio);
@@
-208,13
+208,13
@@
__setup("elevator=", elevator_setup);
static struct kobj_type elv_ktype;
static struct kobj_type elv_ktype;
-static
elevator_t
*elevator_alloc(struct request_queue *q,
+static
struct elevator_queue
*elevator_alloc(struct request_queue *q,
struct elevator_type *e)
{
struct elevator_type *e)
{
-
elevator_t
*eq;
+
struct elevator_queue
*eq;
int i;
int i;
- eq = kmalloc_node(sizeof(
elevator_t
), GFP_KERNEL | __GFP_ZERO, q->node);
+ eq = kmalloc_node(sizeof(
*eq
), GFP_KERNEL | __GFP_ZERO, q->node);
if (unlikely(!eq))
goto err;
if (unlikely(!eq))
goto err;
@@
-240,8
+240,9
@@
err:
static void elevator_release(struct kobject *kobj)
{
static void elevator_release(struct kobject *kobj)
{
-
elevator_t *e = container_of(kobj, elevator_t, kobj)
;
+
struct elevator_queue *e
;
+ e = container_of(kobj, struct elevator_queue, kobj);
elevator_put(e->elevator_type);
kfree(e->hash);
kfree(e);
elevator_put(e->elevator_type);
kfree(e->hash);
kfree(e);
@@
-297,7
+298,7
@@
int elevator_init(struct request_queue *q, char *name)
}
EXPORT_SYMBOL(elevator_init);
}
EXPORT_SYMBOL(elevator_init);
-void elevator_exit(
elevator_t
*e)
+void elevator_exit(
struct elevator_queue
*e)
{
mutex_lock(&e->sysfs_lock);
if (e->ops->elevator_exit_fn)
{
mutex_lock(&e->sysfs_lock);
if (e->ops->elevator_exit_fn)
@@
-311,7
+312,7
@@
EXPORT_SYMBOL(elevator_exit);
static void elv_activate_rq(struct request_queue *q, struct request *rq)
{
static void elv_activate_rq(struct request_queue *q, struct request *rq)
{
-
elevator_t
*e = q->elevator;
+
struct elevator_queue
*e = q->elevator;
if (e->ops->elevator_activate_req_fn)
e->ops->elevator_activate_req_fn(q, rq);
if (e->ops->elevator_activate_req_fn)
e->ops->elevator_activate_req_fn(q, rq);
@@
-319,7
+320,7
@@
static void elv_activate_rq(struct request_queue *q, struct request *rq)
static void elv_deactivate_rq(struct request_queue *q, struct request *rq)
{
static void elv_deactivate_rq(struct request_queue *q, struct request *rq)
{
-
elevator_t
*e = q->elevator;
+
struct elevator_queue
*e = q->elevator;
if (e->ops->elevator_deactivate_req_fn)
e->ops->elevator_deactivate_req_fn(q, rq);
if (e->ops->elevator_deactivate_req_fn)
e->ops->elevator_deactivate_req_fn(q, rq);
@@
-338,7
+339,7
@@
static void elv_rqhash_del(struct request_queue *q, struct request *rq)
static void elv_rqhash_add(struct request_queue *q, struct request *rq)
{
static void elv_rqhash_add(struct request_queue *q, struct request *rq)
{
-
elevator_t
*e = q->elevator;
+
struct elevator_queue
*e = q->elevator;
BUG_ON(ELV_ON_HASH(rq));
hlist_add_head(&rq->hash, &e->hash[ELV_HASH_FN(rq_hash_key(rq))]);
BUG_ON(ELV_ON_HASH(rq));
hlist_add_head(&rq->hash, &e->hash[ELV_HASH_FN(rq_hash_key(rq))]);
@@
-352,7
+353,7
@@
static void elv_rqhash_reposition(struct request_queue *q, struct request *rq)
static struct request *elv_rqhash_find(struct request_queue *q, sector_t offset)
{
static struct request *elv_rqhash_find(struct request_queue *q, sector_t offset)
{
-
elevator_t
*e = q->elevator;
+
struct elevator_queue
*e = q->elevator;
struct hlist_head *hash_list = &e->hash[ELV_HASH_FN(offset)];
struct hlist_node *entry, *next;
struct request *rq;
struct hlist_head *hash_list = &e->hash[ELV_HASH_FN(offset)];
struct hlist_node *entry, *next;
struct request *rq;
@@
-494,7
+495,7
@@
EXPORT_SYMBOL(elv_dispatch_add_tail);
int elv_merge(struct request_queue *q, struct request **req, struct bio *bio)
{
int elv_merge(struct request_queue *q, struct request **req, struct bio *bio)
{
-
elevator_t
*e = q->elevator;
+
struct elevator_queue
*e = q->elevator;
struct request *__rq;
int ret;
struct request *__rq;
int ret;
@@
-529,7
+530,7
@@
int elv_merge(struct request_queue *q, struct request **req, struct bio *bio)
void elv_merged_request(struct request_queue *q, struct request *rq, int type)
{
void elv_merged_request(struct request_queue *q, struct request *rq, int type)
{
-
elevator_t
*e = q->elevator;
+
struct elevator_queue
*e = q->elevator;
if (e->ops->elevator_merged_fn)
e->ops->elevator_merged_fn(q, rq, type);
if (e->ops->elevator_merged_fn)
e->ops->elevator_merged_fn(q, rq, type);
@@
-543,7
+544,7
@@
void elv_merged_request(struct request_queue *q, struct request *rq, int type)
void elv_merge_requests(struct request_queue *q, struct request *rq,
struct request *next)
{
void elv_merge_requests(struct request_queue *q, struct request *rq,
struct request *next)
{
-
elevator_t
*e = q->elevator;
+
struct elevator_queue
*e = q->elevator;
if (e->ops->elevator_merge_req_fn)
e->ops->elevator_merge_req_fn(q, rq, next);
if (e->ops->elevator_merge_req_fn)
e->ops->elevator_merge_req_fn(q, rq, next);
@@
-755,14
+756,6
@@
struct request *elv_next_request(struct request_queue *q)
int ret;
while ((rq = __elv_next_request(q)) != NULL) {
int ret;
while ((rq = __elv_next_request(q)) != NULL) {
- /*
- * Kill the empty barrier place holder, the driver must
- * not ever see it.
- */
- if (blk_empty_barrier(rq)) {
- __blk_end_request(rq, 0, blk_rq_bytes(rq));
- continue;
- }
if (!(rq->cmd_flags & REQ_STARTED)) {
/*
* This is the first time the device driver
if (!(rq->cmd_flags & REQ_STARTED)) {
/*
* This is the first time the device driver
@@
-850,18
+843,11
@@
void elv_dequeue_request(struct request_queue *q, struct request *rq)
*/
if (blk_account_rq(rq))
q->in_flight++;
*/
if (blk_account_rq(rq))
q->in_flight++;
-
- /*
- * We are now handing the request to the hardware, add the
- * timeout handler.
- */
- blk_add_timer(rq);
}
}
-EXPORT_SYMBOL(elv_dequeue_request);
int elv_queue_empty(struct request_queue *q)
{
int elv_queue_empty(struct request_queue *q)
{
-
elevator_t
*e = q->elevator;
+
struct elevator_queue
*e = q->elevator;
if (!list_empty(&q->queue_head))
return 0;
if (!list_empty(&q->queue_head))
return 0;
@@
-875,7
+861,7
@@
EXPORT_SYMBOL(elv_queue_empty);
struct request *elv_latter_request(struct request_queue *q, struct request *rq)
{
struct request *elv_latter_request(struct request_queue *q, struct request *rq)
{
-
elevator_t
*e = q->elevator;
+
struct elevator_queue
*e = q->elevator;
if (e->ops->elevator_latter_req_fn)
return e->ops->elevator_latter_req_fn(q, rq);
if (e->ops->elevator_latter_req_fn)
return e->ops->elevator_latter_req_fn(q, rq);
@@
-884,7
+870,7
@@
struct request *elv_latter_request(struct request_queue *q, struct request *rq)
struct request *elv_former_request(struct request_queue *q, struct request *rq)
{
struct request *elv_former_request(struct request_queue *q, struct request *rq)
{
-
elevator_t
*e = q->elevator;
+
struct elevator_queue
*e = q->elevator;
if (e->ops->elevator_former_req_fn)
return e->ops->elevator_former_req_fn(q, rq);
if (e->ops->elevator_former_req_fn)
return e->ops->elevator_former_req_fn(q, rq);
@@
-893,7
+879,7
@@
struct request *elv_former_request(struct request_queue *q, struct request *rq)
int elv_set_request(struct request_queue *q, struct request *rq, gfp_t gfp_mask)
{
int elv_set_request(struct request_queue *q, struct request *rq, gfp_t gfp_mask)
{
-
elevator_t
*e = q->elevator;
+
struct elevator_queue
*e = q->elevator;
if (e->ops->elevator_set_req_fn)
return e->ops->elevator_set_req_fn(q, rq, gfp_mask);
if (e->ops->elevator_set_req_fn)
return e->ops->elevator_set_req_fn(q, rq, gfp_mask);
@@
-904,7
+890,7
@@
int elv_set_request(struct request_queue *q, struct request *rq, gfp_t gfp_mask)
void elv_put_request(struct request_queue *q, struct request *rq)
{
void elv_put_request(struct request_queue *q, struct request *rq)
{
-
elevator_t
*e = q->elevator;
+
struct elevator_queue
*e = q->elevator;
if (e->ops->elevator_put_req_fn)
e->ops->elevator_put_req_fn(rq);
if (e->ops->elevator_put_req_fn)
e->ops->elevator_put_req_fn(rq);
@@
-912,7
+898,7
@@
void elv_put_request(struct request_queue *q, struct request *rq)
int elv_may_queue(struct request_queue *q, int rw)
{
int elv_may_queue(struct request_queue *q, int rw)
{
-
elevator_t
*e = q->elevator;
+
struct elevator_queue
*e = q->elevator;
if (e->ops->elevator_may_queue_fn)
return e->ops->elevator_may_queue_fn(q, rw);
if (e->ops->elevator_may_queue_fn)
return e->ops->elevator_may_queue_fn(q, rw);
@@
-935,7
+921,7
@@
EXPORT_SYMBOL(elv_abort_queue);
void elv_completed_request(struct request_queue *q, struct request *rq)
{
void elv_completed_request(struct request_queue *q, struct request *rq)
{
-
elevator_t
*e = q->elevator;
+
struct elevator_queue
*e = q->elevator;
/*
* request is released from the driver, io must be done
/*
* request is released from the driver, io must be done
@@
-951,10
+937,14
@@
void elv_completed_request(struct request_queue *q, struct request *rq)
* drained for flush sequence.
*/
if (unlikely(q->ordseq)) {
* drained for flush sequence.
*/
if (unlikely(q->ordseq)) {
- struct request *first_rq = list_entry_rq(q->queue_head.next);
- if (q->in_flight == 0 &&
+ struct request *next = NULL;
+
+ if (!list_empty(&q->queue_head))
+ next = list_entry_rq(q->queue_head.next);
+
+ if (!q->in_flight &&
blk_ordered_cur_seq(q) == QUEUE_ORDSEQ_DRAIN &&
blk_ordered_cur_seq(q) == QUEUE_ORDSEQ_DRAIN &&
-
blk_ordered_req_seq(first_rq) > QUEUE_ORDSEQ_DRAIN
) {
+
(!next || blk_ordered_req_seq(next) > QUEUE_ORDSEQ_DRAIN)
) {
blk_ordered_complete_seq(q, QUEUE_ORDSEQ_DRAIN, 0);
blk_start_queueing(q);
}
blk_ordered_complete_seq(q, QUEUE_ORDSEQ_DRAIN, 0);
blk_start_queueing(q);
}
@@
-966,13
+956,14
@@
void elv_completed_request(struct request_queue *q, struct request *rq)
static ssize_t
elv_attr_show(struct kobject *kobj, struct attribute *attr, char *page)
{
static ssize_t
elv_attr_show(struct kobject *kobj, struct attribute *attr, char *page)
{
- elevator_t *e = container_of(kobj, elevator_t, kobj);
struct elv_fs_entry *entry = to_elv(attr);
struct elv_fs_entry *entry = to_elv(attr);
+ struct elevator_queue *e;
ssize_t error;
if (!entry->show)
return -EIO;
ssize_t error;
if (!entry->show)
return -EIO;
+ e = container_of(kobj, struct elevator_queue, kobj);
mutex_lock(&e->sysfs_lock);
error = e->ops ? entry->show(e, page) : -ENOENT;
mutex_unlock(&e->sysfs_lock);
mutex_lock(&e->sysfs_lock);
error = e->ops ? entry->show(e, page) : -ENOENT;
mutex_unlock(&e->sysfs_lock);
@@
-983,13
+974,14
@@
static ssize_t
elv_attr_store(struct kobject *kobj, struct attribute *attr,
const char *page, size_t length)
{
elv_attr_store(struct kobject *kobj, struct attribute *attr,
const char *page, size_t length)
{
- elevator_t *e = container_of(kobj, elevator_t, kobj);
struct elv_fs_entry *entry = to_elv(attr);
struct elv_fs_entry *entry = to_elv(attr);
+ struct elevator_queue *e;
ssize_t error;
if (!entry->store)
return -EIO;
ssize_t error;
if (!entry->store)
return -EIO;
+ e = container_of(kobj, struct elevator_queue, kobj);
mutex_lock(&e->sysfs_lock);
error = e->ops ? entry->store(e, page, length) : -ENOENT;
mutex_unlock(&e->sysfs_lock);
mutex_lock(&e->sysfs_lock);
error = e->ops ? entry->store(e, page, length) : -ENOENT;
mutex_unlock(&e->sysfs_lock);
@@
-1008,7
+1000,7
@@
static struct kobj_type elv_ktype = {
int elv_register_queue(struct request_queue *q)
{
int elv_register_queue(struct request_queue *q)
{
-
elevator_t
*e = q->elevator;
+
struct elevator_queue
*e = q->elevator;
int error;
error = kobject_add(&e->kobj, &q->kobj, "%s", "iosched");
int error;
error = kobject_add(&e->kobj, &q->kobj, "%s", "iosched");
@@
-1026,7
+1018,7
@@
int elv_register_queue(struct request_queue *q)
return error;
}
return error;
}
-static void __elv_unregister_queue(
elevator_t
*e)
+static void __elv_unregister_queue(
struct elevator_queue
*e)
{
kobject_uevent(&e->kobj, KOBJ_REMOVE);
kobject_del(&e->kobj);
{
kobject_uevent(&e->kobj, KOBJ_REMOVE);
kobject_del(&e->kobj);
@@
-1089,7
+1081,7
@@
EXPORT_SYMBOL_GPL(elv_unregister);
*/
static int elevator_switch(struct request_queue *q, struct elevator_type *new_e)
{
*/
static int elevator_switch(struct request_queue *q, struct elevator_type *new_e)
{
-
elevator_t
*old_elevator, *e;
+
struct elevator_queue
*old_elevator, *e;
void *data;
/*
void *data;
/*
@@
-1195,7
+1187,7
@@
ssize_t elv_iosched_store(struct request_queue *q, const char *name,
ssize_t elv_iosched_show(struct request_queue *q, char *name)
{
ssize_t elv_iosched_show(struct request_queue *q, char *name)
{
-
elevator_t
*e = q->elevator;
+
struct elevator_queue
*e = q->elevator;
struct elevator_type *elv = e->elevator_type;
struct elevator_type *__e;
int len = 0;
struct elevator_type *elv = e->elevator_type;
struct elevator_type *__e;
int len = 0;