diff mbox

[v2] f2fs: relax migratepage for atomic written page

Message ID 20170706214926.GB395@jaegeuk-macbookpro.roam.corp.google.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jaegeuk Kim July 6, 2017, 9:49 p.m. UTC
In order to avoid lock contention for atomic written pages, we'd better give
EBUSY in f2fs_migrate_page when mode is asynchronous. We expect it will be
released soon as transaction commits.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
---

Change log from v1:
 - return -EBUSY when mode is MIGRATE_ASYNC or MIGRATE_SYNC_LIGHT

 fs/f2fs/data.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Chao Yu July 6, 2017, 11:57 p.m. UTC | #1
On 2017/7/7 5:49, Jaegeuk Kim wrote:
> In order to avoid lock contention for atomic written pages, we'd better give
> EBUSY in f2fs_migrate_page when mode is asynchronous. We expect it will be
> released soon as transaction commits.
> 
> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>

Reviewed-by: Chao Yu <yuchao0@huawei.com>

> ---
> 
> Change log from v1:
>  - return -EBUSY when mode is MIGRATE_ASYNC or MIGRATE_SYNC_LIGHT
> 
>  fs/f2fs/data.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
> index 85ac3a63cce6..74c31cb203e2 100644
> --- a/fs/f2fs/data.c
> +++ b/fs/f2fs/data.c
> @@ -2206,8 +2206,12 @@ int f2fs_migrate_page(struct address_space *mapping,
>  	BUG_ON(PageWriteback(page));
>  
>  	/* migrating an atomic written page is safe with the inmem_lock hold */
> -	if (atomic_written && !mutex_trylock(&fi->inmem_lock))
> -		return -EAGAIN;
> +	if (atomic_written) {
> +		if (mode != MIGRATE_SYNC)
> +			return -EBUSY;
> +		if (!mutex_trylock(&fi->inmem_lock))
> +			return -EAGAIN;
> +	}
>  
>  	/*
>  	 * A reference is expected if PagePrivate set when move mapping,
>
diff mbox

Patch

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 85ac3a63cce6..74c31cb203e2 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -2206,8 +2206,12 @@  int f2fs_migrate_page(struct address_space *mapping,
 	BUG_ON(PageWriteback(page));
 
 	/* migrating an atomic written page is safe with the inmem_lock hold */
-	if (atomic_written && !mutex_trylock(&fi->inmem_lock))
-		return -EAGAIN;
+	if (atomic_written) {
+		if (mode != MIGRATE_SYNC)
+			return -EBUSY;
+		if (!mutex_trylock(&fi->inmem_lock))
+			return -EAGAIN;
+	}
 
 	/*
 	 * A reference is expected if PagePrivate set when move mapping,