lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <ZOu1xYS6LRmPgEiV@casper.infradead.org> Date: Sun, 27 Aug 2023 21:44:53 +0100 From: Matthew Wilcox <willy@...radead.org> To: Hao Xu <hao.xu@...ux.dev> Cc: io-uring@...r.kernel.org, Jens Axboe <axboe@...nel.dk>, Dominique Martinet <asmadeus@...ewreck.org>, Pavel Begunkov <asml.silence@...il.com>, Christian Brauner <brauner@...nel.org>, Alexander Viro <viro@...iv.linux.org.uk>, Stefan Roesch <shr@...com>, Clay Harris <bugs@...ycon.org>, Dave Chinner <david@...morbit.com>, "Darrick J . Wong" <djwong@...nel.org>, linux-fsdevel@...r.kernel.org, linux-xfs@...r.kernel.org, linux-ext4@...r.kernel.org, linux-cachefs@...hat.com, ecryptfs@...r.kernel.org, linux-nfs@...r.kernel.org, linux-unionfs@...r.kernel.org, bpf@...r.kernel.org, netdev@...r.kernel.org, linux-s390@...r.kernel.org, linux-kernel@...r.kernel.org, linux-block@...r.kernel.org, linux-btrfs@...r.kernel.org, codalist@...a.cs.cmu.edu, linux-f2fs-devel@...ts.sourceforge.net, cluster-devel@...hat.com, linux-mm@...ck.org, linux-nilfs@...r.kernel.org, devel@...ts.orangefs.org, linux-cifs@...r.kernel.org, samba-technical@...ts.samba.org, linux-mtd@...ts.infradead.org, Wanpeng Li <wanpengli@...cent.com> Subject: Re: [PATCH 02/11] xfs: add NOWAIT semantics for readdir 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. > + 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. > 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().
Powered by blists - more mailing lists