[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200821180629.GF3432@quack2.suse.cz>
Date: Fri, 21 Aug 2020 20:06:29 +0200
From: Jan Kara <jack@...e.cz>
To: Matthew Wilcox <willy@...radead.org>
Cc: Jan Kara <jack@...e.cz>, linux-mm@...ck.org,
Andrew Morton <akpm@...ux-foundation.org>,
Hugh Dickins <hughd@...gle.com>,
William Kucharski <william.kucharski@...cle.com>,
Johannes Weiner <hannes@...xchg.org>,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH 3/7] mm: Add an 'end' parameter to find_get_entries
On Fri 21-08-20 17:33:06, Matthew Wilcox wrote:
> On Fri, Aug 21, 2020 at 06:07:59PM +0200, Jan Kara wrote:
> > On Wed 19-08-20 16:05:51, Matthew Wilcox (Oracle) wrote:
> > > This simplifies the callers and leads to a more efficient implementation
> > > since the XArray has this functionality already.
> > >
> > > Signed-off-by: Matthew Wilcox (Oracle) <willy@...radead.org>
> >
> > The patch looks good to me. Just I'd note that you could drop some:
> >
> > if (index >= end)
> > break;
> >
> > checks in shmem_undo_range() as well.
>
> Oh yes, missed a couple ;-) Thanks, I'll add.
>
> > In the past I was considering moving find_get_entries() to the same API as
> > find_get_pages_range() has (which is essentially what you do now, but I
> > also had 'start' to be a pgoff_t * so that we can return there where the
> > iteration ended in the range). But in the end I've decided the churn is not
> > worth the few removed lines and didn't push the patch in the end. What you
> > did in this patch seems to be a reasonable middle-ground :)
>
> I did look at that, but since we're returning the indices, we don't _need_
> to update the index here.
>
> I have some other ideas for this family of interfaces, but I'm trying
> to get the THP work off my plate before getting distracted by that ;-)
I have one thing which I wanted to do for a long time but never got to it.
IMHO the pagevec abstraction makes the loops unnecessarily complex. I'd
rather have helpers like:
for_each_mapping_page(mapping, page, start, end)
or
for_each_mapping_entry(mapping, entry, index, start, end)
and hide all the pagevec magic inside those. And it's even not that hard to
do including the handling of premature exit from the loop - sample
userspace code is attached...
Honza
--
Jan Kara <jack@...e.com>
SUSE Labs, CR
View attachment "pvec_looping.c" of type "text/x-c" (1402 bytes)
Powered by blists - more mailing lists