Re: [PATCH v19 00/40] DEPT(DEPendency Tracker)

Matthew Wilcox <[email protected]>
Newsgroups org.kernel.vger.rust-for-linux,dev.linux.lists.linux-rt-devel,org.kernel.vger.linux-arch,org.kernel.vger.linux-block,org.kernel.vger.linux-doc,org.kernel.vger.linux-ext4,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-i2c,org.kernel.vger.linux-ide,org.kernel.vger.linux-kernel,org.kernel.vger.linux-media,org.kernel.vger.linux-modules,org.kernel.vger.linux-nfs,org.kernel.vger.netdev,org.kernel.vger.rcu,org.kvack.linux-mm
Message-ID <[email protected]>
On Tue, Aug 25, 2026 at 09:37:34AM +1000, NeilBrown wrote:
> > For readahead, I think that queues / lru are not involved. We submit the I/O,
> > and once the I/O is done, we unlock the folio from interrupt context.
> 
> "submit the I/O" means "attach the page to a "struct bio" (or similar)
> and attach the struct bio to a transmit queue for the device (or
> similar).  So there really is a queue.
> 
> > 
> > end_buffer_async_read() / iomap_finish_folio_read() end up calling
> > folio_end_read(), where we do the magic
> > 
> > 	folio_wake_bit(folio, PG_locked);
> 
> Exactly where the lock ownership should be reclaimed is not immediately
> clear to me.  bio_endio() might be early enough but there are probably
> better points.
> 
> A small difficulty here is that a bio has multiple folios and they are
> all locked.  I cannot see that lockdep has a concept of holding an
> arbitrarily large set of related locks.
> We could just tell lockdep 
>   "I have some folios locked" 
> or maybe enhance lockdep to allow
>   "I have N folios locked"
> or even
>   "I have N folios in address-space A with the highest offset being O".
> 
> This would allow lockdep to check the validity of locking another folio
> - only allowed if the address space is the same and the offset is larger
> than the previous largest.

It's more complex than that; see my other emails on the subject.

I think we need the ability for lockdep to call a function which says "I
hold this lock, is that lock OK to acquire".  But the devil is in the
details.

> > 
> > It's interesting, that for writeback we never unlock the folio on the I/O path,
> > but instead have the dedicated page flag to tell us when writeback is complete.
> 
> PG_locked and PG_writeback are two different lock-bits with two
> different meanings.
> When a folio is PG_locked the content is invalid and shouldn't be accessed.
> When a folio is in PG_writeback its data is not safe even though
> PG_dirty has been cleared (if I remember correctly).
> 
> So these are two separate, though related, lock bits that would both
> need to be tracked.  lockdep would detect how they are related.

Some history ... before we had PG_writeback, we held PG_locked
throughout the writeback process.  People argued convincingly that it
was fine to map a page into a process's address space (which requires
PG_locked) while it was being written back.  And so PG_locked was
split.  Now we take PG_locked at the beginning of the writeback process
and downgrade to PG_writeback at some point.
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.