f2fs: relax migratepage for atomic written page
authorJaegeuk Kim <jaegeuk@kernel.org>
Thu, 6 Jul 2017 21:46:01 +0000 (14:46 -0700)
committerJaegeuk Kim <jaegeuk@kernel.org>
Fri, 7 Jul 2017 17:34:48 +0000 (10:34 -0700)
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.

Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/data.c

index cffcfa8d25711ad6894300e94c1617f615424067..72fc866cad1955a3391d4baab6904da768cb22a3 100644 (file)
@@ -2203,8 +2203,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,