2020-06-28 07:05:55

by Eric Biggers

[permalink] [raw]
Subject: [PATCH] nilfs2: only call unlock_new_inode() if I_NEW

From: Eric Biggers <[email protected]>

unlock_new_inode() is only meant to be called after a new inode has
already been inserted into the hash table. But nilfs_new_inode() can
call it even before it has inserted the inode, triggering the WARNING in
unlock_new_inode(). Fix this by only calling unlock_new_inode() if the
inode has the I_NEW flag set, indicating that it's in the table.

Signed-off-by: Eric Biggers <[email protected]>
---
fs/nilfs2/inode.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c
index 28009ec54420..3318dd1350b2 100644
--- a/fs/nilfs2/inode.c
+++ b/fs/nilfs2/inode.c
@@ -388,7 +388,8 @@ struct inode *nilfs_new_inode(struct inode *dir, umode_t mode)

failed_after_creation:
clear_nlink(inode);
- unlock_new_inode(inode);
+ if (inode->i_state & I_NEW)
+ unlock_new_inode(inode);
iput(inode); /*
* raw_inode will be deleted through
* nilfs_evict_inode().
--
2.27.0


2020-07-27 18:53:16

by Eric Biggers

[permalink] [raw]
Subject: Re: [PATCH] nilfs2: only call unlock_new_inode() if I_NEW

On Sun, Jun 28, 2020 at 12:01:52AM -0700, Eric Biggers wrote:
> From: Eric Biggers <[email protected]>
>
> unlock_new_inode() is only meant to be called after a new inode has
> already been inserted into the hash table. But nilfs_new_inode() can
> call it even before it has inserted the inode, triggering the WARNING in
> unlock_new_inode(). Fix this by only calling unlock_new_inode() if the
> inode has the I_NEW flag set, indicating that it's in the table.
>
> Signed-off-by: Eric Biggers <[email protected]>

Ping. Ryusuke, any interest in taking this patch?

- Eric

2020-07-27 18:53:41

by Ryusuke Konishi

[permalink] [raw]
Subject: Re: [PATCH] nilfs2: only call unlock_new_inode() if I_NEW

Yeah, I sent this to Andrew a little while ago:

https://lkml.org/lkml/2020/7/27/976

Thanks,
Ryusuke Konishi

On Tue, Jul 28, 2020 at 1:50 AM Eric Biggers <[email protected]> wrote:
>
> On Sun, Jun 28, 2020 at 12:01:52AM -0700, Eric Biggers wrote:
> > From: Eric Biggers <[email protected]>
> >
> > unlock_new_inode() is only meant to be called after a new inode has
> > already been inserted into the hash table. But nilfs_new_inode() can
> > call it even before it has inserted the inode, triggering the WARNING in
> > unlock_new_inode(). Fix this by only calling unlock_new_inode() if the
> > inode has the I_NEW flag set, indicating that it's in the table.
> >
> > Signed-off-by: Eric Biggers <[email protected]>
>
> Ping. Ryusuke, any interest in taking this patch?
>
> - Eric