All of lore.kernel.org
 help / color / mirror / Atom feed
From: Goldwyn Rodrigues <rgoldwyn@suse.de>
To: linux-btrfs@vger.kernel.org
Cc: linux-fsdevel@vger.kernel.org, hch@infradead.org,
	darrick.wong@oracle.com, fdmanana@kernel.org, dsterba@suse.cz,
	jthumshirn@suse.de, nborisov@suse.com,
	Goldwyn Rodrigues <rgoldwyn@suse.com>
Subject: [PATCH 4/8] iomap: Move lockdep_assert_held() to iomap_dio_rw() calls
Date: Wed, 11 Dec 2019 18:30:39 -0600	[thread overview]
Message-ID: <20191212003043.31093-5-rgoldwyn@suse.de> (raw)
In-Reply-To: <20191212003043.31093-1-rgoldwyn@suse.de>

From: Goldwyn Rodrigues <rgoldwyn@suse.com>

Filesystems such as btrfs can perform direct I/O without holding the
inode->i_rwsem in some of the cases like writing within i_size.
So, remove the check for lockdep_assert_held() in iomap_dio_rw()
and move it to where iomap_dio_rw() is called so the checks are
in place.

Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
---
 fs/gfs2/file.c       | 4 ++++
 fs/iomap/direct-io.c | 2 --
 fs/xfs/xfs_file.c    | 9 ++++++++-
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c
index 9d58295ccf7a..d0517a78640b 100644
--- a/fs/gfs2/file.c
+++ b/fs/gfs2/file.c
@@ -771,6 +771,8 @@ static ssize_t gfs2_file_direct_read(struct kiocb *iocb, struct iov_iter *to)
 	if (ret)
 		goto out_uninit;
 
+	lockdep_assert_held(&file_inode(file)->i_rwsem);
+
 	ret = iomap_dio_rw(iocb, to, &gfs2_iomap_ops, NULL,
 			   is_sync_kiocb(iocb));
 
@@ -807,6 +809,8 @@ static ssize_t gfs2_file_direct_write(struct kiocb *iocb, struct iov_iter *from)
 	if (offset + len > i_size_read(&ip->i_inode))
 		goto out;
 
+	lockdep_assert_held(&inode->i_rwsem);
+
 	ret = iomap_dio_rw(iocb, from, &gfs2_iomap_ops, NULL,
 			   is_sync_kiocb(iocb));
 
diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c
index 1a3bf3bd86fb..41c1e7c20a1f 100644
--- a/fs/iomap/direct-io.c
+++ b/fs/iomap/direct-io.c
@@ -415,8 +415,6 @@ iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,
 	struct blk_plug plug;
 	struct iomap_dio *dio;
 
-	lockdep_assert_held(&inode->i_rwsem);
-
 	if (!count)
 		return 0;
 
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
index c93250108952..dfaccd4d6e6c 100644
--- a/fs/xfs/xfs_file.c
+++ b/fs/xfs/xfs_file.c
@@ -176,7 +176,8 @@ xfs_file_dio_aio_read(
 	struct kiocb		*iocb,
 	struct iov_iter		*to)
 {
-	struct xfs_inode	*ip = XFS_I(file_inode(iocb->ki_filp));
+	struct inode		*inode = file_inode(iocb->ki_filp);
+	struct xfs_inode	*ip = XFS_I(inode);
 	size_t			count = iov_iter_count(to);
 	ssize_t			ret;
 
@@ -188,6 +189,9 @@ xfs_file_dio_aio_read(
 	file_accessed(iocb->ki_filp);
 
 	xfs_ilock(ip, XFS_IOLOCK_SHARED);
+
+	lockdep_assert_held(&inode->i_rwsem);
+
 	ret = iomap_dio_rw(iocb, to, &xfs_read_iomap_ops, NULL,
 			is_sync_kiocb(iocb));
 	xfs_iunlock(ip, XFS_IOLOCK_SHARED);
@@ -547,6 +551,9 @@ xfs_file_dio_aio_write(
 	}
 
 	trace_xfs_file_direct_write(ip, count, iocb->ki_pos);
+
+	lockdep_assert_held(&inode->i_rwsem);
+
 	/*
 	 * If unaligned, this is the only IO in-flight. Wait on it before we
 	 * release the iolock to prevent subsequent overlapping IO.
-- 
2.16.4


  parent reply	other threads:[~2019-12-12  0:31 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-12  0:30 [PATCH 0/8 v5] btrfs direct-io using iomap Goldwyn Rodrigues
2019-12-12  0:30 ` [PATCH 1/8] fs: Export generic_file_buffered_read() Goldwyn Rodrigues
2019-12-12  9:46   ` Christoph Hellwig
2019-12-12  0:30 ` [PATCH 2/8] iomap: add a filesystem hook for direct I/O bio submission Goldwyn Rodrigues
2019-12-12  9:47   ` Christoph Hellwig
2019-12-12  0:30 ` [PATCH 3/8] btrfs: Switch to iomap_dio_rw() for dio Goldwyn Rodrigues
2019-12-12  9:49   ` Christoph Hellwig
2019-12-12  9:56     ` Johannes Thumshirn
2019-12-12  9:57       ` Christoph Hellwig
2019-12-12 10:38         ` Johannes Thumshirn
2019-12-12 19:42     ` Goldwyn Rodrigues
2019-12-12  0:30 ` Goldwyn Rodrigues [this message]
2019-12-12  9:50   ` [PATCH 4/8] iomap: Move lockdep_assert_held() to iomap_dio_rw() calls Christoph Hellwig
2019-12-12 22:24     ` Goldwyn Rodrigues
2019-12-12 22:46     ` Dave Chinner
2019-12-12  0:30 ` [PATCH 5/8] fs: Remove dio_end_io() Goldwyn Rodrigues
2019-12-12  9:50   ` Christoph Hellwig
2019-12-12  0:30 ` [PATCH 6/8] btrfs: Wait for extent bits to release page Goldwyn Rodrigues
2019-12-12  0:30 ` [PATCH 7/8] btrfs: Use iomap_end() instead of btrfs_dio_data Goldwyn Rodrigues
2019-12-12  9:52   ` Christoph Hellwig
2019-12-12  0:30 ` [PATCH 8/8] btrfs: remove BTRFS_INODE_READDIO_NEED_LOCK Goldwyn Rodrigues
2019-12-12  8:53   ` Johannes Thumshirn

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191212003043.31093-5-rgoldwyn@suse.de \
    --to=rgoldwyn@suse.de \
    --cc=darrick.wong@oracle.com \
    --cc=dsterba@suse.cz \
    --cc=fdmanana@kernel.org \
    --cc=hch@infradead.org \
    --cc=jthumshirn@suse.de \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=nborisov@suse.com \
    --cc=rgoldwyn@suse.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.