mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
mm: add end_buffer_read helper function
Move duplicated code from end_buffer_read_XXX methods to separate helper function. Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org> Cc: Nick Piggin <nickpiggin@yahoo.com.au> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
ef8b4520bd
commit
68671f35fe
1 changed files with 17 additions and 15 deletions
32
fs/buffer.c
32
fs/buffer.c
|
@ -110,10 +110,14 @@ static void buffer_io_error(struct buffer_head *bh)
|
|||
}
|
||||
|
||||
/*
|
||||
* Default synchronous end-of-IO handler.. Just mark it up-to-date and
|
||||
* unlock the buffer. This is what ll_rw_block uses too.
|
||||
* End-of-IO handler helper function which does not touch the bh after
|
||||
* unlocking it.
|
||||
* Note: unlock_buffer() sort-of does touch the bh after unlocking it, but
|
||||
* a race there is benign: unlock_buffer() only use the bh's address for
|
||||
* hashing after unlocking the buffer, so it doesn't actually touch the bh
|
||||
* itself.
|
||||
*/
|
||||
void end_buffer_read_sync(struct buffer_head *bh, int uptodate)
|
||||
static void __end_buffer_read_notouch(struct buffer_head *bh, int uptodate)
|
||||
{
|
||||
if (uptodate) {
|
||||
set_buffer_uptodate(bh);
|
||||
|
@ -122,6 +126,15 @@ void end_buffer_read_sync(struct buffer_head *bh, int uptodate)
|
|||
clear_buffer_uptodate(bh);
|
||||
}
|
||||
unlock_buffer(bh);
|
||||
}
|
||||
|
||||
/*
|
||||
* Default synchronous end-of-IO handler.. Just mark it up-to-date and
|
||||
* unlock the buffer. This is what ll_rw_block uses too.
|
||||
*/
|
||||
void end_buffer_read_sync(struct buffer_head *bh, int uptodate)
|
||||
{
|
||||
__end_buffer_read_notouch(bh, uptodate);
|
||||
put_bh(bh);
|
||||
}
|
||||
|
||||
|
@ -2245,21 +2258,10 @@ out_unlock:
|
|||
* nobh_prepare_write()'s prereads are special: the buffer_heads are freed
|
||||
* immediately, while under the page lock. So it needs a special end_io
|
||||
* handler which does not touch the bh after unlocking it.
|
||||
*
|
||||
* Note: unlock_buffer() sort-of does touch the bh after unlocking it, but
|
||||
* a race there is benign: unlock_buffer() only use the bh's address for
|
||||
* hashing after unlocking the buffer, so it doesn't actually touch the bh
|
||||
* itself.
|
||||
*/
|
||||
static void end_buffer_read_nobh(struct buffer_head *bh, int uptodate)
|
||||
{
|
||||
if (uptodate) {
|
||||
set_buffer_uptodate(bh);
|
||||
} else {
|
||||
/* This happens, due to failed READA attempts. */
|
||||
clear_buffer_uptodate(bh);
|
||||
}
|
||||
unlock_buffer(bh);
|
||||
__end_buffer_read_notouch(bh, uptodate);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue