Skip to contentSkip to conversation

nilfs2: only call unlock_new_inode() if I_NEW

PATCH In review Eric Biggers 2 participants 3 messages Jun 28, 2020 – Jul 27, 2020

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 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.

---
 fs/nilfs2/inode.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
fs/nilfs2/inode.c +2 -1
index 28009ec54420..3318dd1350b2 100644
@@ -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().
Signature · 1 line
2.27.0
#1 lore raw
Quoted 9 lines · Eric Biggers

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.

Ping. Ryusuke, any interest in taking this patch?

- Eric

maintainer
#2 lore raw

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

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

Thanks,
Ryusuke Konishi

Quoted 15 lines · Eric Biggers
Quoted 9 lines · Eric Biggers

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.

Ping. Ryusuke, any interest in taking this patch?

- Eric