[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20160915153408.qvhtcymmvkfdlvfj@thunk.org>
Date: Thu, 15 Sep 2016 11:34:08 -0400
From: Theodore Ts'o <tytso@....edu>
To: wang.guang55@....com.cn
Cc: linux-ext4@...r.kernel.org
Subject: Re: [RESEND PATCH]ext4: bugfix for mmaped pages in
mpage_release_unused_pages()
On Tue, Sep 06, 2016 at 04:49:17PM +0800, wang.guang55@....com.cn wrote:
> ext4: bugfix for mmaped pages in mpage_release_unused_pages()
>
> Pages clear buffers after ext4 delayed block allocation failed,
> However, it does not clean its pte_dirty flag.
> if the pages unmap ,in cording to the pte_dirty ,
> unmap_page_range may try to call __set_page_dirty,
>
> which may lead to the bugon at
> mpage_prepare_extent_to_map:head = page_buffers(page);.
>
> This patch just call clear_page_dirty_for_io to clean pte_dirty
> at mpage_release_unused_pages for pages mmaped.
>
>
> Steps to reproduce the bug:
> (1) mmap a file in ext4
> addr = (char *)mmap(NULL, 4096,
> PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
> memset(addr, 'i', 4096);
> (2) return EIO at
> ext4_writepages->mpage_map_and_submit_extent->mpage_map_one_extent
> Cause the log:
> ext4_msg(sb, KERN_CRIT,
> "Delayed block allocation failed for "
> "inode %lu at logical offset %llu with"
> " max blocks %u with error %d",
> inode->i_ino,
> (unsigned long long)map->m_lblk,
> (unsigned)map->m_len, -err);
>
> (3)Unmap the addr cause warning at
> __set_page_dirty:WARN_ON_ONCE(warn && !PageUptodate(page));
> (4) wait for a minute,then bugon happen.
>
> Signed-off-by: wangguang <wangguang03@....com>
Thanks, applied. Apologies for the delay.
- Ted
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists