For complex reasons it is not possible to hold i_sem in nfs_update_indoe(). Hence the i_size_write() in there is deadlocky. Go back to the old way. --- 25-akpm/fs/nfs/inode.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff -puN fs/nfs/inode.c~nfs-avoid-i_size_write fs/nfs/inode.c --- 25/fs/nfs/inode.c~nfs-avoid-i_size_write Tue Feb 10 13:08:36 2004 +++ 25-akpm/fs/nfs/inode.c Tue Feb 10 13:08:36 2004 @@ -834,7 +834,7 @@ nfs_setattr(struct dentry *dentry, struc if ((attr->ia_valid & ATTR_GID) != 0) inode->i_gid = attr->ia_gid; if ((attr->ia_valid & ATTR_SIZE) != 0) { - i_size_write(inode, attr->ia_size); + inode->i_size = attr->ia_size; vmtruncate(inode, attr->ia_size); } } @@ -1193,11 +1193,11 @@ static int nfs_update_inode(struct inode */ if (S_ISREG(inode->i_mode) && data_unstable) { if (new_isize > cur_isize) { - i_size_write(inode, new_isize); + inode->i_size = new_isize; invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA; } } else { - i_size_write(inode, new_isize); + inode->i_size = new_isize; invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA; } } _