I've got a question about how ext4 handles the writeback control fields in ext4_da_writepages(). I understand how the big picture works: since we're doing delayed allocation, when we're asked to write out a range of dirty pages, we need to do allocation *now*, and we want to do allocation on the largest contiguous range of pages possible. So when __mpage_da_writepage() finds a page discontinuity, we submit the page extent we have so far for I/O, and call redirty_page_for_writepage() on the current page, skip the rest of the pages in the pagevec, and wait for a new transaction. On return from write_cache_pages(), ext4_da_writepages() will check the return value from __mpage_da_writepage(), and if it's MPAGE_DA_EXTENT_TAIL, will bump the number of pages written, and possibly cause another loop to handle the rest of the pages (after the discontinuity). What I don't understand is why wbc->pages_skipped is reset in this case. I *think* that ext4_da_writepages() is trying to undo the effect of redirty_page_for_writepage() to increment pages_skipped -- since we didn't really skip this page, we only postponed its handling to the next pagevec. But the actual submittal of I/O for the previous extent might cause pages_skipped to be bumped, right? Removing these increments might cause the accounting to be incorrect, it seems to me. I think it would be safer to explicitly decrement wbc->pages_skipped after a call to redirty_page_for_writepage(), rather than reset this value to what it was when ext4_da_writepages() was called. Can somebody help me understand where I might be mistaken? Thanks, Curt -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html