diff options
Diffstat (limited to 'fs/xfs/xfs_vnodeops.c')
| -rw-r--r-- | fs/xfs/xfs_vnodeops.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index eaab355f5a89..a478f42e63ff 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c | |||
| @@ -615,6 +615,7 @@ xfs_setattr( | |||
| 615 | code = xfs_igrow_start(ip, vap->va_size, credp); | 615 | code = xfs_igrow_start(ip, vap->va_size, credp); |
| 616 | } | 616 | } |
| 617 | xfs_iunlock(ip, XFS_ILOCK_EXCL); | 617 | xfs_iunlock(ip, XFS_ILOCK_EXCL); |
| 618 | vn_iowait(vp); /* wait for the completion of any pending DIOs */ | ||
| 618 | if (!code) | 619 | if (!code) |
| 619 | code = xfs_itruncate_data(ip, vap->va_size); | 620 | code = xfs_itruncate_data(ip, vap->va_size); |
| 620 | if (code) { | 621 | if (code) { |
| @@ -1556,7 +1557,7 @@ xfs_release( | |||
| 1556 | if ((error = xfs_inactive_free_eofblocks(mp, ip))) | 1557 | if ((error = xfs_inactive_free_eofblocks(mp, ip))) |
| 1557 | return error; | 1558 | return error; |
| 1558 | /* Update linux inode block count after free above */ | 1559 | /* Update linux inode block count after free above */ |
| 1559 | LINVFS_GET_IP(vp)->i_blocks = XFS_FSB_TO_BB(mp, | 1560 | vn_to_inode(vp)->i_blocks = XFS_FSB_TO_BB(mp, |
| 1560 | ip->i_d.di_nblocks + ip->i_delayed_blks); | 1561 | ip->i_d.di_nblocks + ip->i_delayed_blks); |
| 1561 | } | 1562 | } |
| 1562 | } | 1563 | } |
| @@ -1637,7 +1638,7 @@ xfs_inactive( | |||
| 1637 | if ((error = xfs_inactive_free_eofblocks(mp, ip))) | 1638 | if ((error = xfs_inactive_free_eofblocks(mp, ip))) |
| 1638 | return VN_INACTIVE_CACHE; | 1639 | return VN_INACTIVE_CACHE; |
| 1639 | /* Update linux inode block count after free above */ | 1640 | /* Update linux inode block count after free above */ |
| 1640 | LINVFS_GET_IP(vp)->i_blocks = XFS_FSB_TO_BB(mp, | 1641 | vn_to_inode(vp)->i_blocks = XFS_FSB_TO_BB(mp, |
| 1641 | ip->i_d.di_nblocks + ip->i_delayed_blks); | 1642 | ip->i_d.di_nblocks + ip->i_delayed_blks); |
| 1642 | } | 1643 | } |
| 1643 | goto out; | 1644 | goto out; |
| @@ -3186,7 +3187,7 @@ xfs_rmdir( | |||
| 3186 | 3187 | ||
| 3187 | /* Fall through to std_return with error = 0 or the errno | 3188 | /* Fall through to std_return with error = 0 or the errno |
| 3188 | * from xfs_trans_commit. */ | 3189 | * from xfs_trans_commit. */ |
| 3189 | std_return: | 3190 | std_return: |
| 3190 | if (DM_EVENT_ENABLED(dir_vp->v_vfsp, dp, DM_EVENT_POSTREMOVE)) { | 3191 | if (DM_EVENT_ENABLED(dir_vp->v_vfsp, dp, DM_EVENT_POSTREMOVE)) { |
| 3191 | (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, | 3192 | (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, |
| 3192 | dir_vp, DM_RIGHT_NULL, | 3193 | dir_vp, DM_RIGHT_NULL, |
| @@ -3196,12 +3197,12 @@ std_return: | |||
| 3196 | } | 3197 | } |
| 3197 | return error; | 3198 | return error; |
| 3198 | 3199 | ||
| 3199 | error1: | 3200 | error1: |
| 3200 | xfs_bmap_cancel(&free_list); | 3201 | xfs_bmap_cancel(&free_list); |
| 3201 | cancel_flags |= XFS_TRANS_ABORT; | 3202 | cancel_flags |= XFS_TRANS_ABORT; |
| 3202 | /* FALLTHROUGH */ | 3203 | /* FALLTHROUGH */ |
| 3203 | 3204 | ||
| 3204 | error_return: | 3205 | error_return: |
| 3205 | xfs_trans_cancel(tp, cancel_flags); | 3206 | xfs_trans_cancel(tp, cancel_flags); |
| 3206 | goto std_return; | 3207 | goto std_return; |
| 3207 | } | 3208 | } |
| @@ -4310,8 +4311,10 @@ xfs_free_file_space( | |||
| 4310 | ASSERT(attr_flags & ATTR_NOLOCK ? attr_flags & ATTR_DMI : 1); | 4311 | ASSERT(attr_flags & ATTR_NOLOCK ? attr_flags & ATTR_DMI : 1); |
| 4311 | if (attr_flags & ATTR_NOLOCK) | 4312 | if (attr_flags & ATTR_NOLOCK) |
| 4312 | need_iolock = 0; | 4313 | need_iolock = 0; |
| 4313 | if (need_iolock) | 4314 | if (need_iolock) { |
| 4314 | xfs_ilock(ip, XFS_IOLOCK_EXCL); | 4315 | xfs_ilock(ip, XFS_IOLOCK_EXCL); |
| 4316 | vn_iowait(vp); /* wait for the completion of any pending DIOs */ | ||
| 4317 | } | ||
| 4315 | 4318 | ||
| 4316 | rounding = MAX((__uint8_t)(1 << mp->m_sb.sb_blocklog), | 4319 | rounding = MAX((__uint8_t)(1 << mp->m_sb.sb_blocklog), |
| 4317 | (__uint8_t)NBPP); | 4320 | (__uint8_t)NBPP); |
