--- a/fs/open.c +++ i/fs/open.c @@ -60,7 +60,12 @@ int do_truncate(struct user_namespace *m if (ret) newattrs.ia_valid |= ret | ATTR_FORCE; +wait: inode_dio_wait(dentry->d_inode); inode_lock(dentry->d_inode); + if (atomic_read(&dentry->d_inode->i_dio_count)) { + inode_unlock(dentry->d_inode); + goto wait; + } /* Note any delegations or leases have already been broken: */ ret = notify_change(mnt_userns, dentry, &newattrs, NULL); inode_unlock(dentry->d_inode);