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:
committed by
Linus Torvalds
parent
ef8b4520bd
commit
68671f35fe
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
|
* End-of-IO handler helper function which does not touch the bh after
|
||||||
* unlock the buffer. This is what ll_rw_block uses too.
|
* 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) {
|
if (uptodate) {
|
||||||
set_buffer_uptodate(bh);
|
set_buffer_uptodate(bh);
|
||||||
@@ -122,6 +126,15 @@ void end_buffer_read_sync(struct buffer_head *bh, int uptodate)
|
|||||||
clear_buffer_uptodate(bh);
|
clear_buffer_uptodate(bh);
|
||||||
}
|
}
|
||||||
unlock_buffer(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);
|
put_bh(bh);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2245,21 +2258,10 @@ out_unlock:
|
|||||||
* nobh_prepare_write()'s prereads are special: the buffer_heads are freed
|
* 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
|
* immediately, while under the page lock. So it needs a special end_io
|
||||||
* handler which does not touch the bh after unlocking it.
|
* 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)
|
static void end_buffer_read_nobh(struct buffer_head *bh, int uptodate)
|
||||||
{
|
{
|
||||||
if (uptodate) {
|
__end_buffer_read_notouch(bh, uptodate);
|
||||||
set_buffer_uptodate(bh);
|
|
||||||
} else {
|
|
||||||
/* This happens, due to failed READA attempts. */
|
|
||||||
clear_buffer_uptodate(bh);
|
|
||||||
}
|
|
||||||
unlock_buffer(bh);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user