All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Christoph Hellwig <hch@lst.de>
Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	Piotr Jaroszynski <pjaroszynski@nvidia.com>
Subject: Re: [PATCH] iomap: get/put the page in iomap_page_create/release()
Date: Thu, 31 Jan 2019 15:28:16 -0800	[thread overview]
Message-ID: <20190131232816.GF5761@magnolia> (raw)
In-Reply-To: <20190121151702.28863-1-hch@lst.de>

On Mon, Jan 21, 2019 at 04:17:02PM +0100, Christoph Hellwig wrote:
> From: Piotr Jaroszynski <pjaroszynski@nvidia.com>
> 
> migrate_page_move_mapping() expects pages with private data set to have
> a page_count elevated by 1.  This is what used to happen for xfs through
> the buffer_heads code before the switch to iomap in commit 82cb14175e7d
> ("xfs: add support for sub-pagesize writeback without buffer_heads").
> Not having the count elevated causes move_pages() to fail on memory
> mapped files coming from xfs.
> 
> Make iomap compatible with the migrate_page_move_mapping() assumption by
> elevating the page count as part of iomap_page_create() and lowering it
> in iomap_page_release().
> 
> It causes the move_pages() syscall to misbehave on memory mapped files
> from xfs.  It does not not move any pages, which I suppose is "just" a
> perf issue, but it also ends up returning a positive number which is out
> of spec for the syscall.  Talking to Michal Hocko, it sounds like
> returning positive numbers might be a necessary update to move_pages()
> anyway though.
> 
> Fixes: 82cb14175e7d ("xfs: add support for sub-pagesize writeback without buffer_heads")
> Signed-off-by: Piotr Jaroszynski <pjaroszynski@nvidia.com>
> [hch: actually get/put the page iomap_migrate_page() to make it work
>       properly]
> Signed-off-by: Christoph Hellwig <hch@lst.de>

Looks ok (apparently I forgot to ack this explicitly...)
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>

--D

> ---
>  fs/iomap.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/fs/iomap.c b/fs/iomap.c
> index 987fefc054b4..47362397cb82 100644
> --- a/fs/iomap.c
> +++ b/fs/iomap.c
> @@ -116,6 +116,12 @@ iomap_page_create(struct inode *inode, struct page *page)
>  	atomic_set(&iop->read_count, 0);
>  	atomic_set(&iop->write_count, 0);
>  	bitmap_zero(iop->uptodate, PAGE_SIZE / SECTOR_SIZE);
> +
> +	/*
> +	 * migrate_page_move_mapping() assumes that pages with private data have
> +	 * their count elevated by 1.
> +	 */
> +	get_page(page);
>  	set_page_private(page, (unsigned long)iop);
>  	SetPagePrivate(page);
>  	return iop;
> @@ -132,6 +138,7 @@ iomap_page_release(struct page *page)
>  	WARN_ON_ONCE(atomic_read(&iop->write_count));
>  	ClearPagePrivate(page);
>  	set_page_private(page, 0);
> +	put_page(page);
>  	kfree(iop);
>  }
>  
> @@ -569,8 +576,10 @@ iomap_migrate_page(struct address_space *mapping, struct page *newpage,
>  
>  	if (page_has_private(page)) {
>  		ClearPagePrivate(page);
> +		get_page(newpage);
>  		set_page_private(newpage, page_private(page));
>  		set_page_private(page, 0);
> +		put_page(page);
>  		SetPagePrivate(newpage);
>  	}
>  
> -- 
> 2.20.1
> 

  reply	other threads:[~2019-01-31 23:28 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-21 15:17 [PATCH] iomap: get/put the page in iomap_page_create/release() Christoph Hellwig
2019-01-31 23:28 ` Darrick J. Wong [this message]
  -- strict thread matches above, loose matches on Subject: below --
2019-01-15 21:10 Christoph Hellwig
2019-01-15 23:07 ` Dave Chinner
2019-01-17  7:51   ` Christoph Hellwig
2019-01-17 17:32     ` Piotr Jaroszynski
2019-01-19  9:45       ` Christoph Hellwig
2019-01-19 19:01         ` Piotr Jaroszynski
2018-11-15  0:30 p.jaroszynski
2018-11-15  9:30 ` Christoph Hellwig
2018-11-15 18:44   ` Piotr Jaroszynski
2018-11-15 18:44     ` Piotr Jaroszynski

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=20190131232816.GF5761@magnolia \
    --to=darrick.wong@oracle.com \
    --cc=hch@lst.de \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=pjaroszynski@nvidia.com \
    /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.