/* Note: we do this only in the NFSv2 case, since v3 and higher have a better tool (separate unstable writes and commits) for solving this problem.  */
static int wait_for_concurrent_writes(struct file *file)
/* Note: we do this only in the NFSv2 case, since v3 and higher have a better tool (separate unstable writes and commits) for solving this problem.  */
static int wait_for_concurrent_writes(struct file *file)
{
	struct inode *inode = file->f_path.dentry->d_inode;
	static ino_t last_ino;
	static dev_t last_dev;
	int err = 0;
	if (atomic_read(&inode->i_writecount) > 1
	    || (last_ino == inode->i_ino && last_dev == inode->i_sb->s_dev)) {
		dprintk("nfsd: write defer %d\n", task_pid_nr(current));
		msleep(10);
		dprintk("nfsd: write resume %d\n", task_pid_nr(current));
	}
	if (inode->i_state & I_DIRTY) {
		dprintk("nfsd: write sync %d\n", task_pid_nr(current));
		err = nfsd_sync(file);
	}
	last_ino = inode->i_ino;
	last_dev = inode->i_sb->s_dev;
	return err;
}