diff options
Diffstat (limited to 'fs/xfs/xfs_vnodeops.c')
-rw-r--r-- | fs/xfs/xfs_vnodeops.c | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 6f268756bf36..ddd2c5d1b854 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c | |||
@@ -256,7 +256,7 @@ xfs_setattr( | |||
256 | iattr->ia_size > ip->i_d.di_size) { | 256 | iattr->ia_size > ip->i_d.di_size) { |
257 | code = xfs_flush_pages(ip, | 257 | code = xfs_flush_pages(ip, |
258 | ip->i_d.di_size, iattr->ia_size, | 258 | ip->i_d.di_size, iattr->ia_size, |
259 | XFS_B_ASYNC, FI_NONE); | 259 | XBF_ASYNC, FI_NONE); |
260 | } | 260 | } |
261 | 261 | ||
262 | /* wait for all I/O to complete */ | 262 | /* wait for all I/O to complete */ |
@@ -597,7 +597,7 @@ xfs_fsync( | |||
597 | { | 597 | { |
598 | xfs_trans_t *tp; | 598 | xfs_trans_t *tp; |
599 | int error = 0; | 599 | int error = 0; |
600 | int log_flushed = 0, changed = 1; | 600 | int log_flushed = 0; |
601 | 601 | ||
602 | xfs_itrace_entry(ip); | 602 | xfs_itrace_entry(ip); |
603 | 603 | ||
@@ -627,19 +627,16 @@ xfs_fsync( | |||
627 | * disk yet, the inode will be still be pinned. If it is, | 627 | * disk yet, the inode will be still be pinned. If it is, |
628 | * force the log. | 628 | * force the log. |
629 | */ | 629 | */ |
630 | |||
631 | xfs_iunlock(ip, XFS_ILOCK_SHARED); | 630 | xfs_iunlock(ip, XFS_ILOCK_SHARED); |
632 | |||
633 | if (xfs_ipincount(ip)) { | 631 | if (xfs_ipincount(ip)) { |
634 | error = _xfs_log_force(ip->i_mount, (xfs_lsn_t)0, | 632 | if (ip->i_itemp->ili_last_lsn) { |
635 | XFS_LOG_FORCE | XFS_LOG_SYNC, | 633 | error = _xfs_log_force_lsn(ip->i_mount, |
636 | &log_flushed); | 634 | ip->i_itemp->ili_last_lsn, |
637 | } else { | 635 | XFS_LOG_SYNC, &log_flushed); |
638 | /* | 636 | } else { |
639 | * If the inode is not pinned and nothing has changed | 637 | error = _xfs_log_force(ip->i_mount, |
640 | * we don't need to flush the cache. | 638 | XFS_LOG_SYNC, &log_flushed); |
641 | */ | 639 | } |
642 | changed = 0; | ||
643 | } | 640 | } |
644 | } else { | 641 | } else { |
645 | /* | 642 | /* |
@@ -674,7 +671,7 @@ xfs_fsync( | |||
674 | xfs_iunlock(ip, XFS_ILOCK_EXCL); | 671 | xfs_iunlock(ip, XFS_ILOCK_EXCL); |
675 | } | 672 | } |
676 | 673 | ||
677 | if ((ip->i_mount->m_flags & XFS_MOUNT_BARRIER) && changed) { | 674 | if (ip->i_mount->m_flags & XFS_MOUNT_BARRIER) { |
678 | /* | 675 | /* |
679 | * If the log write didn't issue an ordered tag we need | 676 | * If the log write didn't issue an ordered tag we need |
680 | * to flush the disk cache for the data device now. | 677 | * to flush the disk cache for the data device now. |
@@ -1096,7 +1093,7 @@ xfs_release( | |||
1096 | */ | 1093 | */ |
1097 | truncated = xfs_iflags_test_and_clear(ip, XFS_ITRUNCATED); | 1094 | truncated = xfs_iflags_test_and_clear(ip, XFS_ITRUNCATED); |
1098 | if (truncated && VN_DIRTY(VFS_I(ip)) && ip->i_delayed_blks > 0) | 1095 | if (truncated && VN_DIRTY(VFS_I(ip)) && ip->i_delayed_blks > 0) |
1099 | xfs_flush_pages(ip, 0, -1, XFS_B_ASYNC, FI_NONE); | 1096 | xfs_flush_pages(ip, 0, -1, XBF_ASYNC, FI_NONE); |
1100 | } | 1097 | } |
1101 | 1098 | ||
1102 | if (ip->i_d.di_nlink != 0) { | 1099 | if (ip->i_d.di_nlink != 0) { |
@@ -2199,7 +2196,8 @@ xfs_symlink( | |||
2199 | if (DM_EVENT_ENABLED(dp, DM_EVENT_SYMLINK)) { | 2196 | if (DM_EVENT_ENABLED(dp, DM_EVENT_SYMLINK)) { |
2200 | error = XFS_SEND_NAMESP(mp, DM_EVENT_SYMLINK, dp, | 2197 | error = XFS_SEND_NAMESP(mp, DM_EVENT_SYMLINK, dp, |
2201 | DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, | 2198 | DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, |
2202 | link_name->name, target_path, 0, 0, 0); | 2199 | link_name->name, |
2200 | (unsigned char *)target_path, 0, 0, 0); | ||
2203 | if (error) | 2201 | if (error) |
2204 | return error; | 2202 | return error; |
2205 | } | 2203 | } |
@@ -2395,7 +2393,8 @@ std_return: | |||
2395 | dp, DM_RIGHT_NULL, | 2393 | dp, DM_RIGHT_NULL, |
2396 | error ? NULL : ip, | 2394 | error ? NULL : ip, |
2397 | DM_RIGHT_NULL, link_name->name, | 2395 | DM_RIGHT_NULL, link_name->name, |
2398 | target_path, 0, error, 0); | 2396 | (unsigned char *)target_path, |
2397 | 0, error, 0); | ||
2399 | } | 2398 | } |
2400 | 2399 | ||
2401 | if (!error) | 2400 | if (!error) |