All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
To: Michal Hocko <mhocko@kernel.org>, Matthew Wilcox <willy@infradead.org>
Cc: linux-mm@kvack.org, Andrew Morton <akpm@linux-foundation.org>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] mm/swap: piggyback lru_add_drain_all() calls
Date: Fri, 4 Oct 2019 15:32:01 +0300	[thread overview]
Message-ID: <257f6172-971b-e0bd-0a74-30a0d143d6f9@yandex-team.ru> (raw)
In-Reply-To: <20191004122727.GA10845@dhcp22.suse.cz>



On 04/10/2019 15.27, Michal Hocko wrote:
> On Fri 04-10-19 05:10:17, Matthew Wilcox wrote:
>> On Fri, Oct 04, 2019 at 01:11:06PM +0300, Konstantin Khlebnikov wrote:
>>> This is very slow operation. There is no reason to do it again if somebody
>>> else already drained all per-cpu vectors after we waited for lock.
>>> +	seq = raw_read_seqcount_latch(&seqcount);
>>> +
>>>   	mutex_lock(&lock);
>>> +
>>> +	/* Piggyback on drain done by somebody else. */
>>> +	if (__read_seqcount_retry(&seqcount, seq))
>>> +		goto done;
>>> +
>>> +	raw_write_seqcount_latch(&seqcount);
>>> +
>>
>> Do we really need the seqcount to do this?  Wouldn't a mutex_trylock()
>> have the same effect?
> 
> Yeah, this makes sense. From correctness point of view it should be ok
> because no caller can expect that per-cpu pvecs are empty on return.
> This might have some runtime effects that some paths might retry more -
> e.g. offlining path drains pcp pvces before migrating the range away, if
> there are pages still waiting for a worker to drain them then the
> migration would fail and we would retry. But this not a correctness
> issue.
> 

Caller might expect that pages added by him before are drained.
Exiting after mutex_trylock() will not guarantee that.

For example POSIX_FADV_DONTNEED uses that.

  reply	other threads:[~2019-10-04 12:32 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-04 10:11 [PATCH] mm/swap: piggyback lru_add_drain_all() calls Konstantin Khlebnikov
2019-10-04 12:10 ` Matthew Wilcox
2019-10-04 12:24   ` Konstantin Khlebnikov
2019-10-04 12:27   ` Michal Hocko
2019-10-04 12:32     ` Konstantin Khlebnikov [this message]
2019-10-04 12:37       ` Michal Hocko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=257f6172-971b-e0bd-0a74-30a0d143d6f9@yandex-team.ru \
    --to=khlebnikov@yandex-team.ru \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@kernel.org \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.