From: "Kirill A. Shutemov" <kirill@shutemov.name>
To: Hugh Dickins <hughd@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
Matthew Wilcox <willy@infradead.org>,
linux-mm@kvack.org
Subject: Re: [PATCH 07/10] mm/khugepaged: minor reorderings in collapse_shmem()
Date: Tue, 27 Nov 2018 10:59:46 +0300 [thread overview]
Message-ID: <20181127075945.m5nbflc6nqto6f2i@kshutemo-mobl1> (raw)
In-Reply-To: <alpine.LSU.2.11.1811261526400.2275@eggly.anvils>
On Mon, Nov 26, 2018 at 03:27:52PM -0800, Hugh Dickins wrote:
> Several cleanups in collapse_shmem(): most of which probably do not
> really matter, beyond doing things in a more familiar and reassuring
> order. Simplify the failure gotos in the main loop, and on success
> update stats while interrupts still disabled from the last iteration.
>
> Fixes: f3f0e1d2150b2 ("khugepaged: add support of collapse for tmpfs/shmem pages")
> Signed-off-by: Hugh Dickins <hughd@google.com>
> Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
> Cc: stable@vger.kernel.org # 4.8+
> ---
> mm/khugepaged.c | 72 ++++++++++++++++++++++---------------------------
> 1 file changed, 32 insertions(+), 40 deletions(-)
>
> diff --git a/mm/khugepaged.c b/mm/khugepaged.c
> index 1c402d33547e..9d4e9ff1af95 100644
> --- a/mm/khugepaged.c
> +++ b/mm/khugepaged.c
> @@ -1329,10 +1329,10 @@ static void collapse_shmem(struct mm_struct *mm,
> goto out;
> }
>
> + __SetPageLocked(new_page);
> + __SetPageSwapBacked(new_page);
> new_page->index = start;
> new_page->mapping = mapping;
> - __SetPageSwapBacked(new_page);
> - __SetPageLocked(new_page);
> BUG_ON(!page_ref_freeze(new_page, 1));
>
> /*
> @@ -1366,13 +1366,13 @@ static void collapse_shmem(struct mm_struct *mm,
> if (index == start) {
> if (!xas_next_entry(&xas, end - 1)) {
> result = SCAN_TRUNCATED;
> - break;
> + goto xa_locked;
> }
> xas_set(&xas, index);
> }
> if (!shmem_charge(mapping->host, 1)) {
> result = SCAN_FAIL;
> - break;
> + goto xa_locked;
> }
> xas_store(&xas, new_page + (index % HPAGE_PMD_NR));
> nr_none++;
> @@ -1387,13 +1387,12 @@ static void collapse_shmem(struct mm_struct *mm,
> result = SCAN_FAIL;
> goto xa_unlocked;
> }
> - xas_lock_irq(&xas);
> - xas_set(&xas, index);
> } else if (trylock_page(page)) {
> get_page(page);
> + xas_unlock_irq(&xas);
> } else {
> result = SCAN_PAGE_LOCK;
> - break;
> + goto xa_locked;
> }
>
> /*
I'm puzzled by locking change here.
Isn't the change responsible for the bug you are fixing in 09/10?
IIRC, my intend for the locking scheme was to protect against
truncate-repopulate race.
What do I miss?
The rest of the patch *looks* okay, but I found it hard to follow.
Splitting it up would make it easier.
--
Kirill A. Shutemov
next prev parent reply other threads:[~2018-11-27 7:59 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-26 23:13 [PATCH 00/10] huge_memory,khugepaged tmpfs split/collapse fixes Hugh Dickins
2018-11-26 23:19 ` [PATCH 02/10] mm/huge_memory: splitting set mapping+index before unfreeze Hugh Dickins
2018-11-27 7:26 ` Kirill A. Shutemov
2018-11-26 23:21 ` [PATCH 03/10] mm/huge_memory: fix lockdep complaint on 32-bit i_size_read() Hugh Dickins
2018-11-27 7:27 ` Kirill A. Shutemov
2018-11-26 23:23 ` [PATCH 04/10] mm/khugepaged: collapse_shmem() stop if punched or truncated Hugh Dickins
2018-11-27 7:31 ` Kirill A. Shutemov
2018-11-27 13:26 ` Matthew Wilcox
2018-11-26 23:25 ` [PATCH 05/10] mm/khugepaged: fix crashes due to misaccounted holes Hugh Dickins
2018-11-27 7:35 ` Kirill A. Shutemov
2018-11-26 23:26 ` [PATCH 06/10] mm/khugepaged: collapse_shmem() remember to clear holes Hugh Dickins
2018-11-27 7:38 ` Kirill A. Shutemov
2018-11-26 23:27 ` [PATCH 07/10] mm/khugepaged: minor reorderings in collapse_shmem() Hugh Dickins
2018-11-27 7:59 ` Kirill A. Shutemov [this message]
2018-11-27 20:23 ` Hugh Dickins
2018-11-28 10:59 ` Kirill A. Shutemov
2018-11-28 19:40 ` Hugh Dickins
2018-11-26 23:29 ` [PATCH 08/10] mm/khugepaged: collapse_shmem() without freezing new_page Hugh Dickins
2018-11-27 8:01 ` Kirill A. Shutemov
2018-11-26 23:31 ` [PATCH 09/10] mm/khugepaged: collapse_shmem() do not crash on Compound Hugh Dickins
2018-11-26 23:33 ` [PATCH 10/10] mm/khugepaged: fix the xas_create_range() error path Hugh Dickins
2018-11-27 8:02 ` Kirill A. Shutemov
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=20181127075945.m5nbflc6nqto6f2i@kshutemo-mobl1 \
--to=kirill@shutemov.name \
--cc=akpm@linux-foundation.org \
--cc=hughd@google.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=linux-mm@kvack.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox