From: Hao Xu <hao.xu@linux.dev>
To: Matthew Wilcox <willy@infradead.org>
Cc: io-uring@vger.kernel.org, Jens Axboe <axboe@kernel.dk>,
Dominique Martinet <asmadeus@codewreck.org>,
Pavel Begunkov <asml.silence@gmail.com>,
Christian Brauner <brauner@kernel.org>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Stefan Roesch <shr@fb.com>, Clay Harris <bugs@claycon.org>,
Dave Chinner <david@fromorbit.com>,
"Darrick J . Wong" <djwong@kernel.org>,
linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org,
linux-ext4@vger.kernel.org, linux-cachefs@redhat.com,
ecryptfs@vger.kernel.org, linux-nfs@vger.kernel.org,
linux-unionfs@vger.kernel.org, bpf@vger.kernel.org,
netdev@vger.kernel.org, linux-s390@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
linux-btrfs@vger.kernel.org, codalist@coda.cs.cmu.edu,
linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com,
linux-mm@kvack.org, linux-nilfs@vger.kernel.org,
devel@lists.orangefs.org, linux-cifs@vger.kernel.org,
samba-technical@lists.samba.org, linux-mtd@lists.infradead.org,
Wanpeng Li <wanpengli@tencent.com>
Subject: Re: [PATCH 02/11] xfs: add NOWAIT semantics for readdir
Date: Tue, 29 Aug 2023 15:41:43 +0800 [thread overview]
Message-ID: <ca10040f-b7fa-7c43-1c89-6706d13b2747@linux.dev> (raw)
In-Reply-To: <ZOu1xYS6LRmPgEiV@casper.infradead.org>
On 8/28/23 04:44, Matthew Wilcox wrote:
> On Sun, Aug 27, 2023 at 09:28:26PM +0800, Hao Xu wrote:
>> +++ b/fs/xfs/libxfs/xfs_da_btree.c
>> @@ -2643,16 +2643,32 @@ xfs_da_read_buf(
>> struct xfs_buf_map map, *mapp = ↦
>> int nmap = 1;
>> int error;
>> + int buf_flags = 0;
>>
>> *bpp = NULL;
>> error = xfs_dabuf_map(dp, bno, flags, whichfork, &mapp, &nmap);
>> if (error || !nmap)
>> goto out_free;
>>
>> + /*
>> + * NOWAIT semantics mean we don't wait on the buffer lock nor do we
>> + * issue IO for this buffer if it is not already in memory. Caller will
>> + * retry. This will return -EAGAIN if the buffer is in memory and cannot
>> + * be locked, and no buffer and no error if it isn't in memory. We
>> + * translate both of those into a return state of -EAGAIN and *bpp =
>> + * NULL.
>> + */
>
> I would not include this comment.
No strong comment here, since this patch is mostly from Dave, it's
better if Dave can ack this.
>
>> + if (flags & XFS_DABUF_NOWAIT)
>> + buf_flags |= XBF_TRYLOCK | XBF_INCORE;
>> error = xfs_trans_read_buf_map(mp, tp, mp->m_ddev_targp, mapp, nmap, 0,
>> &bp, ops);
>
> what tsting did you do with this? Because you don't actually _use_
> buf_flags anywhere in this patch (presumably they should be the
> sixth argument to xfs_trans_read_buf_map() instead of 0). So I can only
> conclude that either you didn't test, or your testing was inadequate.
>
The tests I've done are listed in the cover-letter, this one is missed,
the tricky place is it's hard to get this kind of mistake since it runs
well without nowait logic...I'll fix it in next version.
>> if (error)
>> goto out_free;
>> + if (!bp) {
>> + ASSERT(flags & XFS_DABUF_NOWAIT);
>
> I don't think this ASSERT is appropriate.
>
>> @@ -391,10 +401,17 @@ xfs_dir2_leaf_getdents(
>> bp = NULL;
>> }
>>
>> - if (*lock_mode == 0)
>> - *lock_mode = xfs_ilock_data_map_shared(dp);
>> + if (*lock_mode == 0) {
>> + *lock_mode =
>> + xfs_ilock_data_map_shared_generic(dp,
>> + ctx->flags & DIR_CONTEXT_F_NOWAIT);
>> + if (!*lock_mode) {
>> + error = -EAGAIN;
>> + break;
>> + }
>> + }
>
> 'generic' doesn't seem like a great suffix to mean 'takes nowait flag'.
> And this is far too far indented.
>
> xfs_dir2_lock(dp, ctx, lock_mode);
>
> with:
>
> STATIC void xfs_dir2_lock(struct xfs_inode *dp, struct dir_context *ctx,
> unsigned int lock_mode)
> {
> if (*lock_mode)
> return;
> if (ctx->flags & DIR_CONTEXT_F_NOWAIT)
> return xfs_ilock_data_map_shared_nowait(dp);
> return xfs_ilock_data_map_shared(dp);
> }
>
> ... which I think you can use elsewhere in this patch (reformat it to
> XFS coding style, of course). And then you don't need
> xfs_ilock_data_map_shared_generic().
>
How about rename xfs_ilock_data_map_shared() to
xfs_ilock_data_map_block() and rename
xfs_ilock_data_map_shared_generic() to xfs_ilock_data_map_shared()?
STATIC void xfs_ilock_data_map_shared(struct xfs_inode *dp, struct
dir_context *ctx, unsigned int lock_mode)
{
if (*lock_mode)
return;
if (ctx->flags & DIR_CONTEXT_F_NOWAIT)
return xfs_ilock_data_map_shared_nowait(dp);
return xfs_ilock_data_map_shared_block(dp);
}
WARNING: multiple messages have this Message-ID (diff)
From: Hao Xu <hao.xu@linux.dev>
To: Matthew Wilcox <willy@infradead.org>
Cc: Wanpeng Li <wanpengli@tencent.com>,
"Darrick J . Wong" <djwong@kernel.org>,
Dominique Martinet <asmadeus@codewreck.org>,
Dave Chinner <david@fromorbit.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Stefan Roesch <shr@fb.com>, Clay Harris <bugs@claycon.org>,
linux-s390@vger.kernel.org, linux-nilfs@vger.kernel.org,
codalist@coda.cs.cmu.edu, cluster-devel@redhat.com,
linux-cachefs@redhat.com, linux-ext4@vger.kernel.org,
devel@lists.orangefs.org, linux-cifs@vger.kernel.org,
ecryptfs@vger.kernel.org, linux-nfs@vger.kernel.org,
linux-block@vger.kernel.org,
Alexander Viro <viro@zeniv.linux.org.uk>,
io-uring@vger.kernel.org, Jens Axboe <axboe@kernel.dk>,
Christian Brauner <brauner@kernel.org>,
netdev@vger.kernel.org, samba-technical@lists.samba.org,
linux-unionfs@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net,
linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-mtd@lists.infradead.org, bpf@vger.kernel.org,
Pavel Begunkov <asml.silence@gmail.com>,
linux-btrfs@vger.kernel.org
Subject: Re: [Cluster-devel] [PATCH 02/11] xfs: add NOWAIT semantics for readdir
Date: Tue, 29 Aug 2023 15:41:43 +0800 [thread overview]
Message-ID: <ca10040f-b7fa-7c43-1c89-6706d13b2747@linux.dev> (raw)
In-Reply-To: <ZOu1xYS6LRmPgEiV@casper.infradead.org>
On 8/28/23 04:44, Matthew Wilcox wrote:
> On Sun, Aug 27, 2023 at 09:28:26PM +0800, Hao Xu wrote:
>> +++ b/fs/xfs/libxfs/xfs_da_btree.c
>> @@ -2643,16 +2643,32 @@ xfs_da_read_buf(
>> struct xfs_buf_map map, *mapp = ↦
>> int nmap = 1;
>> int error;
>> + int buf_flags = 0;
>>
>> *bpp = NULL;
>> error = xfs_dabuf_map(dp, bno, flags, whichfork, &mapp, &nmap);
>> if (error || !nmap)
>> goto out_free;
>>
>> + /*
>> + * NOWAIT semantics mean we don't wait on the buffer lock nor do we
>> + * issue IO for this buffer if it is not already in memory. Caller will
>> + * retry. This will return -EAGAIN if the buffer is in memory and cannot
>> + * be locked, and no buffer and no error if it isn't in memory. We
>> + * translate both of those into a return state of -EAGAIN and *bpp =
>> + * NULL.
>> + */
>
> I would not include this comment.
No strong comment here, since this patch is mostly from Dave, it's
better if Dave can ack this.
>
>> + if (flags & XFS_DABUF_NOWAIT)
>> + buf_flags |= XBF_TRYLOCK | XBF_INCORE;
>> error = xfs_trans_read_buf_map(mp, tp, mp->m_ddev_targp, mapp, nmap, 0,
>> &bp, ops);
>
> what tsting did you do with this? Because you don't actually _use_
> buf_flags anywhere in this patch (presumably they should be the
> sixth argument to xfs_trans_read_buf_map() instead of 0). So I can only
> conclude that either you didn't test, or your testing was inadequate.
>
The tests I've done are listed in the cover-letter, this one is missed,
the tricky place is it's hard to get this kind of mistake since it runs
well without nowait logic...I'll fix it in next version.
>> if (error)
>> goto out_free;
>> + if (!bp) {
>> + ASSERT(flags & XFS_DABUF_NOWAIT);
>
> I don't think this ASSERT is appropriate.
>
>> @@ -391,10 +401,17 @@ xfs_dir2_leaf_getdents(
>> bp = NULL;
>> }
>>
>> - if (*lock_mode == 0)
>> - *lock_mode = xfs_ilock_data_map_shared(dp);
>> + if (*lock_mode == 0) {
>> + *lock_mode =
>> + xfs_ilock_data_map_shared_generic(dp,
>> + ctx->flags & DIR_CONTEXT_F_NOWAIT);
>> + if (!*lock_mode) {
>> + error = -EAGAIN;
>> + break;
>> + }
>> + }
>
> 'generic' doesn't seem like a great suffix to mean 'takes nowait flag'.
> And this is far too far indented.
>
> xfs_dir2_lock(dp, ctx, lock_mode);
>
> with:
>
> STATIC void xfs_dir2_lock(struct xfs_inode *dp, struct dir_context *ctx,
> unsigned int lock_mode)
> {
> if (*lock_mode)
> return;
> if (ctx->flags & DIR_CONTEXT_F_NOWAIT)
> return xfs_ilock_data_map_shared_nowait(dp);
> return xfs_ilock_data_map_shared(dp);
> }
>
> ... which I think you can use elsewhere in this patch (reformat it to
> XFS coding style, of course). And then you don't need
> xfs_ilock_data_map_shared_generic().
>
How about rename xfs_ilock_data_map_shared() to
xfs_ilock_data_map_block() and rename
xfs_ilock_data_map_shared_generic() to xfs_ilock_data_map_shared()?
STATIC void xfs_ilock_data_map_shared(struct xfs_inode *dp, struct
dir_context *ctx, unsigned int lock_mode)
{
if (*lock_mode)
return;
if (ctx->flags & DIR_CONTEXT_F_NOWAIT)
return xfs_ilock_data_map_shared_nowait(dp);
return xfs_ilock_data_map_shared_block(dp);
}
WARNING: multiple messages have this Message-ID (diff)
From: Hao Xu <hao.xu@linux.dev>
To: Matthew Wilcox <willy@infradead.org>
Cc: Wanpeng Li <wanpengli@tencent.com>,
"Darrick J . Wong" <djwong@kernel.org>,
Dominique Martinet <asmadeus@codewreck.org>,
Dave Chinner <david@fromorbit.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Stefan Roesch <shr@fb.com>, Clay Harris <bugs@claycon.org>,
linux-s390@vger.kernel.org, linux-nilfs@vger.kernel.org,
codalist@coda.cs.cmu.edu, cluster-devel@redhat.com,
linux-cachefs@redhat.com, linux-ext4@vger.kernel.org,
devel@lists.orangefs.org, linux-cifs@vger.kernel.org,
ecryptfs@vger.kernel.org, linux-nfs@vger.kernel.org,
linux-block@vger.kernel.org,
Alexander Viro <viro@zeniv.linux.org.uk>,
io-uring@vger.kernel.org, Jens Axboe <axboe@kernel.dk>,
Christian Brauner <brauner@kernel.org>,
netdev@vger.kernel.org, samba-technical@lists.samba.org,
linux-unionfs@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net,
linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-mtd@lists.infradead.org, bpf@vger.kernel.org,
Pavel Begunkov <asml.silence@gmail.com>,
linux-btrfs@vger.kernel.org
Subject: Re: [f2fs-dev] [PATCH 02/11] xfs: add NOWAIT semantics for readdir
Date: Tue, 29 Aug 2023 15:41:43 +0800 [thread overview]
Message-ID: <ca10040f-b7fa-7c43-1c89-6706d13b2747@linux.dev> (raw)
In-Reply-To: <ZOu1xYS6LRmPgEiV@casper.infradead.org>
On 8/28/23 04:44, Matthew Wilcox wrote:
> On Sun, Aug 27, 2023 at 09:28:26PM +0800, Hao Xu wrote:
>> +++ b/fs/xfs/libxfs/xfs_da_btree.c
>> @@ -2643,16 +2643,32 @@ xfs_da_read_buf(
>> struct xfs_buf_map map, *mapp = ↦
>> int nmap = 1;
>> int error;
>> + int buf_flags = 0;
>>
>> *bpp = NULL;
>> error = xfs_dabuf_map(dp, bno, flags, whichfork, &mapp, &nmap);
>> if (error || !nmap)
>> goto out_free;
>>
>> + /*
>> + * NOWAIT semantics mean we don't wait on the buffer lock nor do we
>> + * issue IO for this buffer if it is not already in memory. Caller will
>> + * retry. This will return -EAGAIN if the buffer is in memory and cannot
>> + * be locked, and no buffer and no error if it isn't in memory. We
>> + * translate both of those into a return state of -EAGAIN and *bpp =
>> + * NULL.
>> + */
>
> I would not include this comment.
No strong comment here, since this patch is mostly from Dave, it's
better if Dave can ack this.
>
>> + if (flags & XFS_DABUF_NOWAIT)
>> + buf_flags |= XBF_TRYLOCK | XBF_INCORE;
>> error = xfs_trans_read_buf_map(mp, tp, mp->m_ddev_targp, mapp, nmap, 0,
>> &bp, ops);
>
> what tsting did you do with this? Because you don't actually _use_
> buf_flags anywhere in this patch (presumably they should be the
> sixth argument to xfs_trans_read_buf_map() instead of 0). So I can only
> conclude that either you didn't test, or your testing was inadequate.
>
The tests I've done are listed in the cover-letter, this one is missed,
the tricky place is it's hard to get this kind of mistake since it runs
well without nowait logic...I'll fix it in next version.
>> if (error)
>> goto out_free;
>> + if (!bp) {
>> + ASSERT(flags & XFS_DABUF_NOWAIT);
>
> I don't think this ASSERT is appropriate.
>
>> @@ -391,10 +401,17 @@ xfs_dir2_leaf_getdents(
>> bp = NULL;
>> }
>>
>> - if (*lock_mode == 0)
>> - *lock_mode = xfs_ilock_data_map_shared(dp);
>> + if (*lock_mode == 0) {
>> + *lock_mode =
>> + xfs_ilock_data_map_shared_generic(dp,
>> + ctx->flags & DIR_CONTEXT_F_NOWAIT);
>> + if (!*lock_mode) {
>> + error = -EAGAIN;
>> + break;
>> + }
>> + }
>
> 'generic' doesn't seem like a great suffix to mean 'takes nowait flag'.
> And this is far too far indented.
>
> xfs_dir2_lock(dp, ctx, lock_mode);
>
> with:
>
> STATIC void xfs_dir2_lock(struct xfs_inode *dp, struct dir_context *ctx,
> unsigned int lock_mode)
> {
> if (*lock_mode)
> return;
> if (ctx->flags & DIR_CONTEXT_F_NOWAIT)
> return xfs_ilock_data_map_shared_nowait(dp);
> return xfs_ilock_data_map_shared(dp);
> }
>
> ... which I think you can use elsewhere in this patch (reformat it to
> XFS coding style, of course). And then you don't need
> xfs_ilock_data_map_shared_generic().
>
How about rename xfs_ilock_data_map_shared() to
xfs_ilock_data_map_block() and rename
xfs_ilock_data_map_shared_generic() to xfs_ilock_data_map_shared()?
STATIC void xfs_ilock_data_map_shared(struct xfs_inode *dp, struct
dir_context *ctx, unsigned int lock_mode)
{
if (*lock_mode)
return;
if (ctx->flags & DIR_CONTEXT_F_NOWAIT)
return xfs_ilock_data_map_shared_nowait(dp);
return xfs_ilock_data_map_shared_block(dp);
}
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
WARNING: multiple messages have this Message-ID (diff)
From: Hao Xu <hao.xu@linux.dev>
To: Matthew Wilcox <willy@infradead.org>
Cc: io-uring@vger.kernel.org, Jens Axboe <axboe@kernel.dk>,
Dominique Martinet <asmadeus@codewreck.org>,
Pavel Begunkov <asml.silence@gmail.com>,
Christian Brauner <brauner@kernel.org>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Stefan Roesch <shr@fb.com>, Clay Harris <bugs@claycon.org>,
Dave Chinner <david@fromorbit.com>,
"Darrick J . Wong" <djwong@kernel.org>,
linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org,
linux-ext4@vger.kernel.org, linux-cachefs@redhat.com,
ecryptfs@vger.kernel.org, linux-nfs@vger.kernel.org,
linux-unionfs@vger.kernel.org, bpf@vger.kernel.org,
netdev@vger.kernel.org, linux-s390@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
linux-btrfs@vger.kernel.org, codalist@coda.cs.cmu.edu,
linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com,
linux-mm@kvack.org, linux-nilfs@vger.kernel.org,
devel@lists.orangefs.org
Subject: Re: [PATCH 02/11] xfs: add NOWAIT semantics for readdir
Date: Tue, 29 Aug 2023 15:41:43 +0800 [thread overview]
Message-ID: <ca10040f-b7fa-7c43-1c89-6706d13b2747@linux.dev> (raw)
In-Reply-To: <ZOu1xYS6LRmPgEiV@casper.infradead.org>
On 8/28/23 04:44, Matthew Wilcox wrote:
> On Sun, Aug 27, 2023 at 09:28:26PM +0800, Hao Xu wrote:
>> +++ b/fs/xfs/libxfs/xfs_da_btree.c
>> @@ -2643,16 +2643,32 @@ xfs_da_read_buf(
>> struct xfs_buf_map map, *mapp = ↦
>> int nmap = 1;
>> int error;
>> + int buf_flags = 0;
>>
>> *bpp = NULL;
>> error = xfs_dabuf_map(dp, bno, flags, whichfork, &mapp, &nmap);
>> if (error || !nmap)
>> goto out_free;
>>
>> + /*
>> + * NOWAIT semantics mean we don't wait on the buffer lock nor do we
>> + * issue IO for this buffer if it is not already in memory. Caller will
>> + * retry. This will return -EAGAIN if the buffer is in memory and cannot
>> + * be locked, and no buffer and no error if it isn't in memory. We
>> + * translate both of those into a return state of -EAGAIN and *bpp =
>> + * NULL.
>> + */
>
> I would not include this comment.
No strong comment here, since this patch is mostly from Dave, it's
better if Dave can ack this.
>
>> + if (flags & XFS_DABUF_NOWAIT)
>> + buf_flags |= XBF_TRYLOCK | XBF_INCORE;
>> error = xfs_trans_read_buf_map(mp, tp, mp->m_ddev_targp, mapp, nmap, 0,
>> &bp, ops);
>
> what tsting did you do with this? Because you don't actually _use_
> buf_flags anywhere in this patch (presumably they should be the
> sixth argument to xfs_trans_read_buf_map() instead of 0). So I can only
> conclude that either you didn't test, or your testing was inadequate.
>
The tests I've done are listed in the cover-letter, this one is missed,
the tricky place is it's hard to get this kind of mistake since it runs
well without nowait logic...I'll fix it in next version.
>> if (error)
>> goto out_free;
>> + if (!bp) {
>> + ASSERT(flags & XFS_DABUF_NOWAIT);
>
> I don't think this ASSERT is appropriate.
>
>> @@ -391,10 +401,17 @@ xfs_dir2_leaf_getdents(
>> bp = NULL;
>> }
>>
>> - if (*lock_mode == 0)
>> - *lock_mode = xfs_ilock_data_map_shared(dp);
>> + if (*lock_mode == 0) {
>> + *lock_mode =
>> + xfs_ilock_data_map_shared_generic(dp,
>> + ctx->flags & DIR_CONTEXT_F_NOWAIT);
>> + if (!*lock_mode) {
>> + error = -EAGAIN;
>> + break;
>> + }
>> + }
>
> 'generic' doesn't seem like a great suffix to mean 'takes nowait flag'.
> And this is far too far indented.
>
> xfs_dir2_lock(dp, ctx, lock_mode);
>
> with:
>
> STATIC void xfs_dir2_lock(struct xfs_inode *dp, struct dir_context *ctx,
> unsigned int lock_mode)
> {
> if (*lock_mode)
> return;
> if (ctx->flags & DIR_CONTEXT_F_NOWAIT)
> return xfs_ilock_data_map_shared_nowait(dp);
> return xfs_ilock_data_map_shared(dp);
> }
>
> ... which I think you can use elsewhere in this patch (reformat it to
> XFS coding style, of course). And then you don't need
> xfs_ilock_data_map_shared_generic().
>
How about rename xfs_ilock_data_map_shared() to
xfs_ilock_data_map_block() and rename
xfs_ilock_data_map_shared_generic() to xfs_ilock_data_map_shared()?
STATIC void xfs_ilock_data_map_shared(struct xfs_inode *dp, struct
dir_context *ctx, unsigned int lock_mode)
{
if (*lock_mode)
return;
if (ctx->flags & DIR_CONTEXT_F_NOWAIT)
return xfs_ilock_data_map_shared_nowait(dp);
return xfs_ilock_data_map_shared_block(dp);
}
WARNING: multiple messages have this Message-ID (diff)
From: Hao Xu <hao.xu@linux.dev>
To: Matthew Wilcox <willy@infradead.org>
Cc: io-uring@vger.kernel.org, Jens Axboe <axboe@kernel.dk>,
Dominique Martinet <asmadeus@codewreck.org>,
Pavel Begunkov <asml.silence@gmail.com>,
Christian Brauner <brauner@kernel.org>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Stefan Roesch <shr@fb.com>, Clay Harris <bugs@claycon.org>,
Dave Chinner <david@fromorbit.com>,
"Darrick J . Wong" <djwong@kernel.org>,
linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org,
linux-ext4@vger.kernel.org, linux-cachefs@redhat.com,
ecryptfs@vger.kernel.org, linux-nfs@vger.kernel.org,
linux-unionfs@vger.kernel.org, bpf@vger.kernel.org,
netdev@vger.kernel.org, linux-s390@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
linux-btrfs@vger.kernel.org, codalist@coda.cs.cmu.edu,
linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com,
linux-mm@kvack.org, linux-nilfs@vger.kernel.org,
devel@lists.orangefs.org, linux-cifs@vger.kernel.org,
samba-technical@lists.samba.org, linux-mtd@lists.infradead.org,
Wanpeng Li <wanpengli@tencent.com>
Subject: Re: [PATCH 02/11] xfs: add NOWAIT semantics for readdir
Date: Tue, 29 Aug 2023 15:41:43 +0800 [thread overview]
Message-ID: <ca10040f-b7fa-7c43-1c89-6706d13b2747@linux.dev> (raw)
In-Reply-To: <ZOu1xYS6LRmPgEiV@casper.infradead.org>
On 8/28/23 04:44, Matthew Wilcox wrote:
> On Sun, Aug 27, 2023 at 09:28:26PM +0800, Hao Xu wrote:
>> +++ b/fs/xfs/libxfs/xfs_da_btree.c
>> @@ -2643,16 +2643,32 @@ xfs_da_read_buf(
>> struct xfs_buf_map map, *mapp = ↦
>> int nmap = 1;
>> int error;
>> + int buf_flags = 0;
>>
>> *bpp = NULL;
>> error = xfs_dabuf_map(dp, bno, flags, whichfork, &mapp, &nmap);
>> if (error || !nmap)
>> goto out_free;
>>
>> + /*
>> + * NOWAIT semantics mean we don't wait on the buffer lock nor do we
>> + * issue IO for this buffer if it is not already in memory. Caller will
>> + * retry. This will return -EAGAIN if the buffer is in memory and cannot
>> + * be locked, and no buffer and no error if it isn't in memory. We
>> + * translate both of those into a return state of -EAGAIN and *bpp =
>> + * NULL.
>> + */
>
> I would not include this comment.
No strong comment here, since this patch is mostly from Dave, it's
better if Dave can ack this.
>
>> + if (flags & XFS_DABUF_NOWAIT)
>> + buf_flags |= XBF_TRYLOCK | XBF_INCORE;
>> error = xfs_trans_read_buf_map(mp, tp, mp->m_ddev_targp, mapp, nmap, 0,
>> &bp, ops);
>
> what tsting did you do with this? Because you don't actually _use_
> buf_flags anywhere in this patch (presumably they should be the
> sixth argument to xfs_trans_read_buf_map() instead of 0). So I can only
> conclude that either you didn't test, or your testing was inadequate.
>
The tests I've done are listed in the cover-letter, this one is missed,
the tricky place is it's hard to get this kind of mistake since it runs
well without nowait logic...I'll fix it in next version.
>> if (error)
>> goto out_free;
>> + if (!bp) {
>> + ASSERT(flags & XFS_DABUF_NOWAIT);
>
> I don't think this ASSERT is appropriate.
>
>> @@ -391,10 +401,17 @@ xfs_dir2_leaf_getdents(
>> bp = NULL;
>> }
>>
>> - if (*lock_mode == 0)
>> - *lock_mode = xfs_ilock_data_map_shared(dp);
>> + if (*lock_mode == 0) {
>> + *lock_mode =
>> + xfs_ilock_data_map_shared_generic(dp,
>> + ctx->flags & DIR_CONTEXT_F_NOWAIT);
>> + if (!*lock_mode) {
>> + error = -EAGAIN;
>> + break;
>> + }
>> + }
>
> 'generic' doesn't seem like a great suffix to mean 'takes nowait flag'.
> And this is far too far indented.
>
> xfs_dir2_lock(dp, ctx, lock_mode);
>
> with:
>
> STATIC void xfs_dir2_lock(struct xfs_inode *dp, struct dir_context *ctx,
> unsigned int lock_mode)
> {
> if (*lock_mode)
> return;
> if (ctx->flags & DIR_CONTEXT_F_NOWAIT)
> return xfs_ilock_data_map_shared_nowait(dp);
> return xfs_ilock_data_map_shared(dp);
> }
>
> ... which I think you can use elsewhere in this patch (reformat it to
> XFS coding style, of course). And then you don't need
> xfs_ilock_data_map_shared_generic().
>
How about rename xfs_ilock_data_map_shared() to
xfs_ilock_data_map_block() and rename
xfs_ilock_data_map_shared_generic() to xfs_ilock_data_map_shared()?
STATIC void xfs_ilock_data_map_shared(struct xfs_inode *dp, struct
dir_context *ctx, unsigned int lock_mode)
{
if (*lock_mode)
return;
if (ctx->flags & DIR_CONTEXT_F_NOWAIT)
return xfs_ilock_data_map_shared_nowait(dp);
return xfs_ilock_data_map_shared_block(dp);
}
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
next prev parent reply other threads:[~2023-08-29 7:42 UTC|newest]
Thread overview: 140+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-27 13:28 [PATCH v6 00/11] io_uring getdents Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 13:28 ` [PATCH 01/11] fs: split off vfs_getdents function of getdents64 syscall Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 13:28 ` [PATCH 02/11] xfs: add NOWAIT semantics for readdir Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 20:44 ` Matthew Wilcox
2023-08-27 20:44 ` Matthew Wilcox
2023-08-27 20:44 ` Matthew Wilcox
2023-08-27 20:44 ` [f2fs-dev] " Matthew Wilcox
2023-08-27 20:44 ` [Cluster-devel] " Matthew Wilcox
2023-08-29 7:41 ` Hao Xu [this message]
2023-08-29 7:41 ` Hao Xu
2023-08-29 7:41 ` Hao Xu
2023-08-29 7:41 ` [f2fs-dev] " Hao Xu
2023-08-29 7:41 ` [Cluster-devel] " Hao Xu
2023-08-29 13:05 ` Matthew Wilcox
2023-08-29 13:05 ` Matthew Wilcox
2023-08-29 13:05 ` Matthew Wilcox
2023-08-29 13:05 ` [f2fs-dev] " Matthew Wilcox
2023-08-29 13:05 ` [Cluster-devel] " Matthew Wilcox
2023-09-04 1:02 ` Dave Chinner
2023-09-04 1:02 ` Dave Chinner
2023-09-04 1:02 ` Dave Chinner
2023-09-04 1:02 ` [f2fs-dev] " Dave Chinner via Linux-f2fs-devel
2023-09-04 1:02 ` [Cluster-devel] " Dave Chinner
2023-08-27 13:28 ` [PATCH 03/11] vfs: add nowait flag for struct dir_context Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 13:28 ` [PATCH 04/11] vfs: add a vfs helper for io_uring file pos lock Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 20:47 ` Matthew Wilcox
2023-08-27 20:47 ` Matthew Wilcox
2023-08-27 20:47 ` Matthew Wilcox
2023-08-27 20:47 ` [f2fs-dev] " Matthew Wilcox
2023-08-27 20:47 ` [Cluster-devel] " Matthew Wilcox
2023-08-27 13:28 ` [PATCH 05/11] vfs: add file_pos_unlock() for io_uring usage Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 13:28 ` [PATCH 06/11] vfs: add a nowait parameter for touch_atime() Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 13:28 ` [PATCH 07/11] vfs: add nowait parameter for file_accessed() Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 21:32 ` Matthew Wilcox
2023-08-27 21:32 ` Matthew Wilcox
2023-08-27 21:32 ` Matthew Wilcox
2023-08-27 21:32 ` [f2fs-dev] " Matthew Wilcox
2023-08-27 21:32 ` [Cluster-devel] " Matthew Wilcox
2023-08-29 7:46 ` Hao Xu
2023-08-29 7:46 ` Hao Xu
2023-08-29 7:46 ` Hao Xu
2023-08-29 7:46 ` [f2fs-dev] " Hao Xu
2023-08-29 7:46 ` [Cluster-devel] " Hao Xu
2023-08-29 11:53 ` Matthew Wilcox
2023-08-29 11:53 ` Matthew Wilcox
2023-08-29 11:53 ` Matthew Wilcox
2023-08-29 11:53 ` [f2fs-dev] " Matthew Wilcox
2023-08-29 11:53 ` [Cluster-devel] " Matthew Wilcox
2023-08-30 6:11 ` Hao Xu
2023-08-30 6:11 ` Hao Xu
2023-08-30 6:11 ` Hao Xu
2023-08-30 6:11 ` [f2fs-dev] " Hao Xu
2023-08-30 6:11 ` [Cluster-devel] " Hao Xu
2023-09-03 22:30 ` Dave Chinner
2023-09-03 22:30 ` Dave Chinner
2023-09-03 22:30 ` Dave Chinner
2023-09-03 22:30 ` [f2fs-dev] " Dave Chinner via Linux-f2fs-devel
2023-09-03 22:30 ` [Cluster-devel] " Dave Chinner
2023-09-08 0:29 ` Pavel Begunkov
2023-09-08 0:29 ` Pavel Begunkov
2023-09-08 0:29 ` Pavel Begunkov
2023-09-08 0:29 ` [f2fs-dev] " Pavel Begunkov
2023-09-08 0:29 ` [Cluster-devel] " Pavel Begunkov
2023-09-10 22:01 ` Dave Chinner
2023-09-10 22:01 ` Dave Chinner
2023-09-10 22:01 ` Dave Chinner
2023-09-10 22:01 ` [f2fs-dev] " Dave Chinner via Linux-f2fs-devel
2023-09-10 22:01 ` [Cluster-devel] " Dave Chinner
2023-09-04 9:51 ` Christian Brauner
2023-09-04 9:51 ` Christian Brauner
2023-09-04 9:51 ` Christian Brauner
2023-09-04 9:51 ` [f2fs-dev] " Christian Brauner
2023-09-04 9:51 ` [Cluster-devel] " Christian Brauner
2023-08-27 13:28 ` [PATCH 08/11] vfs: move file_accessed() to the beginning of iterate_dir() Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 13:28 ` [PATCH 09/11] vfs: error out -EAGAIN if atime needs to be updated Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-08-27 20:51 ` Matthew Wilcox
2023-08-27 20:51 ` Matthew Wilcox
2023-08-27 20:51 ` Matthew Wilcox
2023-08-27 20:51 ` [f2fs-dev] " Matthew Wilcox
2023-08-27 20:51 ` [Cluster-devel] " Matthew Wilcox
2023-08-27 13:28 ` [PATCH 10/11] vfs: trylock inode->i_rwsem in iterate_dir() to support nowait Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-09-04 9:37 ` Christian Brauner
2023-09-04 9:37 ` Christian Brauner
2023-09-04 9:37 ` Christian Brauner
2023-09-04 9:37 ` [f2fs-dev] " Christian Brauner
2023-09-04 9:37 ` [Cluster-devel] " Christian Brauner
2023-08-27 13:28 ` [PATCH 11/11] io_uring: add support for getdents Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` Hao Xu
2023-08-27 13:28 ` [f2fs-dev] " Hao Xu
2023-08-27 13:28 ` [Cluster-devel] " Hao Xu
2023-09-04 9:57 ` [PATCH v6 00/11] io_uring getdents Christian Brauner
2023-09-04 9:57 ` Christian Brauner
2023-09-04 9:57 ` Christian Brauner
2023-09-04 9:57 ` [f2fs-dev] " Christian Brauner
2023-09-04 9:57 ` [Cluster-devel] " Christian Brauner
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=ca10040f-b7fa-7c43-1c89-6706d13b2747@linux.dev \
--to=hao.xu@linux.dev \
--cc=asmadeus@codewreck.org \
--cc=asml.silence@gmail.com \
--cc=axboe@kernel.dk \
--cc=bpf@vger.kernel.org \
--cc=brauner@kernel.org \
--cc=bugs@claycon.org \
--cc=cluster-devel@redhat.com \
--cc=codalist@coda.cs.cmu.edu \
--cc=david@fromorbit.com \
--cc=devel@lists.orangefs.org \
--cc=djwong@kernel.org \
--cc=ecryptfs@vger.kernel.org \
--cc=io-uring@vger.kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-cachefs@redhat.com \
--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-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-mtd@lists.infradead.org \
--cc=linux-nfs@vger.kernel.org \
--cc=linux-nilfs@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-unionfs@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=samba-technical@lists.samba.org \
--cc=shr@fb.com \
--cc=viro@zeniv.linux.org.uk \
--cc=wanpengli@tencent.com \
--cc=willy@infradead.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.