• Qu Wenruo's avatar
    btrfs: remove the nr_ret parameter from __extent_writepage_io() · 2c70fe16
    Qu Wenruo authored
    The parameter @nr_ret is used to tell the caller how many sectors have
    been submitted for IO.
    
    Then callers check @nr_ret value to determine if we need to manually
    clear the PAGECACHE_TAG_DIRTY, as if we submitted no sector (e.g. all
    sectors are beyond i_size) there is no folio_start_writeback() called thus
    PAGECACHE_TAG_DIRTY tag will not be cleared.
    
    Remove this parameter by:
    
    - Moving the btrfs_folio_clear_writeback() call into
      __extent_writepage_io()
      So that if we didn't submit any IO, then manually call
      btrfs_folio_set_writeback() to clear PAGECACHE_TAG_DIRTY when
      the page is no longer dirty.
    
    - Use a bool to record if we have submitted any sector
      Instead of an int.
    
    - Use subpage compatible helpers to end folio writeback.
      This brings no change to the behavior, just for the sake of consistency.
    
      As for the call site inside __extent_writepage(), we're always called
      for the whole page, so the existing full page helper
      folio_(start|end)_writeback() is totally fine.
    
      For the call site inside extent_write_locked_range(), although we can
      have subpage range, folio_start_writeback() will only clear
      PAGECACHE_TAG_DIRTY if the page is no longer dirty, and the full folio
      will still be dirty if there is any subpage dirty range.
      Only when the last dirty subpage sector is cleared, the
      folio_start_writeback() will clear PAGECACHE_TAG_DIRTY.
    
      So no matter if we call the full page or subpage helper, the result
      is still the same, then just use the subpage helpers for consistency.
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    2c70fe16
extent_io.c 122 KB