Thread (39 messages) 39 messages, 5 authors, 2022-01-19

Re: [PATCH 10/18] NFS: swap IO handling is slightly different for O_DIRECT IO

From: Mark Hemment <hidden>
Date: 2021-12-20 15:23:18
Also in: linux-mm, lkml

On Thu, 16 Dec 2021 at 23:58, NeilBrown [off-list ref] wrote:
1/ Taking the i_rwsem for swap IO triggers lockdep warnings regarding
   possible deadlocks with "fs_reclaim".  These deadlocks could, I believe,
   eventuate if a buffered read on the swapfile was attempted.

   We don't need coherence with the page cache for a swap file, and
   buffered writes are forbidden anyway.  There is no other need for
   i_rwsem during direct IO.  So never take it for swap_rw()
Agreed.  I cannot see an issue with not taking the sem.
2/ generic_write_checks() explicitly forbids writes to swap, and
   performs checks that are not needed for swap.  So bypass it
   for swap_rw().

Signed-off-by: NeilBrown <redacted>
---
...
quoted hunk ↗ jump to hunk
diff --git a/fs/nfs/file.c b/fs/nfs/file.c
@@ -625,7 +625,7 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from)
                return result;

        if (iocb->ki_flags & IOCB_DIRECT)
-               return nfs_file_direct_write(iocb, from);
+               return nfs_file_direct_write(iocb, from, false);

        dprintk("NFS: write(%pD2, %zu@%Ld)\n",
                file, iov_iter_count(from), (long long) iocb->ki_pos);
This code at the top of nfs/file.c should be removed;
    /* Hack for future NFS swap support */
    #ifndef IS_SWAPFILE
    # define IS_SWAPFILE(inode)     (0)
    #endif
As IS_SWAPFILE() is used just below this diff (to prevent buffered
writes), better be using a non-hacked version.

Mark
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help