If we have the appropriate page already, call __block_write_begin() directly instead of releasing and regrabbing it inside of block_write_begin(). Signed-off-by: Namhyung Kim <namhyung@xxxxxxxxx> --- Fix error path. fs/buffer.c | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-) diff --git a/fs/buffer.c b/fs/buffer.c index 7f0b9b0..f5755f7 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -2466,11 +2466,13 @@ int nobh_write_begin(struct address_space *mapping, *fsdata = NULL; if (page_has_buffers(page)) { - unlock_page(page); - page_cache_release(page); - *pagep = NULL; - return block_write_begin(mapping, pos, len, flags, pagep, - get_block); + ret = __block_write_begin(page, pos, len, get_block); + if (unlikely(ret)) { + unlock_page(page); + page_cache_release(page); + *pagep = NULL; + } + return ret; } if (PageMappedToDisk(page)) -- 1.7.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html