diff --git a/fs/gfs2/ops_inode.c b/fs/gfs2/ops_inode.c
index 84051b997a43739f866e8b25adebe60904b9eb6c..911c115b5c6c29ecf16aabe087c2be507bb58f71 100644
--- a/fs/gfs2/ops_inode.c
+++ b/fs/gfs2/ops_inode.c
@@ -903,8 +903,8 @@ static int setattr_size(struct inode *inode, struct iattr *attr)
 	}
 
 	error = gfs2_truncatei(ip, attr->ia_size);
-	if (error)
-		return error;
+	if (error && (inode->i_size != ip->i_di.di_size))
+		i_size_write(inode, ip->i_di.di_size);
 
 	return error;
 }