Loading fs/ntfs/ChangeLog +3 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,9 @@ ToDo/Notes: only zeroes. - Fixup handling of sparse, compressed, and encrypted attributes in fs/ntfs/aops.c::ntfs_writepage(). - Optimize fs/ntfs/aops.c::ntfs_write_block() by extending the page lock protection over the buffer submission for i/o which allows the removal of the get_bh()/put_bh() pairs for each buffer. 2.1.23 - Implement extension of resident files and make writing safe as well as many bug fixes, cleanups, and enhancements... Loading fs/ntfs/aops.c +3 −10 Original line number Diff line number Diff line Loading @@ -735,7 +735,7 @@ static int ntfs_write_block(struct page *page, struct writeback_control *wbc) /* For the error case, need to reset bh to the beginning. */ bh = head; /* Just an optimization, so ->readpage() isn't called later. */ /* Just an optimization, so ->readpage() is not called later. */ if (unlikely(!PageUptodate(page))) { int uptodate = 1; do { Loading @@ -751,7 +751,6 @@ static int ntfs_write_block(struct page *page, struct writeback_control *wbc) /* Setup all mapped, dirty buffers for async write i/o. */ do { get_bh(bh); if (buffer_mapped(bh) && buffer_dirty(bh)) { lock_buffer(bh); if (test_clear_buffer_dirty(bh)) { Loading Loading @@ -789,14 +788,8 @@ static int ntfs_write_block(struct page *page, struct writeback_control *wbc) BUG_ON(PageWriteback(page)); set_page_writeback(page); /* Keeps try_to_free_buffers() away. */ unlock_page(page); /* * Submit the prepared buffers for i/o. Note the page is unlocked, * and the async write i/o completion handler can end_page_writeback() * at any time after the *first* submit_bh(). So the buffers can then * disappear... */ /* Submit the prepared buffers for i/o. */ need_end_writeback = TRUE; do { struct buffer_head *next = bh->b_this_page; Loading @@ -804,9 +797,9 @@ static int ntfs_write_block(struct page *page, struct writeback_control *wbc) submit_bh(WRITE, bh); need_end_writeback = FALSE; } put_bh(bh); bh = next; } while (bh != head); unlock_page(page); /* If no i/o was started, need to end_page_writeback(). */ if (unlikely(need_end_writeback)) Loading Loading
fs/ntfs/ChangeLog +3 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,9 @@ ToDo/Notes: only zeroes. - Fixup handling of sparse, compressed, and encrypted attributes in fs/ntfs/aops.c::ntfs_writepage(). - Optimize fs/ntfs/aops.c::ntfs_write_block() by extending the page lock protection over the buffer submission for i/o which allows the removal of the get_bh()/put_bh() pairs for each buffer. 2.1.23 - Implement extension of resident files and make writing safe as well as many bug fixes, cleanups, and enhancements... Loading
fs/ntfs/aops.c +3 −10 Original line number Diff line number Diff line Loading @@ -735,7 +735,7 @@ static int ntfs_write_block(struct page *page, struct writeback_control *wbc) /* For the error case, need to reset bh to the beginning. */ bh = head; /* Just an optimization, so ->readpage() isn't called later. */ /* Just an optimization, so ->readpage() is not called later. */ if (unlikely(!PageUptodate(page))) { int uptodate = 1; do { Loading @@ -751,7 +751,6 @@ static int ntfs_write_block(struct page *page, struct writeback_control *wbc) /* Setup all mapped, dirty buffers for async write i/o. */ do { get_bh(bh); if (buffer_mapped(bh) && buffer_dirty(bh)) { lock_buffer(bh); if (test_clear_buffer_dirty(bh)) { Loading Loading @@ -789,14 +788,8 @@ static int ntfs_write_block(struct page *page, struct writeback_control *wbc) BUG_ON(PageWriteback(page)); set_page_writeback(page); /* Keeps try_to_free_buffers() away. */ unlock_page(page); /* * Submit the prepared buffers for i/o. Note the page is unlocked, * and the async write i/o completion handler can end_page_writeback() * at any time after the *first* submit_bh(). So the buffers can then * disappear... */ /* Submit the prepared buffers for i/o. */ need_end_writeback = TRUE; do { struct buffer_head *next = bh->b_this_page; Loading @@ -804,9 +797,9 @@ static int ntfs_write_block(struct page *page, struct writeback_control *wbc) submit_bh(WRITE, bh); need_end_writeback = FALSE; } put_bh(bh); bh = next; } while (bh != head); unlock_page(page); /* If no i/o was started, need to end_page_writeback(). */ if (unlikely(need_end_writeback)) Loading