Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
707c584e
Commit
707c584e
authored
Sep 04, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://kernel.bkbits.net/davem/net-2.5
into home.osdl.org:/home/torvalds/v2.5/linux
parents
c81eb7f2
b99c2656
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
105 additions
and
140 deletions
+105
-140
drivers/block/as-iosched.c
drivers/block/as-iosched.c
+22
-33
drivers/block/deadline-iosched.c
drivers/block/deadline-iosched.c
+28
-45
drivers/block/elevator.c
drivers/block/elevator.c
+11
-15
drivers/block/ll_rw_blk.c
drivers/block/ll_rw_blk.c
+13
-19
drivers/block/noop-iosched.c
drivers/block/noop-iosched.c
+11
-8
drivers/block/scsi_ioctl.c
drivers/block/scsi_ioctl.c
+1
-1
drivers/ide/ide-disk.c
drivers/ide/ide-disk.c
+2
-1
drivers/ide/ide-io.c
drivers/ide/ide-io.c
+3
-3
include/asm-i386/termios.h
include/asm-i386/termios.h
+0
-2
include/asm-sparc/termios.h
include/asm-sparc/termios.h
+0
-3
include/asm-sparc64/termios.h
include/asm-sparc64/termios.h
+0
-3
include/linux/blkdev.h
include/linux/blkdev.h
+1
-1
include/linux/elevator.h
include/linux/elevator.h
+10
-6
include/linux/tty_ldisc.h
include/linux/tty_ldisc.h
+3
-0
No files found.
drivers/block/as-iosched.c
View file @
707c584e
...
...
@@ -255,7 +255,7 @@ static void as_remove_merge_hints(request_queue_t *q, struct as_rq *arq)
{
as_del_arq_hash
(
arq
);
if
(
q
->
last_merge
==
&
arq
->
request
->
queueli
st
)
if
(
q
->
last_merge
==
arq
->
reque
st
)
q
->
last_merge
=
NULL
;
}
...
...
@@ -1347,50 +1347,39 @@ static void as_requeue_request(request_queue_t *q, struct request *rq)
}
static
void
as_insert_request
(
request_queue_t
*
q
,
struct
request
*
rq
,
struct
list_head
*
insert_here
)
as_insert_request
(
request_queue_t
*
q
,
struct
request
*
rq
,
int
where
)
{
struct
as_data
*
ad
=
q
->
elevator
.
elevator_data
;
struct
as_rq
*
arq
=
RQ_DATA
(
rq
);
if
(
unlikely
(
rq
->
flags
&
(
REQ_HARDBARRIER
|
REQ_SOFTBARRIER
)))
{
q
->
last_merge
=
NULL
;
if
(
insert_here
!=
ad
->
dispatch
)
{
switch
(
where
)
{
case
ELEVATOR_INSERT_BACK
:
while
(
ad
->
next_arq
[
REQ_SYNC
])
as_move_to_dispatch
(
ad
,
ad
->
next_arq
[
REQ_SYNC
]);
while
(
ad
->
next_arq
[
REQ_ASYNC
])
as_move_to_dispatch
(
ad
,
ad
->
next_arq
[
REQ_ASYNC
]);
}
if
(
!
insert_here
)
insert_here
=
ad
->
dispatch
->
prev
;
}
if
(
unlikely
(
!
blk_fs_request
(
rq
)))
{
if
(
!
insert_here
)
insert_here
=
ad
->
dispatch
;
}
if
(
insert_here
)
{
list_add
(
&
rq
->
queuelist
,
insert_here
);
/* Stop anticipating - let this request get through */
if
(
list_empty
(
ad
->
dispatch
))
list_add_tail
(
&
rq
->
queuelist
,
ad
->
dispatch
);
break
;
case
ELEVATOR_INSERT_FRONT
:
list_add
(
&
rq
->
queuelist
,
ad
->
dispatch
);
as_antic_stop
(
ad
);
return
;
break
;
case
ELEVATOR_INSERT_SORT
:
BUG_ON
(
!
blk_fs_request
(
rq
));
as_add_request
(
ad
,
arq
);
break
;
default:
printk
(
"%s: bad insert point %d
\n
"
,
__FUNCTION__
,
where
);
return
;
}
if
(
rq_mergeable
(
rq
))
{
as_add_arq_hash
(
ad
,
arq
);
if
(
!
q
->
last_merge
)
q
->
last_merge
=
&
rq
->
queuelist
;
q
->
last_merge
=
rq
;
}
as_add_request
(
ad
,
arq
);
}
/*
...
...
@@ -1438,7 +1427,7 @@ as_latter_request(request_queue_t *q, struct request *rq)
}
static
int
as_merge
(
request_queue_t
*
q
,
struct
list_head
**
insert
,
struct
bio
*
bio
)
as_merge
(
request_queue_t
*
q
,
struct
request
**
req
,
struct
bio
*
bio
)
{
struct
as_data
*
ad
=
q
->
elevator
.
elevator_data
;
sector_t
rb_key
=
bio
->
bi_sector
+
bio_sectors
(
bio
);
...
...
@@ -1450,7 +1439,7 @@ as_merge(request_queue_t *q, struct list_head **insert, struct bio *bio)
*/
ret
=
elv_try_last_merge
(
q
,
bio
);
if
(
ret
!=
ELEVATOR_NO_MERGE
)
{
__rq
=
list_entry_rq
(
q
->
last_merge
)
;
__rq
=
q
->
last_merge
;
goto
out_insert
;
}
...
...
@@ -1482,11 +1471,11 @@ as_merge(request_queue_t *q, struct list_head **insert, struct bio *bio)
return
ELEVATOR_NO_MERGE
;
out:
q
->
last_merge
=
&
__rq
->
queuelist
;
q
->
last_merge
=
__rq
;
out_insert:
if
(
ret
)
as_hot_arq_hash
(
ad
,
RQ_DATA
(
__rq
));
*
insert
=
&
__rq
->
queuelist
;
*
req
=
__rq
;
return
ret
;
}
...
...
@@ -1514,7 +1503,7 @@ static void as_merged_request(request_queue_t *q, struct request *req)
*/
}
q
->
last_merge
=
&
req
->
queuelist
;
q
->
last_merge
=
req
;
}
static
void
...
...
drivers/block/deadline-iosched.c
View file @
707c584e
...
...
@@ -33,13 +33,7 @@ static const int deadline_hash_shift = 5;
#define DL_HASH_ENTRIES (1 << deadline_hash_shift)
#define rq_hash_key(rq) ((rq)->sector + (rq)->nr_sectors)
#define list_entry_hash(ptr) list_entry((ptr), struct deadline_rq, hash)
#define ON_HASH(drq) (drq)->hash_valid_count
#define DL_INVALIDATE_HASH(dd) \
do { \
if (!++(dd)->hash_valid_count) \
(dd)->hash_valid_count = 1; \
} while (0)
#define ON_HASH(drq) (drq)->on_hash
struct
deadline_data
{
/*
...
...
@@ -58,7 +52,6 @@ struct deadline_data {
struct
deadline_rq
*
next_drq
[
2
];
struct
list_head
*
dispatch
;
/* driver dispatch queue */
struct
list_head
*
hash
;
/* request hash */
unsigned
long
hash_valid_count
;
/* barrier hash count */
unsigned
int
batching
;
/* number of sequential requests made */
sector_t
last_sector
;
/* head position */
unsigned
int
starved
;
/* times reads have starved writes */
...
...
@@ -90,7 +83,7 @@ struct deadline_rq {
* request hash, key is the ending offset (for back merge lookup)
*/
struct
list_head
hash
;
unsigned
long
hash_valid_count
;
char
on_hash
;
/*
* expire fifo
...
...
@@ -110,7 +103,7 @@ static kmem_cache_t *drq_pool;
*/
static
inline
void
__deadline_del_drq_hash
(
struct
deadline_rq
*
drq
)
{
drq
->
hash_valid_count
=
0
;
drq
->
on_hash
=
0
;
list_del_init
(
&
drq
->
hash
);
}
...
...
@@ -125,7 +118,7 @@ deadline_remove_merge_hints(request_queue_t *q, struct deadline_rq *drq)
{
deadline_del_drq_hash
(
drq
);
if
(
q
->
last_merge
==
&
drq
->
request
->
queueli
st
)
if
(
q
->
last_merge
==
drq
->
reque
st
)
q
->
last_merge
=
NULL
;
}
...
...
@@ -136,7 +129,7 @@ deadline_add_drq_hash(struct deadline_data *dd, struct deadline_rq *drq)
BUG_ON
(
ON_HASH
(
drq
));
drq
->
hash_valid_count
=
dd
->
hash_valid_count
;
drq
->
on_hash
=
1
;
list_add
(
&
drq
->
hash
,
&
dd
->
hash
[
DL_HASH_FN
(
rq_hash_key
(
rq
))]);
}
...
...
@@ -169,8 +162,7 @@ deadline_find_drq_hash(struct deadline_data *dd, sector_t offset)
BUG_ON
(
!
ON_HASH
(
drq
));
if
(
!
rq_mergeable
(
__rq
)
||
drq
->
hash_valid_count
!=
dd
->
hash_valid_count
)
{
if
(
!
rq_mergeable
(
__rq
))
{
__deadline_del_drq_hash
(
drq
);
continue
;
}
...
...
@@ -324,7 +316,7 @@ static void deadline_remove_request(request_queue_t *q, struct request *rq)
}
static
int
deadline_merge
(
request_queue_t
*
q
,
struct
list_head
**
insert
,
struct
bio
*
bio
)
deadline_merge
(
request_queue_t
*
q
,
struct
request
**
req
,
struct
bio
*
bio
)
{
struct
deadline_data
*
dd
=
q
->
elevator
.
elevator_data
;
struct
request
*
__rq
;
...
...
@@ -335,7 +327,7 @@ deadline_merge(request_queue_t *q, struct list_head **insert, struct bio *bio)
*/
ret
=
elv_try_last_merge
(
q
,
bio
);
if
(
ret
!=
ELEVATOR_NO_MERGE
)
{
__rq
=
list_entry_rq
(
q
->
last_merge
)
;
__rq
=
q
->
last_merge
;
goto
out_insert
;
}
...
...
@@ -371,11 +363,11 @@ deadline_merge(request_queue_t *q, struct list_head **insert, struct bio *bio)
return
ELEVATOR_NO_MERGE
;
out:
q
->
last_merge
=
&
__rq
->
queuelist
;
q
->
last_merge
=
__rq
;
out_insert:
if
(
ret
)
deadline_hot_drq_hash
(
dd
,
RQ_DATA
(
__rq
));
*
insert
=
&
__rq
->
queuelist
;
*
req
=
__rq
;
return
ret
;
}
...
...
@@ -398,7 +390,7 @@ static void deadline_merged_request(request_queue_t *q, struct request *req)
deadline_add_drq_rb
(
dd
,
drq
);
}
q
->
last_merge
=
&
req
->
queuelist
;
q
->
last_merge
=
req
;
}
static
void
...
...
@@ -621,43 +613,35 @@ static struct request *deadline_next_request(request_queue_t *q)
}
static
void
deadline_insert_request
(
request_queue_t
*
q
,
struct
request
*
rq
,
struct
list_head
*
insert_here
)
deadline_insert_request
(
request_queue_t
*
q
,
struct
request
*
rq
,
int
where
)
{
struct
deadline_data
*
dd
=
q
->
elevator
.
elevator_data
;
struct
deadline_rq
*
drq
=
RQ_DATA
(
rq
);
if
(
unlikely
(
rq
->
flags
&
(
REQ_HARDBARRIER
|
REQ_SOFTBARRIER
)))
{
DL_INVALIDATE_HASH
(
dd
);
q
->
last_merge
=
NULL
;
if
(
insert_here
!=
dd
->
dispatch
)
{
switch
(
where
)
{
case
ELEVATOR_INSERT_BACK
:
while
(
deadline_dispatch_requests
(
dd
))
;
}
if
(
!
insert_here
)
insert_here
=
dd
->
dispatch
->
prev
;
}
if
(
unlikely
(
!
blk_fs_request
(
rq
)))
{
if
(
!
insert_here
)
insert_here
=
dd
->
dispatch
;
}
if
(
insert_here
)
{
list_add
(
&
rq
->
queuelist
,
insert_here
);
return
;
list_add_tail
(
&
rq
->
queuelist
,
dd
->
dispatch
);
break
;
case
ELEVATOR_INSERT_FRONT
:
list_add
(
&
rq
->
queuelist
,
dd
->
dispatch
);
break
;
case
ELEVATOR_INSERT_SORT
:
BUG_ON
(
!
blk_fs_request
(
rq
));
deadline_add_request
(
dd
,
drq
);
break
;
default:
printk
(
"%s: bad insert point %d
\n
"
,
__FUNCTION__
,
where
);
return
;
}
if
(
rq_mergeable
(
rq
))
{
deadline_add_drq_hash
(
dd
,
drq
);
if
(
!
q
->
last_merge
)
q
->
last_merge
=
&
rq
->
queuelist
;
q
->
last_merge
=
rq
;
}
deadline_add_request
(
dd
,
drq
);
}
static
int
deadline_queue_empty
(
request_queue_t
*
q
)
...
...
@@ -748,7 +732,6 @@ static int deadline_init(request_queue_t *q, elevator_t *e)
dd
->
dispatch
=
&
q
->
queue_head
;
dd
->
fifo_expire
[
READ
]
=
read_expire
;
dd
->
fifo_expire
[
WRITE
]
=
write_expire
;
dd
->
hash_valid_count
=
1
;
dd
->
writes_starved
=
writes_starved
;
dd
->
front_merges
=
1
;
dd
->
fifo_batch
=
fifo_batch
;
...
...
@@ -779,7 +762,7 @@ deadline_set_request(request_queue_t *q, struct request *rq, int gfp_mask)
drq
->
request
=
rq
;
INIT_LIST_HEAD
(
&
drq
->
hash
);
drq
->
hash_valid_count
=
0
;
drq
->
on_hash
=
0
;
INIT_LIST_HEAD
(
&
drq
->
fifo
);
...
...
drivers/block/elevator.c
View file @
707c584e
...
...
@@ -81,7 +81,7 @@ inline int elv_try_merge(struct request *__rq, struct bio *bio)
inline
int
elv_try_last_merge
(
request_queue_t
*
q
,
struct
bio
*
bio
)
{
if
(
q
->
last_merge
)
return
elv_try_merge
(
list_entry_rq
(
q
->
last_merge
)
,
bio
);
return
elv_try_merge
(
q
->
last_merge
,
bio
);
return
ELEVATOR_NO_MERGE
;
}
...
...
@@ -117,12 +117,12 @@ int elevator_global_init(void)
return
0
;
}
int
elv_merge
(
request_queue_t
*
q
,
struct
list_head
**
entry
,
struct
bio
*
bio
)
int
elv_merge
(
request_queue_t
*
q
,
struct
request
**
req
,
struct
bio
*
bio
)
{
elevator_t
*
e
=
&
q
->
elevator
;
if
(
e
->
elevator_merge_fn
)
return
e
->
elevator_merge_fn
(
q
,
entry
,
bio
);
return
e
->
elevator_merge_fn
(
q
,
req
,
bio
);
return
ELEVATOR_NO_MERGE
;
}
...
...
@@ -140,7 +140,7 @@ void elv_merge_requests(request_queue_t *q, struct request *rq,
{
elevator_t
*
e
=
&
q
->
elevator
;
if
(
q
->
last_merge
==
&
next
->
queuelis
t
)
if
(
q
->
last_merge
==
nex
t
)
q
->
last_merge
=
NULL
;
if
(
e
->
elevator_merge_req_fn
)
...
...
@@ -156,29 +156,25 @@ void elv_requeue_request(request_queue_t *q, struct request *rq)
if
(
q
->
elevator
.
elevator_requeue_req_fn
)
q
->
elevator
.
elevator_requeue_req_fn
(
q
,
rq
);
else
__elv_add_request
(
q
,
rq
,
0
,
0
);
__elv_add_request
(
q
,
rq
,
ELEVATOR_INSERT_FRONT
,
0
);
}
void
__elv_add_request
(
request_queue_t
*
q
,
struct
request
*
rq
,
int
at_end
,
void
__elv_add_request
(
request_queue_t
*
q
,
struct
request
*
rq
,
int
where
,
int
plug
)
{
struct
list_head
*
insert
=
NULL
;
if
(
!
at_end
)
insert
=
&
q
->
queue_head
;
if
(
plug
)
blk_plug_device
(
q
);
q
->
elevator
.
elevator_add_req_fn
(
q
,
rq
,
insert
);
q
->
elevator
.
elevator_add_req_fn
(
q
,
rq
,
where
);
}
void
elv_add_request
(
request_queue_t
*
q
,
struct
request
*
rq
,
int
at_end
,
void
elv_add_request
(
request_queue_t
*
q
,
struct
request
*
rq
,
int
where
,
int
plug
)
{
unsigned
long
flags
;
spin_lock_irqsave
(
q
->
queue_lock
,
flags
);
__elv_add_request
(
q
,
rq
,
at_end
,
plug
);
__elv_add_request
(
q
,
rq
,
where
,
plug
);
spin_unlock_irqrestore
(
q
->
queue_lock
,
flags
);
}
...
...
@@ -200,7 +196,7 @@ struct request *elv_next_request(request_queue_t *q)
*/
rq
->
flags
|=
REQ_STARTED
;
if
(
&
rq
->
queuelist
==
q
->
last_merge
)
if
(
rq
==
q
->
last_merge
)
q
->
last_merge
=
NULL
;
if
((
rq
->
flags
&
REQ_DONTPREP
)
||
!
q
->
prep_rq_fn
)
...
...
@@ -238,7 +234,7 @@ void elv_remove_request(request_queue_t *q, struct request *rq)
* deleted without ever being given to driver (merged with another
* request).
*/
if
(
&
rq
->
queuelist
==
q
->
last_merge
)
if
(
rq
==
q
->
last_merge
)
q
->
last_merge
=
NULL
;
if
(
e
->
elevator_remove_req_fn
)
...
...
drivers/block/ll_rw_blk.c
View file @
707c584e
...
...
@@ -703,7 +703,7 @@ void blk_queue_invalidate_tags(request_queue_t *q)
blk_queue_end_tag
(
q
,
rq
);
rq
->
flags
&=
~
REQ_STARTED
;
__elv_add_request
(
q
,
rq
,
0
,
0
);
__elv_add_request
(
q
,
rq
,
ELEVATOR_INSERT_BACK
,
0
);
}
}
...
...
@@ -1632,11 +1632,16 @@ void blk_insert_request(request_queue_t *q, struct request *rq,
if
(
reinsert
)
{
blk_requeue_request
(
q
,
rq
);
}
else
{
int
where
=
ELEVATOR_INSERT_BACK
;
if
(
at_head
)
where
=
ELEVATOR_INSERT_FRONT
;
if
(
blk_rq_tagged
(
rq
))
blk_queue_end_tag
(
q
,
rq
);
drive_stat_acct
(
rq
,
rq
->
nr_sectors
,
1
);
__elv_add_request
(
q
,
rq
,
!
at_head
,
0
);
__elv_add_request
(
q
,
rq
,
where
,
0
);
}
q
->
request_fn
(
q
);
spin_unlock_irqrestore
(
q
->
queue_lock
,
flags
);
...
...
@@ -1669,8 +1674,7 @@ void drive_stat_acct(struct request *rq, int nr_sectors, int new_io)
* queue lock is held and interrupts disabled, as we muck with the
* request queue list.
*/
static
inline
void
add_request
(
request_queue_t
*
q
,
struct
request
*
req
,
struct
list_head
*
insert_here
)
static
inline
void
add_request
(
request_queue_t
*
q
,
struct
request
*
req
)
{
drive_stat_acct
(
req
,
req
->
nr_sectors
,
1
);
...
...
@@ -1681,7 +1685,7 @@ static inline void add_request(request_queue_t * q, struct request * req,
* elevator indicated where it wants this request to be
* inserted at elevator_merge time
*/
__elv_add_request
_pos
(
q
,
req
,
insert_here
);
__elv_add_request
(
q
,
req
,
ELEVATOR_INSERT_SORT
,
0
);
}
/*
...
...
@@ -1880,7 +1884,6 @@ static int __make_request(request_queue_t *q, struct bio *bio)
{
struct
request
*
req
,
*
freereq
=
NULL
;
int
el_ret
,
rw
,
nr_sectors
,
cur_nr_sectors
,
barrier
,
ra
;
struct
list_head
*
insert_here
;
sector_t
sector
;
sector
=
bio
->
bi_sector
;
...
...
@@ -1903,7 +1906,6 @@ static int __make_request(request_queue_t *q, struct bio *bio)
ra
=
bio
->
bi_rw
&
(
1
<<
BIO_RW_AHEAD
);
again:
insert_here
=
NULL
;
spin_lock_irq
(
q
->
queue_lock
);
if
(
elv_queue_empty
(
q
))
{
...
...
@@ -1913,17 +1915,13 @@ static int __make_request(request_queue_t *q, struct bio *bio)
if
(
barrier
)
goto
get_rq
;
el_ret
=
elv_merge
(
q
,
&
insert_here
,
bio
);
el_ret
=
elv_merge
(
q
,
&
req
,
bio
);
switch
(
el_ret
)
{
case
ELEVATOR_BACK_MERGE
:
req
=
list_entry_rq
(
insert_here
);
BUG_ON
(
!
rq_mergeable
(
req
));
if
(
!
q
->
back_merge_fn
(
q
,
req
,
bio
))
{
insert_here
=
&
req
->
queuelist
;
if
(
!
q
->
back_merge_fn
(
q
,
req
,
bio
))
break
;
}
req
->
biotail
->
bi_next
=
bio
;
req
->
biotail
=
bio
;
...
...
@@ -1934,14 +1932,10 @@ static int __make_request(request_queue_t *q, struct bio *bio)
goto
out
;
case
ELEVATOR_FRONT_MERGE
:
req
=
list_entry_rq
(
insert_here
);
BUG_ON
(
!
rq_mergeable
(
req
));
if
(
!
q
->
front_merge_fn
(
q
,
req
,
bio
))
{
insert_here
=
req
->
queuelist
.
prev
;
if
(
!
q
->
front_merge_fn
(
q
,
req
,
bio
))
break
;
}
bio
->
bi_next
=
req
->
bio
;
req
->
cbio
=
req
->
bio
=
bio
;
...
...
@@ -2029,7 +2023,7 @@ static int __make_request(request_queue_t *q, struct bio *bio)
req
->
rq_disk
=
bio
->
bi_bdev
->
bd_disk
;
req
->
start_time
=
jiffies
;
add_request
(
q
,
req
,
insert_here
);
add_request
(
q
,
req
);
out:
if
(
freereq
)
__blk_put_request
(
q
,
freereq
);
...
...
drivers/block/noop-iosched.c
View file @
707c584e
...
...
@@ -17,17 +17,15 @@
/*
* See if we can find a request that this buffer can be coalesced with.
*/
int
elevator_noop_merge
(
request_queue_t
*
q
,
struct
list_head
**
insert
,
int
elevator_noop_merge
(
request_queue_t
*
q
,
struct
request
**
req
,
struct
bio
*
bio
)
{
struct
list_head
*
entry
=
&
q
->
queue_head
;
struct
request
*
__rq
;
int
ret
;
if
((
ret
=
elv_try_last_merge
(
q
,
bio
)))
{
*
insert
=
q
->
last_merge
;
if
((
ret
=
elv_try_last_merge
(
q
,
bio
)))
return
ret
;
}
while
((
entry
=
entry
->
prev
)
!=
&
q
->
queue_head
)
{
__rq
=
list_entry_rq
(
entry
);
...
...
@@ -41,8 +39,8 @@ int elevator_noop_merge(request_queue_t *q, struct list_head **insert,
continue
;
if
((
ret
=
elv_try_merge
(
__rq
,
bio
)))
{
*
insert
=
&
__rq
->
queuelist
;
q
->
last_merge
=
&
__rq
->
queuelist
;
*
req
=
__rq
;
q
->
last_merge
=
__rq
;
return
ret
;
}
}
...
...
@@ -57,8 +55,13 @@ void elevator_noop_merge_requests(request_queue_t *q, struct request *req,
}
void
elevator_noop_add_request
(
request_queue_t
*
q
,
struct
request
*
rq
,
struct
list_head
*
insert_
here
)
int
w
here
)
{
struct
list_head
*
insert
=
q
->
queue_head
.
prev
;
if
(
where
==
ELEVATOR_INSERT_FRONT
)
insert
=
&
q
->
queue_head
;
list_add_tail
(
&
rq
->
queuelist
,
&
q
->
queue_head
);
/*
...
...
@@ -67,7 +70,7 @@ void elevator_noop_add_request(request_queue_t *q, struct request *rq,
if
(
rq
->
flags
&
REQ_HARDBARRIER
)
q
->
last_merge
=
NULL
;
else
if
(
!
q
->
last_merge
)
q
->
last_merge
=
&
rq
->
queuelist
;
q
->
last_merge
=
rq
;
}
struct
request
*
elevator_noop_next_request
(
request_queue_t
*
q
)
...
...
drivers/block/scsi_ioctl.c
View file @
707c584e
...
...
@@ -68,7 +68,7 @@ static int blk_do_rq(request_queue_t *q, struct block_device *bdev,
rq
->
flags
|=
REQ_NOMERGE
;
rq
->
waiting
=
&
wait
;
elv_add_request
(
q
,
rq
,
1
,
1
);
elv_add_request
(
q
,
rq
,
ELEVATOR_INSERT_BACK
,
1
);
generic_unplug_device
(
q
);
wait_for_completion
(
&
wait
);
...
...
drivers/ide/ide-disk.c
View file @
707c584e
...
...
@@ -1689,7 +1689,8 @@ static void idedisk_setup (ide_drive_t *drive)
write_cache
(
drive
,
(
id
->
cfs_enable_2
&
0x3000
));
#ifdef CONFIG_BLK_DEV_IDE_TCQ_DEFAULT
HWIF
(
drive
)
->
ide_dma_queued_on
(
drive
);
if
(
drive
->
using_dma
)
HWIF
(
drive
)
->
ide_dma_queued_on
(
drive
);
#endif
}
...
...
drivers/ide/ide-io.c
View file @
707c584e
...
...
@@ -1387,7 +1387,7 @@ int ide_do_drive_cmd (ide_drive_t *drive, struct request *rq, ide_action_t actio
unsigned
long
flags
;
ide_hwgroup_t
*
hwgroup
=
HWGROUP
(
drive
);
DECLARE_COMPLETION
(
wait
);
int
insert_end
=
1
,
err
;
int
where
=
ELEVATOR_INSERT_BACK
,
err
;
int
must_wait
=
(
action
==
ide_wait
||
action
==
ide_head_wait
);
#ifdef CONFIG_BLK_DEV_PDC4030
...
...
@@ -1419,10 +1419,10 @@ int ide_do_drive_cmd (ide_drive_t *drive, struct request *rq, ide_action_t actio
spin_lock_irqsave
(
&
ide_lock
,
flags
);
if
(
action
==
ide_preempt
||
action
==
ide_head_wait
)
{
hwgroup
->
rq
=
NULL
;
insert_end
=
0
;
where
=
ELEVATOR_INSERT_FRONT
;
rq
->
flags
|=
REQ_PREEMPT
;
}
__elv_add_request
(
drive
->
queue
,
rq
,
insert_end
,
0
);
__elv_add_request
(
drive
->
queue
,
rq
,
where
,
0
);
ide_do_request
(
hwgroup
,
IDE_NO_IRQ
);
spin_unlock_irqrestore
(
&
ide_lock
,
flags
);
...
...
include/asm-i386/termios.h
View file @
707c584e
...
...
@@ -102,8 +102,6 @@ struct termio {
#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios))
#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios))
#define MODULE_ALIAS_LDISC(ldisc) \
MODULE_ALIAS("tty-ldisc-" __stringify(ldisc))
#endif
/* __KERNEL__ */
#endif
/* _I386_TERMIOS_H */
include/asm-sparc/termios.h
View file @
707c584e
...
...
@@ -169,9 +169,6 @@ struct winsize {
0; \
})
#define MODULE_ALIAS_LDISC(ldisc) \
MODULE_ALIAS("tty-ldisc-" __stringify(ldisc))
#endif
/* __KERNEL__ */
#endif
/* _SPARC_TERMIOS_H */
include/asm-sparc64/termios.h
View file @
707c584e
...
...
@@ -168,9 +168,6 @@ struct winsize {
0; \
})
#define MODULE_ALIAS_LDISC(ldisc) \
MODULE_ALIAS("tty-ldisc-" __stringify(ldisc))
#endif
/* __KERNEL__ */
#endif
/* _SPARC64_TERMIOS_H */
include/linux/blkdev.h
View file @
707c584e
...
...
@@ -270,7 +270,7 @@ struct request_queue
* Together with queue_head for cacheline sharing
*/
struct
list_head
queue_head
;
struct
list_head
*
last_merge
;
struct
request
*
last_merge
;
elevator_t
elevator
;
/*
...
...
include/linux/elevator.h
View file @
707c584e
#ifndef _LINUX_ELEVATOR_H
#define _LINUX_ELEVATOR_H
typedef
int
(
elevator_merge_fn
)
(
request_queue_t
*
,
struct
list_head
**
,
typedef
int
(
elevator_merge_fn
)
(
request_queue_t
*
,
struct
request
**
,
struct
bio
*
);
typedef
void
(
elevator_merge_req_fn
)
(
request_queue_t
*
,
struct
request
*
,
struct
request
*
);
...
...
@@ -10,7 +10,7 @@ typedef void (elevator_merged_fn) (request_queue_t *, struct request *);
typedef
struct
request
*
(
elevator_next_req_fn
)
(
request_queue_t
*
);
typedef
void
(
elevator_add_req_fn
)
(
request_queue_t
*
,
struct
request
*
,
struct
list_head
*
);
typedef
void
(
elevator_add_req_fn
)
(
request_queue_t
*
,
struct
request
*
,
int
);
typedef
int
(
elevator_queue_empty_fn
)
(
request_queue_t
*
);
typedef
void
(
elevator_remove_req_fn
)
(
request_queue_t
*
,
struct
request
*
);
typedef
void
(
elevator_requeue_req_fn
)
(
request_queue_t
*
,
struct
request
*
);
...
...
@@ -62,7 +62,7 @@ struct elevator_s
*/
extern
void
elv_add_request
(
request_queue_t
*
,
struct
request
*
,
int
,
int
);
extern
void
__elv_add_request
(
request_queue_t
*
,
struct
request
*
,
int
,
int
);
extern
int
elv_merge
(
request_queue_t
*
,
struct
list_head
**
,
struct
bio
*
);
extern
int
elv_merge
(
request_queue_t
*
,
struct
request
**
,
struct
bio
*
);
extern
void
elv_merge_requests
(
request_queue_t
*
,
struct
request
*
,
struct
request
*
);
extern
void
elv_merged_request
(
request_queue_t
*
,
struct
request
*
);
...
...
@@ -79,9 +79,6 @@ extern void elv_completed_request(request_queue_t *, struct request *);
extern
int
elv_set_request
(
request_queue_t
*
,
struct
request
*
,
int
);
extern
void
elv_put_request
(
request_queue_t
*
,
struct
request
*
);
#define __elv_add_request_pos(q, rq, pos) \
(q)->elevator.elevator_add_req_fn((q), (rq), (pos))
/*
* noop I/O scheduler. always merges, always inserts new request at tail
*/
...
...
@@ -111,4 +108,11 @@ extern inline int elv_try_last_merge(request_queue_t *, struct bio *);
#define ELEVATOR_FRONT_MERGE 1
#define ELEVATOR_BACK_MERGE 2
/*
* Insertion selection
*/
#define ELEVATOR_INSERT_FRONT 1
#define ELEVATOR_INSERT_BACK 2
#define ELEVATOR_INSERT_SORT 3
#endif
include/linux/tty_ldisc.h
View file @
707c584e
...
...
@@ -138,4 +138,7 @@ struct tty_ldisc {
#define LDISC_FLAG_DEFINED 0x00000001
#define MODULE_ALIAS_LDISC(ldisc) \
MODULE_ALIAS("tty-ldisc-" __stringify(ldisc))
#endif
/* _LINUX_TTY_LDISC_H */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment