From: Dave Chinner <david@fromorbit.com>
To: Jinliang Zheng <alexjlzheng@gmail.com>
Cc: alexjlzheng@tencent.com, chandan.babu@oracle.com,
djwong@kernel.org, flyingpeng@tencent.com,
linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org
Subject: Re: [PATCH] xfs: using mutex instead of semaphore for xfs_buf_lock()
Date: Thu, 16 Jan 2025 07:54:25 +1100 [thread overview]
Message-ID: <Z4gggRH0QBALn68W@dread.disaster.area> (raw)
In-Reply-To: <20250115120521.115047-1-alexjlzheng@tencent.com>
On Wed, Jan 15, 2025 at 08:05:21PM +0800, Jinliang Zheng wrote:
> On Wed, 15 Jan 2025 11:28:54 +1100, Dave Chinner wrote:
> > On Fri, Dec 20, 2024 at 01:16:29AM +0800, Jinliang Zheng wrote:
> > > xfs_buf uses a semaphore for mutual exclusion, and its count value
> > > is initialized to 1, which is equivalent to a mutex.
> > >
> > > However, mutex->owner can provide more information when analyzing
> > > vmcore, making it easier for us to identify which task currently
> > > holds the lock.
> >
> > However, the buffer lock also protects the buffer state and contents
> > whilst IO id being performed and it *is not owned by any task*.
> >
> > A single lock cycle for a buffer can pass through multiple tasks
> > before being unlocked in a different task to that which locked it:
> >
> > p0 <intr> <kworker>
> > xfs_buf_lock()
> > ...
> > <submitted for async io>
> > <wait for IO completion>
> > .....
> > <io completion>
> > queued to workqueue
> > .....
> > perform IO completion
> > xfs_buf_unlock()
> >
> >
> > IOWs, the buffer lock here prevents any other task from accessing
> > and modifying the contents/state of the buffer until the IO in
> > flight is completed. i.e. the buffer contents are guaranteed to be
> > stable during write IO, and unreadable when uninitialised during
> > read IO....
>
> Yes.
>
> >
> > i.e. the locking model used by xfs_buf objects is incompatible with
> > the single-owner-task critical section model implemented by
> > mutexes...
> >
>
> Yes, from a model perspective.
>
> This patch is proposed for two reasons:
> 1. The maximum count of the xfs_buf->b_sema is 1, which means that only one
> kernel code path can hold it at the same time. From this perspective,
> changing it to mutex will not have any functional impact.
> 2. When troubleshooting the hungtask of xfs, sometimes it is necessary to
> locate who has acquired the lock. Although, as you said, xfs_buf->b_sema
> will flow to other kernel code paths after being down(), it is also helpful
> to know which kernel code path locked it first.
>
> Haha, that's just my thought. If you think there is really no need to know who
> called the down() on xfs_buf->b_sema, please just ignore this patch.
We are rejecting the patch because it's fundamentally broken, not
because we don't want debugging visibility.
If you want to track what task locked a semaphore, then that should
be added to the semaphore implementation. Changing the XFS locking
implementation is not the solution to the problem you are trying to
solve.
-Dave.
--
Dave Chinner
david@fromorbit.com
prev parent reply other threads:[~2025-01-15 20:54 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-19 17:16 [PATCH] xfs: using mutex instead of semaphore for xfs_buf_lock() Jinliang Zheng
2024-12-19 17:36 ` Darrick J. Wong
2024-12-19 17:51 ` Jinliang Zheng
2024-12-19 18:35 ` Darrick J. Wong
2025-01-15 0:28 ` Dave Chinner
2025-01-15 12:05 ` Jinliang Zheng
2025-01-15 20:54 ` Dave Chinner [this message]
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=Z4gggRH0QBALn68W@dread.disaster.area \
--to=david@fromorbit.com \
--cc=alexjlzheng@gmail.com \
--cc=alexjlzheng@tencent.com \
--cc=chandan.babu@oracle.com \
--cc=djwong@kernel.org \
--cc=flyingpeng@tencent.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-xfs@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 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.