diff --git a/[refs] b/[refs] index bc422379746a..e1e916dd4923 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9a59f452abe11f569e13ec16c51e6d61c54b9838 +refs/heads/master: 152becd26e0563aefdbc4fd1fe491928efe92d1f diff --git a/trunk/fs/buffer.c b/trunk/fs/buffer.c index 12bdb2791127..13e5938a64f6 100644 --- a/trunk/fs/buffer.c +++ b/trunk/fs/buffer.c @@ -1926,7 +1926,6 @@ static int __block_prepare_write(struct inode *inode, struct page *page, if (err) break; if (buffer_new(bh)) { - clear_buffer_new(bh); unmap_underlying_metadata(bh->b_bdev, bh->b_blocknr); if (PageUptodate(page)) { @@ -1968,9 +1967,14 @@ static int __block_prepare_write(struct inode *inode, struct page *page, if (!buffer_uptodate(*wait_bh)) err = -EIO; } - if (!err) - return err; - + if (!err) { + bh = head; + do { + if (buffer_new(bh)) + clear_buffer_new(bh); + } while ((bh = bh->b_this_page) != head); + return 0; + } /* Error case: */ /* * Zero out any newly allocated blocks to avoid exposing stale