From cda8fef27e3e057ad0dd15b587a620f6674d997d Mon Sep 17 00:00:00 2001 From: Ryusuke Konishi Date: Thu, 18 Jun 2009 23:52:23 +0900 Subject: [PATCH] --- yaml --- r: 155237 b: refs/heads/master c: 8227b29722fdbac72357aae155d171a5c777670c h: refs/heads/master i: 155235: d4c993d977231c7d13d5b317a62019788480851f v: v3 --- [refs] | 2 +- trunk/fs/nilfs2/segment.c | 26 ++++++-------------------- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/[refs] b/[refs] index 7123f317f6a7..7ffda1831321 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0cfae3d8795f388f9de78adb0171520d19da77e9 +refs/heads/master: 8227b29722fdbac72357aae155d171a5c777670c diff --git a/trunk/fs/nilfs2/segment.c b/trunk/fs/nilfs2/segment.c index c1824915c1c7..8b5e4778cf28 100644 --- a/trunk/fs/nilfs2/segment.c +++ b/trunk/fs/nilfs2/segment.c @@ -1836,19 +1836,6 @@ static int nilfs_segctor_write(struct nilfs_sc_info *sci, return 0; } -static int nilfs_page_has_uncleared_buffer(struct page *page) -{ - struct buffer_head *head, *bh; - - head = bh = page_buffers(page); - do { - if (buffer_dirty(bh) && !list_empty(&bh->b_assoc_buffers)) - return 1; - bh = bh->b_this_page; - } while (bh != head); - return 0; -} - static void __nilfs_end_page_io(struct page *page, int err) { if (!err) { @@ -1872,12 +1859,11 @@ static void nilfs_end_page_io(struct page *page, int err) if (!page) return; - if (buffer_nilfs_node(page_buffers(page)) && - nilfs_page_has_uncleared_buffer(page)) - /* For b-tree node pages, this function may be called twice - or more because they might be split in a segment. - This check assures that cleanup has been done for all - buffers in a split btnode page. */ + if (buffer_nilfs_node(page_buffers(page)) && !PageWriteback(page)) + /* + * For b-tree node pages, this function may be called twice + * or more because they might be split in a segment. + */ return; __nilfs_end_page_io(page, err); @@ -1940,7 +1926,7 @@ static void nilfs_segctor_abort_write(struct nilfs_sc_info *sci, } if (bh->b_page != fs_page) { nilfs_end_page_io(fs_page, err); - if (unlikely(fs_page == failed_page)) + if (fs_page && fs_page == failed_page) goto done; fs_page = bh->b_page; }