On Thu, 26 Feb 2026 18:26:20 +0000 Dmitry Ilvokhin <[email protected]> wrote:
> Compaction uses compact_lock_irqsave(), which currently operates > on a raw spinlock_t pointer so it can be used for both zone->lock > and lruvec->lru_lock. Since zone lock operations are now wrapped, > compact_lock_irqsave() can no longer directly operate on a > spinlock_t when the lock belongs to a zone. > > Split the helper into compact_zone_lock_irqsave() and > compact_lruvec_lock_irqsave(), duplicating the small amount of > shared logic. As there are only two call sites and both statically > know the lock type, this avoids introducing additional abstraction > or runtime dispatch in the compaction path. > > No functional change intended. > > Signed-off-by: Dmitry Ilvokhin <[email protected]> > --- > mm/compaction.c | 33 ++++++++++++++++++++++++--------- > 1 file changed, 24 insertions(+), 9 deletions(-) > > diff --git a/mm/compaction.c b/mm/compaction.c > index 47b26187a5df..9f7997e827bd 100644 > --- a/mm/compaction.c > +++ b/mm/compaction.c > @@ -503,19 +503,36 @@ static bool test_and_set_skip(struct compact_control > *cc, struct page *page) > * > * Always returns true which makes it easier to track lock state in callers. > */ > -static bool compact_lock_irqsave(spinlock_t *lock, unsigned long *flags, > - struct compact_control *cc) > - __acquires(lock) > +static bool compact_zone_lock_irqsave(struct zone *zone, > + unsigned long *flags, > + struct compact_control *cc) > +__acquires(&zone->lock) Nit. Why don't you keep the indentation? My impression based on below output is that mm code prefer indenting __acquires(). $ git grep __acquires mm mm/compaction.c:__acquires(&zone->_lock) mm/compaction.c:__acquires(&lruvec->lru_lock) mm/khugepaged.c: __acquires(&khugepaged_mm_lock) mm/userfaultfd.c: __acquires(ptl1) mm/userfaultfd.c: __acquires(ptl2) Thanks, SJ [...]
