From: Jan Kara <jack@suse.cz> To: <linux-fsdevel@vger.kernel.org> Cc: <linux-ext4@vger.kernel.org>, Christoph Hellwig <hch@infradead.org>, "Darrick J. Wong" <djwong@kernel.org>, Ted Tso <tytso@mit.edu>, Dave Chinner <david@fromorbit.com>, Matthew Wilcox <willy@infradead.org>, <linux-mm@kvack.org>, <linux-xfs@vger.kernel.org>, linux-f2fs-devel@lists.sourceforge.net, linux-cifs@vger.kernel.org, ceph-devel@vger.kernel.org, Pavel Reichl <preichl@redhat.com>, Dave Chinner <dchinner@redhat.com>, Eric Sandeen <sandeen@redhat.com>, "Darrick J . Wong" <darrick.wong@oracle.com>, Christoph Hellwig <hch@lst.de>, Jan Kara <jack@suse.cz> Subject: [PATCH 07/14] xfs: Refactor xfs_isilocked() Date: Mon, 12 Jul 2021 18:55:58 +0200 [thread overview] Message-ID: <20210712165609.13215-7-jack@suse.cz> (raw) In-Reply-To: <20210712163901.29514-1-jack@suse.cz> From: Pavel Reichl <preichl@redhat.com> Introduce a new __xfs_rwsem_islocked predicate to encapsulate checking the state of a rw_semaphore, then refactor xfs_isilocked to use it. Signed-off-by: Pavel Reichl <preichl@redhat.com> Suggested-by: Dave Chinner <dchinner@redhat.com> Suggested-by: Eric Sandeen <sandeen@redhat.com> Suggested-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Jan Kara <jack@suse.cz> --- fs/xfs/xfs_inode.c | 34 ++++++++++++++++++++++++++-------- fs/xfs/xfs_inode.h | 2 +- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index a835ceb79ba5..359e2cd44ad7 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -343,9 +343,29 @@ xfs_ilock_demote( } #if defined(DEBUG) || defined(XFS_WARN) -int +static inline bool +__xfs_rwsem_islocked( + struct rw_semaphore *rwsem, + bool shared) +{ + if (!debug_locks) + return rwsem_is_locked(rwsem); + + if (!shared) + return lockdep_is_held_type(rwsem, 0); + + /* + * We are checking that the lock is held at least in shared + * mode but don't care that it might be held exclusively + * (i.e. shared | excl). Hence we check if the lock is held + * in any mode rather than an explicit shared mode. + */ + return lockdep_is_held_type(rwsem, -1); +} + +bool xfs_isilocked( - xfs_inode_t *ip, + struct xfs_inode *ip, uint lock_flags) { if (lock_flags & (XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)) { @@ -360,15 +380,13 @@ xfs_isilocked( return rwsem_is_locked(&ip->i_mmaplock.mr_lock); } - if (lock_flags & (XFS_IOLOCK_EXCL|XFS_IOLOCK_SHARED)) { - if (!(lock_flags & XFS_IOLOCK_SHARED)) - return !debug_locks || - lockdep_is_held_type(&VFS_I(ip)->i_rwsem, 0); - return rwsem_is_locked(&VFS_I(ip)->i_rwsem); + if (lock_flags & (XFS_IOLOCK_EXCL | XFS_IOLOCK_SHARED)) { + return __xfs_rwsem_islocked(&VFS_I(ip)->i_rwsem, + (lock_flags & XFS_IOLOCK_SHARED)); } ASSERT(0); - return 0; + return false; } #endif diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 4b6703dbffb8..4b5202ae8ebb 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h @@ -410,7 +410,7 @@ void xfs_ilock(xfs_inode_t *, uint); int xfs_ilock_nowait(xfs_inode_t *, uint); void xfs_iunlock(xfs_inode_t *, uint); void xfs_ilock_demote(xfs_inode_t *, uint); -int xfs_isilocked(xfs_inode_t *, uint); +bool xfs_isilocked(struct xfs_inode *, uint); uint xfs_ilock_data_map_shared(struct xfs_inode *); uint xfs_ilock_attr_map_shared(struct xfs_inode *); -- 2.26.2
WARNING: multiple messages have this Message-ID
From: Jan Kara <jack@suse.cz> To: <linux-fsdevel@vger.kernel.org> Cc: linux-xfs@vger.kernel.org, Ted Tso <tytso@mit.edu>, Eric Sandeen <sandeen@redhat.com>, linux-cifs@vger.kernel.org, "Darrick J. Wong" <djwong@kernel.org>, "Darrick J . Wong" <darrick.wong@oracle.com>, Dave Chinner <david@fromorbit.com>, Matthew Wilcox <willy@infradead.org>, linux-f2fs-devel@lists.sourceforge.net, Christoph Hellwig <hch@infradead.org>, linux-mm@kvack.org, Dave Chinner <dchinner@redhat.com>, Jan Kara <jack@suse.cz>, ceph-devel@vger.kernel.org, linux-ext4@vger.kernel.org, Christoph Hellwig <hch@lst.de>, Pavel Reichl <preichl@redhat.com> Subject: [f2fs-dev] [PATCH 07/14] xfs: Refactor xfs_isilocked() Date: Mon, 12 Jul 2021 18:55:58 +0200 [thread overview] Message-ID: <20210712165609.13215-7-jack@suse.cz> (raw) In-Reply-To: <20210712163901.29514-1-jack@suse.cz> From: Pavel Reichl <preichl@redhat.com> Introduce a new __xfs_rwsem_islocked predicate to encapsulate checking the state of a rw_semaphore, then refactor xfs_isilocked to use it. Signed-off-by: Pavel Reichl <preichl@redhat.com> Suggested-by: Dave Chinner <dchinner@redhat.com> Suggested-by: Eric Sandeen <sandeen@redhat.com> Suggested-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Jan Kara <jack@suse.cz> --- fs/xfs/xfs_inode.c | 34 ++++++++++++++++++++++++++-------- fs/xfs/xfs_inode.h | 2 +- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index a835ceb79ba5..359e2cd44ad7 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -343,9 +343,29 @@ xfs_ilock_demote( } #if defined(DEBUG) || defined(XFS_WARN) -int +static inline bool +__xfs_rwsem_islocked( + struct rw_semaphore *rwsem, + bool shared) +{ + if (!debug_locks) + return rwsem_is_locked(rwsem); + + if (!shared) + return lockdep_is_held_type(rwsem, 0); + + /* + * We are checking that the lock is held at least in shared + * mode but don't care that it might be held exclusively + * (i.e. shared | excl). Hence we check if the lock is held + * in any mode rather than an explicit shared mode. + */ + return lockdep_is_held_type(rwsem, -1); +} + +bool xfs_isilocked( - xfs_inode_t *ip, + struct xfs_inode *ip, uint lock_flags) { if (lock_flags & (XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)) { @@ -360,15 +380,13 @@ xfs_isilocked( return rwsem_is_locked(&ip->i_mmaplock.mr_lock); } - if (lock_flags & (XFS_IOLOCK_EXCL|XFS_IOLOCK_SHARED)) { - if (!(lock_flags & XFS_IOLOCK_SHARED)) - return !debug_locks || - lockdep_is_held_type(&VFS_I(ip)->i_rwsem, 0); - return rwsem_is_locked(&VFS_I(ip)->i_rwsem); + if (lock_flags & (XFS_IOLOCK_EXCL | XFS_IOLOCK_SHARED)) { + return __xfs_rwsem_islocked(&VFS_I(ip)->i_rwsem, + (lock_flags & XFS_IOLOCK_SHARED)); } ASSERT(0); - return 0; + return false; } #endif diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 4b6703dbffb8..4b5202ae8ebb 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h @@ -410,7 +410,7 @@ void xfs_ilock(xfs_inode_t *, uint); int xfs_ilock_nowait(xfs_inode_t *, uint); void xfs_iunlock(xfs_inode_t *, uint); void xfs_ilock_demote(xfs_inode_t *, uint); -int xfs_isilocked(xfs_inode_t *, uint); +bool xfs_isilocked(struct xfs_inode *, uint); uint xfs_ilock_data_map_shared(struct xfs_inode *); uint xfs_ilock_attr_map_shared(struct xfs_inode *); -- 2.26.2 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
next prev parent reply other threads:[~2021-07-12 16:56 UTC|newest] Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-07-12 16:55 [PATCH 0/14 v9] fs: Hole punch vs page cache filling races Jan Kara 2021-07-12 16:55 ` [f2fs-dev] " Jan Kara 2021-07-12 16:55 ` [PATCH 01/14] mm: Fix comments mentioning i_mutex Jan Kara 2021-07-12 16:55 ` [f2fs-dev] " Jan Kara 2021-07-12 16:55 ` [PATCH 02/14] documentation: Sync file_operations members with reality Jan Kara 2021-07-12 16:55 ` [f2fs-dev] " Jan Kara 2021-07-13 1:02 ` Darrick J. Wong 2021-07-13 1:02 ` [f2fs-dev] " Darrick J. Wong 2021-07-12 16:55 ` [PATCH 03/14] mm: Protect operations adding pages to page cache with invalidate_lock Jan Kara 2021-07-12 16:55 ` [f2fs-dev] " Jan Kara 2021-07-13 1:25 ` Darrick J. Wong 2021-07-13 1:25 ` [f2fs-dev] " Darrick J. Wong 2021-07-13 11:11 ` Jan Kara 2021-07-13 11:11 ` [f2fs-dev] " Jan Kara 2021-07-13 6:25 ` Christoph Hellwig 2021-07-13 6:25 ` [f2fs-dev] " Christoph Hellwig 2021-07-13 12:35 ` Jan Kara 2021-07-13 12:35 ` [f2fs-dev] " Jan Kara 2021-07-12 16:55 ` [PATCH 04/14] mm: Add functions to lock invalidate_lock for two mappings Jan Kara 2021-07-12 16:55 ` [f2fs-dev] " Jan Kara 2021-07-12 16:55 ` [PATCH 05/14] ext4: Convert to use mapping->invalidate_lock Jan Kara 2021-07-12 16:55 ` [f2fs-dev] " Jan Kara 2021-07-12 16:55 ` [PATCH 06/14] ext2: Convert to using invalidate_lock Jan Kara 2021-07-12 16:55 ` [f2fs-dev] " Jan Kara 2021-07-12 16:55 ` Jan Kara [this message] 2021-07-12 16:55 ` [f2fs-dev] [PATCH 07/14] xfs: Refactor xfs_isilocked() Jan Kara 2021-07-12 16:55 ` [PATCH 08/14] xfs: Convert to use invalidate_lock Jan Kara 2021-07-12 16:55 ` [f2fs-dev] " Jan Kara 2021-07-12 16:56 ` [PATCH 09/14] xfs: Convert double locking of MMAPLOCK to use VFS helpers Jan Kara 2021-07-12 16:56 ` [f2fs-dev] " Jan Kara 2021-07-12 16:56 ` [PATCH 10/14] zonefs: Convert to using invalidate_lock Jan Kara 2021-07-12 16:56 ` [f2fs-dev] " Jan Kara 2021-07-12 16:56 ` [PATCH 11/14] f2fs: " Jan Kara 2021-07-12 16:56 ` [f2fs-dev] " Jan Kara 2021-07-12 16:56 ` [PATCH 12/14] fuse: " Jan Kara 2021-07-12 16:56 ` [f2fs-dev] " Jan Kara 2021-07-12 16:56 ` [PATCH 13/14] ceph: Fix race between hole punch and page fault Jan Kara 2021-07-12 16:56 ` [f2fs-dev] " Jan Kara 2021-07-12 16:56 ` [PATCH 14/14] cifs: " Jan Kara 2021-07-12 16:56 ` [f2fs-dev] " Jan Kara -- strict thread matches above, loose matches on Subject: below -- 2021-07-15 13:40 [PATCH 0/14 v10] fs: Hole punch vs page cache filling races Jan Kara 2021-07-15 13:40 ` [PATCH 07/14] xfs: Refactor xfs_isilocked() Jan Kara 2021-06-15 9:17 [PATCH 0/14 v8] fs: Hole punch vs page cache filling races Jan Kara 2021-06-15 9:17 ` [PATCH 07/14] xfs: Refactor xfs_isilocked() Jan Kara 2021-06-16 5:37 ` Christoph Hellwig 2021-06-16 8:53 ` Jan Kara 2021-06-16 15:47 ` Darrick J. Wong 2021-06-16 15:57 ` Jan Kara 2021-06-17 16:29 ` Darrick J. Wong 2021-06-17 16:32 ` Darrick J. Wong 2021-06-17 7:53 ` Christoph Hellwig 2021-06-17 8:53 ` Jan Kara 2021-06-17 8:54 ` Christoph Hellwig 2021-06-17 16:16 ` Darrick J. Wong 2021-06-07 14:52 [PATCH 0/14 v7] fs: Hole punch vs page cache filling races Jan Kara 2021-06-07 14:52 ` [PATCH 07/14] xfs: Refactor xfs_isilocked() Jan Kara 2021-06-07 15:49 ` Darrick J. Wong 2021-06-08 22:18 ` Dave Chinner
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=20210712165609.13215-7-jack@suse.cz \ --to=jack@suse.cz \ --cc=ceph-devel@vger.kernel.org \ --cc=darrick.wong@oracle.com \ --cc=david@fromorbit.com \ --cc=dchinner@redhat.com \ --cc=djwong@kernel.org \ --cc=hch@infradead.org \ --cc=hch@lst.de \ --cc=linux-cifs@vger.kernel.org \ --cc=linux-ext4@vger.kernel.org \ --cc=linux-f2fs-devel@lists.sourceforge.net \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=linux-xfs@vger.kernel.org \ --cc=preichl@redhat.com \ --cc=sandeen@redhat.com \ --cc=tytso@mit.edu \ --cc=willy@infradead.org \ --subject='Re: [PATCH 07/14] xfs: Refactor xfs_isilocked()' \ /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
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.