diff --git a/fs/9p/vfs_dir.c b/fs/9p/vfs_dir.c index e0d34e4e9076..99c7015396ab 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_SYNC, &inode->i_state)) { + spin_unlock(&inode->i_lock); + if (wait_on_bit_timeout(&inode->i_state, I_SYNC, + 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_SYNC, __func__); + spin_lock(&inode->i_lock); + } hlist_del(&fid->ilist); spin_unlock(&inode->i_lock); put_err = p9_fid_put(fid);