Re: [syzbot] Re: [syzbot] [v9fs?] WARNING in v9fs_begin_writeback

From: syzbot
Date: Fri Aug 09 2024 - 02:41:37 EST


For archival purposes, forwarding an incoming command email to
linux-kernel@xxxxxxxxxxxxxxx.

***

Subject: Re: [syzbot] [v9fs?] WARNING in v9fs_begin_writeback
Author: lizhi.xu@xxxxxxxxxxxxx

wait for writeback done before release inode

#syz test: upstream c0ecd6388360

diff --git a/fs/9p/vfs_dir.c b/fs/9p/vfs_dir.c
index e0d34e4e9076..ca7ea0d619aa 100644
--- a/fs/9p/vfs_dir.c
+++ b/fs/9p/vfs_dir.c
@@ -219,6 +219,14 @@ int v9fs_dir_release(struct inode *inode, struct file *filp)
retval = filemap_fdatawrite(inode->i_mapping);

spin_lock(&inode->i_lock);
+ if (test_bit(I_DIRTY, &inode->i_state)) {
+ spin_unlock(&inode->i_lock);
+ if (wait_on_bit_timeout(&inode->i_state, I_DIRTY,
+ TASK_UNINTERRUPTIBLE, HZ))
+ return -EBUSY;
+ printk("del, ind: %p, ino: %lx, ino is dirty: %d, %s\n", inode, inode->i_ino, inode->i_state & I_DIRTY, __func__);
+ spin_lock(&inode->i_lock);
+ }
hlist_del(&fid->ilist);
spin_unlock(&inode->i_lock);
put_err = p9_fid_put(fid);