785 if (error)
786 goto out_unlock_internal;
787 pos = xip->i_size;
788 ret = 0;
789 goto retry;
790 }
791
792 isize = i_size_read(inode);
793 if (unlikely(ret < 0 && ret != -EFAULT && *offset > isize))
794 *offset = isize;
795
796 if (*offset > xip->i_size) {
797 xfs_ilock(xip, XFS_ILOCK_EXCL);
798 if (*offset > xip->i_size)
799 xip->i_size = *offset;
800 xfs_iunlock(xip, XFS_ILOCK_EXCL);
801 }
802
803 error = -ret;
804 if (ret <= 0)
805 goto out_unlock_internal;
806
807 XFS_STATS_ADD(xs_write_bytes, ret);
808
809
810 if ((file->f_flags & O_SYNC) || IS_SYNC(inode)) {
811 int error2;
812
813 xfs_iunlock(xip, iolock);
814 if (need_i_mutex)
815 mutex_unlock(&inode->i_mutex);
816 error2 = sync_page_range(inode, mapping, pos, ret);
817 if (!error)
818 error = error2;
819 if (need_i_mutex)
820 mutex_lock(&inode->i_mutex);
821 xfs_ilock(xip, iolock);
822 error2 = xfs_write_sync_logforce(mp, xip);
823 if (!error)
824 error = error2;
825 }