Messages in this thread Patch in this message | ![/](/images/icornerl.gif) | | Date | Fri, 16 Dec 2011 11:45:41 -0800 | From | Greg KH <> | Subject | [44/53] ext4: avoid potential hang in mpage_submit_io() when blocksize < pagesize |
| |
3.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yongqiang Yang <xiaoqiangnk@gmail.com>
commit 13a79a4741d37fda2fbafb953f0f301dc007928f upstream.
If there is an unwritten but clean buffer in a page and there is a dirty buffer after the buffer, then mpage_submit_io does not write the dirty buffer out. As a result, da_writepages loops forever.
This patch fixes the problem by checking dirty flag.
Signed-off-by: Yongqiang Yang <xiaoqiangnk@gmail.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
--- fs/ext4/inode.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
--- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -1261,8 +1261,11 @@ static int mpage_da_submit_io(struct mpa clear_buffer_unwritten(bh); } - /* skip page if block allocation undone */ - if (buffer_delay(bh) || buffer_unwritten(bh)) + /* + * skip page if block allocation undone and + * block is dirty + */ + if (ext4_bh_delay_or_unwritten(NULL, bh)) skip_page = 1; bh = bh->b_this_page; block_start += bh->b_size;
| ![\](/images/icornerr.gif) |