f2fs: fix inode rwsem regression
authorGoldwyn Rodrigues <rgoldwyn@suse.com>
Wed, 11 Sep 2019 16:45:17 +0000 (11:45 -0500)
committerJaegeuk Kim <jaegeuk@kernel.org>
Mon, 16 Sep 2019 15:38:45 +0000 (08:38 -0700)
This is similar to 942491c9e6d6 ("xfs: fix AIM7 regression")
Apparently our current rwsem code doesn't like doing the trylock, then
lock for real scheme.  So change our read/write methods to just do the
trylock for the RWF_NOWAIT case.

We don't need a check for IOCB_NOWAIT and !direct-IO because it
is checked in generic_write_checks().

Fixes: b91050a80cec ("f2fs: add nowait aio support")
Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/file.c

index fab6e4c..aea82f2 100644 (file)
@@ -3230,11 +3230,12 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
                goto out;
        }
 
-       if (!inode_trylock(inode)) {
-               if (iocb->ki_flags & IOCB_NOWAIT) {
+       if (iocb->ki_flags & IOCB_NOWAIT) {
+               if (!inode_trylock(inode)) {
                        ret = -EAGAIN;
                        goto out;
                }
+       } else {
                inode_lock(inode);
        }