linux-xfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@lst.de>
To: stable@vger.kernel.org
Cc: linux-xfs@vger.kernel.org, Brian Foster <bfoster@redhat.com>,
	"Darrick J . Wong" <darrick.wong@oracle.com>
Subject: [PATCH 04/23] xfs: drop iolock from reclaim context to appease lockdep
Date: Sat,  3 Jun 2017 15:10:44 +0200	[thread overview]
Message-ID: <20170603131103.23712-5-hch@lst.de> (raw)
In-Reply-To: <20170603131103.23712-1-hch@lst.de>

From: Brian Foster <bfoster@redhat.com>

commit 3b4683c294095b5f777c03307ef8c60f47320e12 upstream.

Lockdep complains about use of the iolock in inode reclaim context
because it doesn't understand that reclaim has the last reference to
the inode, and thus an iolock->reclaim->iolock deadlock is not
possible.

The iolock is technically not necessary in xfs_inactive() and was
only added to appease an assert in xfs_free_eofblocks(), which can
be called from other non-reclaim contexts. Therefore, just kill the
assert and drop the use of the iolock from reclaim context to quiet
lockdep.

Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
 fs/xfs/xfs_bmap_util.c | 8 +++-----
 fs/xfs/xfs_inode.c     | 9 +++++----
 2 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c
index 828532ce0adc..cad4e3e2df00 100644
--- a/fs/xfs/xfs_bmap_util.c
+++ b/fs/xfs/xfs_bmap_util.c
@@ -904,9 +904,9 @@ xfs_can_free_eofblocks(struct xfs_inode *ip, bool force)
 }
 
 /*
- * This is called by xfs_inactive to free any blocks beyond eof
- * when the link count isn't zero and by xfs_dm_punch_hole() when
- * punching a hole to EOF.
+ * This is called to free any blocks beyond eof. The caller must hold
+ * IOLOCK_EXCL unless we are in the inode reclaim path and have the only
+ * reference to the inode.
  */
 int
 xfs_free_eofblocks(
@@ -921,8 +921,6 @@ xfs_free_eofblocks(
 	struct xfs_bmbt_irec	imap;
 	struct xfs_mount	*mp = ip->i_mount;
 
-	ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL));
-
 	/*
 	 * Figure out if there are any blocks beyond the end
 	 * of the file.  If not, then there is nothing to do.
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index 7605d8396596..ec9826c56500 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -1906,12 +1906,13 @@ xfs_inactive(
 		 * force is true because we are evicting an inode from the
 		 * cache. Post-eof blocks must be freed, lest we end up with
 		 * broken free space accounting.
+		 *
+		 * Note: don't bother with iolock here since lockdep complains
+		 * about acquiring it in reclaim context. We have the only
+		 * reference to the inode at this point anyways.
 		 */
-		if (xfs_can_free_eofblocks(ip, true)) {
-			xfs_ilock(ip, XFS_IOLOCK_EXCL);
+		if (xfs_can_free_eofblocks(ip, true))
 			xfs_free_eofblocks(ip);
-			xfs_iunlock(ip, XFS_IOLOCK_EXCL);
-		}
 
 		return;
 	}
-- 
2.11.0


  parent reply	other threads:[~2017-06-03 13:11 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-03 13:10 4.11-stable updates for XFS Christoph Hellwig
2017-06-03 13:10 ` [PATCH 01/23] xfs: use dedicated log worker wq to avoid deadlock with cil wq Christoph Hellwig
2017-06-03 13:10 ` [PATCH 02/23] xfs: fix over-copying of getbmap parameters from userspace Christoph Hellwig
2017-06-03 13:10 ` [PATCH 03/23] xfs: actually report xattr extents via iomap Christoph Hellwig
2017-06-03 13:10 ` Christoph Hellwig [this message]
2017-06-03 13:10 ` [PATCH 05/23] xfs: fix integer truncation in xfs_bmap_remap_alloc Christoph Hellwig
2017-06-03 13:10 ` [PATCH 06/23] xfs: handle array index overrun in xfs_dir2_leaf_readbuf() Christoph Hellwig
2017-06-03 13:10 ` [PATCH 07/23] xfs: prevent multi-fsb dir readahead from reading random blocks Christoph Hellwig
2017-06-03 13:10 ` [PATCH 08/23] xfs: fix up quotacheck buffer list error handling Christoph Hellwig
2017-06-03 13:10 ` [PATCH 09/23] xfs: support ability to wait on new inodes Christoph Hellwig
2017-06-03 13:10 ` [PATCH 10/23] xfs: update ag iterator to support " Christoph Hellwig
2017-06-03 13:10 ` [PATCH 11/23] xfs: wait on new inodes during quotaoff dquot release Christoph Hellwig
2017-06-03 13:10 ` [PATCH 12/23] xfs: reserve enough blocks to handle btree splits when remapping Christoph Hellwig
2017-06-03 13:10 ` [PATCH 13/23] xfs: fix use-after-free in xfs_finish_page_writeback Christoph Hellwig
2017-06-03 13:10 ` [PATCH 14/23] xfs: fix indlen accounting error on partial delalloc conversion Christoph Hellwig
2017-06-03 13:10 ` [PATCH 15/23] xfs: BMAPX shouldn't barf on inline-format directories Christoph Hellwig
2017-06-03 13:10 ` [PATCH 16/23] xfs: bad assertion for delalloc an extent that start at i_size Christoph Hellwig
2017-06-03 13:10 ` [PATCH 17/23] xfs: xfs_trans_alloc_empty Christoph Hellwig
2017-06-03 13:10 ` [PATCH 18/23] xfs: avoid mount-time deadlock in CoW extent recovery Christoph Hellwig
2017-06-03 13:10 ` [PATCH 19/23] xfs: fix unaligned access in xfs_btree_visit_blocks Christoph Hellwig
  -- strict thread matches above, loose matches on Subject: below --
2017-06-03 13:14 4.11-stable updates for XFS Christoph Hellwig
2017-06-03 13:14 ` [PATCH 04/23] xfs: drop iolock from reclaim context to appease lockdep Christoph Hellwig

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=20170603131103.23712-5-hch@lst.de \
    --to=hch@lst.de \
    --cc=bfoster@redhat.com \
    --cc=darrick.wong@oracle.com \
    --cc=linux-xfs@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).