Re: ceph: fix leaked inode reference on writeback abort at umount

Alex Markuze <[email protected]>
Newsgroups org.kernel.vger.ceph-devel
Message-ID <[email protected]>
Hi matthew,

NACK for now. Thanks for the patch, but I have some concerns
that need a v2:

  1. [major] commit message: Commit message describes a nonexistent redirty mechanism
     The commit message claims `redirty_page_for_writepage()` calls
     `folio_mark_dirty()`, which re-enters `ceph_dirty_folio()` and
     double-increments `i_wrbuffer_ref`. This doesn't happen. The actual
     chain is `redirty_page_for_writepage()` →
     `folio_redirty_for_writepage()` → `filemap_dirty_folio()`, which
     sets PG_dirty directly — it never dispatches through
     `->dirty_folio`, so `ceph_dirty_folio()` is never re-entered. The
     real bug is simpler: the wrbuffer claim (i_wrbuffer_ref,
     snap_context, ihold) is leaked because `writepages_finish()` — the
     only release path — never runs for writes that were never
     submitted. During umount the osd_stopping_blocker keeps failing, so
     the claim stays leaked and the inode can't be evicted.
     Suggested fix: Drop the double-increment theory. Rewrite around the
     actual failure: unsubmitted writes orphan their wrbuffer claim, and
     releasing it before redirtying lets `i_wrbuffer_ref` reach 0 and
     unblocks inode eviction.
  2. [nit] fs/ceph/addr.c:1429: Helper uses page API instead of folio API
     `ceph_undo_wrbuffer_claim()` takes `struct page *` and uses
     `detach_page_private()`, while `ceph_invalidate_folio()` uses
     `folio_detach_private()`. Functionally identical but folio API is
     preferred for new code.
     Suggested fix: Worth converting if respinning anyway, but not a
     blocker.

Code fix is correct but commit message wrongly claims redirty re-enters ceph_dirty_folio(); needs respin with accurate description of the leaked wrbuffer claim.


-- 
Alex Markuze
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.