[Devel] [PATCH rh7] NFS: Don't call COMMIT in ->releasepage()

Konstantin Khorenko khorenko at virtuozzo.com
Thu Dec 7 14:09:17 MSK 2017


Please consider to RK this.

https://readykernel.com/

--
Best regards,

Konstantin Khorenko,
Virtuozzo Linux Kernel Team

On 12/01/2017 04:15 PM, Andrey Ryabinin wrote:
> From: Trond Myklebust <trond.myklebust at primarydata.com>
>
> While COMMIT has the potential to free up a lot of memory that is being
> taken by unstable writes, it isn't guaranteed to free up this particular
> page. Also, calling fsync() on the server is expensive and so we want to
> do it in a more controlled fashion, rather than have it triggered at
> random by the VM.
>
> Signed-off-by: Trond Myklebust <trond.myklebust at primarydata.com>
>
> https://jira.sw.ru/browse/PSBM-77949
> (cherry picked from commit 4f52b6bb8c57b9accafad526a429d6c0851cc62f)
> Signed-off-by: Andrey Ryabinin <aryabinin at virtuozzo.com>
> ---
>  fs/nfs/file.c | 23 -----------------------
>  1 file changed, 23 deletions(-)
>
> diff --git a/fs/nfs/file.c b/fs/nfs/file.c
> index 7ad044976fd1..24d3d0c44bc4 100644
> --- a/fs/nfs/file.c
> +++ b/fs/nfs/file.c
> @@ -470,31 +470,8 @@ static void nfs_invalidate_page(struct page *page, unsigned int offset,
>   */
>  static int nfs_release_page(struct page *page, gfp_t gfp)
>  {
> -	struct address_space *mapping = page->mapping;
> -
>  	dfprintk(PAGECACHE, "NFS: release_page(%p)\n", page);
>
> -	/* Always try to initiate a 'commit' if relevant, but only
> -	 * wait for it if __GFP_WAIT is set.  Even then, only wait 1
> -	 * second and only if the 'bdi' is not congested.
> -	 * Waiting indefinitely can cause deadlocks when the NFS
> -	 * server is on this machine, when a new TCP connection is
> -	 * needed and in other rare cases.  There is no particular
> -	 * need to wait extensively here.  A short wait has the
> -	 * benefit that someone else can worry about the freezer.
> -	 */
> -	if (mapping) {
> -		struct nfs_server *nfss = NFS_SERVER(mapping->host);
> -		nfs_commit_inode(mapping->host, 0);
> -		if ((gfp & __GFP_WAIT) &&
> -		    !bdi_write_congested(&nfss->backing_dev_info)) {
> -			wait_on_page_bit_killable_timeout(page, PG_private,
> -							  HZ);
> -			if (PagePrivate(page))
> -				set_bdi_congested(&nfss->backing_dev_info,
> -						  BLK_RW_ASYNC);
> -		}
> -	}
>  	/* If PagePrivate() is set, then the page is not freeable */
>  	if (PagePrivate(page))
>  		return 0;
>


More information about the Devel mailing list