diff options
Diffstat (limited to 'fs/xfs/xfs_log.c')
-rw-r--r-- | fs/xfs/xfs_log.c | 41 |
1 files changed, 10 insertions, 31 deletions
diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index 5215abc8023a..cee4ab9f8a9e 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c | |||
@@ -24,8 +24,6 @@ | |||
24 | #include "xfs_trans.h" | 24 | #include "xfs_trans.h" |
25 | #include "xfs_sb.h" | 25 | #include "xfs_sb.h" |
26 | #include "xfs_ag.h" | 26 | #include "xfs_ag.h" |
27 | #include "xfs_dir2.h" | ||
28 | #include "xfs_dmapi.h" | ||
29 | #include "xfs_mount.h" | 27 | #include "xfs_mount.h" |
30 | #include "xfs_error.h" | 28 | #include "xfs_error.h" |
31 | #include "xfs_log_priv.h" | 29 | #include "xfs_log_priv.h" |
@@ -35,8 +33,6 @@ | |||
35 | #include "xfs_ialloc_btree.h" | 33 | #include "xfs_ialloc_btree.h" |
36 | #include "xfs_log_recover.h" | 34 | #include "xfs_log_recover.h" |
37 | #include "xfs_trans_priv.h" | 35 | #include "xfs_trans_priv.h" |
38 | #include "xfs_dir2_sf.h" | ||
39 | #include "xfs_attr_sf.h" | ||
40 | #include "xfs_dinode.h" | 36 | #include "xfs_dinode.h" |
41 | #include "xfs_inode.h" | 37 | #include "xfs_inode.h" |
42 | #include "xfs_rw.h" | 38 | #include "xfs_rw.h" |
@@ -337,7 +333,6 @@ xfs_log_reserve( | |||
337 | int retval = 0; | 333 | int retval = 0; |
338 | 334 | ||
339 | ASSERT(client == XFS_TRANSACTION || client == XFS_LOG); | 335 | ASSERT(client == XFS_TRANSACTION || client == XFS_LOG); |
340 | ASSERT((flags & XFS_LOG_NOSLEEP) == 0); | ||
341 | 336 | ||
342 | if (XLOG_FORCED_SHUTDOWN(log)) | 337 | if (XLOG_FORCED_SHUTDOWN(log)) |
343 | return XFS_ERROR(EIO); | 338 | return XFS_ERROR(EIO); |
@@ -552,7 +547,7 @@ xfs_log_unmount_write(xfs_mount_t *mp) | |||
552 | .magic = XLOG_UNMOUNT_TYPE, | 547 | .magic = XLOG_UNMOUNT_TYPE, |
553 | }; | 548 | }; |
554 | struct xfs_log_iovec reg = { | 549 | struct xfs_log_iovec reg = { |
555 | .i_addr = (void *)&magic, | 550 | .i_addr = &magic, |
556 | .i_len = sizeof(magic), | 551 | .i_len = sizeof(magic), |
557 | .i_type = XLOG_REG_TYPE_UNMOUNT, | 552 | .i_type = XLOG_REG_TYPE_UNMOUNT, |
558 | }; | 553 | }; |
@@ -922,19 +917,6 @@ xlog_iodone(xfs_buf_t *bp) | |||
922 | l = iclog->ic_log; | 917 | l = iclog->ic_log; |
923 | 918 | ||
924 | /* | 919 | /* |
925 | * If the _XFS_BARRIER_FAILED flag was set by a lower | ||
926 | * layer, it means the underlying device no longer supports | ||
927 | * barrier I/O. Warn loudly and turn off barriers. | ||
928 | */ | ||
929 | if (bp->b_flags & _XFS_BARRIER_FAILED) { | ||
930 | bp->b_flags &= ~_XFS_BARRIER_FAILED; | ||
931 | l->l_mp->m_flags &= ~XFS_MOUNT_BARRIER; | ||
932 | xfs_fs_cmn_err(CE_WARN, l->l_mp, | ||
933 | "xlog_iodone: Barriers are no longer supported" | ||
934 | " by device. Disabling barriers\n"); | ||
935 | } | ||
936 | |||
937 | /* | ||
938 | * Race to shutdown the filesystem if we see an error. | 920 | * Race to shutdown the filesystem if we see an error. |
939 | */ | 921 | */ |
940 | if (XFS_TEST_ERROR((XFS_BUF_GETERROR(bp)), l->l_mp, | 922 | if (XFS_TEST_ERROR((XFS_BUF_GETERROR(bp)), l->l_mp, |
@@ -1047,7 +1029,6 @@ xlog_alloc_log(xfs_mount_t *mp, | |||
1047 | xlog_in_core_t *iclog, *prev_iclog=NULL; | 1029 | xlog_in_core_t *iclog, *prev_iclog=NULL; |
1048 | xfs_buf_t *bp; | 1030 | xfs_buf_t *bp; |
1049 | int i; | 1031 | int i; |
1050 | int iclogsize; | ||
1051 | int error = ENOMEM; | 1032 | int error = ENOMEM; |
1052 | uint log2_size = 0; | 1033 | uint log2_size = 0; |
1053 | 1034 | ||
@@ -1127,7 +1108,6 @@ xlog_alloc_log(xfs_mount_t *mp, | |||
1127 | * with different amounts of memory. See the definition of | 1108 | * with different amounts of memory. See the definition of |
1128 | * xlog_in_core_t in xfs_log_priv.h for details. | 1109 | * xlog_in_core_t in xfs_log_priv.h for details. |
1129 | */ | 1110 | */ |
1130 | iclogsize = log->l_iclog_size; | ||
1131 | ASSERT(log->l_iclog_size >= 4096); | 1111 | ASSERT(log->l_iclog_size >= 4096); |
1132 | for (i=0; i < log->l_iclog_bufs; i++) { | 1112 | for (i=0; i < log->l_iclog_bufs; i++) { |
1133 | *iclogp = kmem_zalloc(sizeof(xlog_in_core_t), KM_MAYFAIL); | 1113 | *iclogp = kmem_zalloc(sizeof(xlog_in_core_t), KM_MAYFAIL); |
@@ -1138,7 +1118,8 @@ xlog_alloc_log(xfs_mount_t *mp, | |||
1138 | iclog->ic_prev = prev_iclog; | 1118 | iclog->ic_prev = prev_iclog; |
1139 | prev_iclog = iclog; | 1119 | prev_iclog = iclog; |
1140 | 1120 | ||
1141 | bp = xfs_buf_get_noaddr(log->l_iclog_size, mp->m_logdev_targp); | 1121 | bp = xfs_buf_get_uncached(mp->m_logdev_targp, |
1122 | log->l_iclog_size, 0); | ||
1142 | if (!bp) | 1123 | if (!bp) |
1143 | goto out_free_iclog; | 1124 | goto out_free_iclog; |
1144 | if (!XFS_BUF_CPSEMA(bp)) | 1125 | if (!XFS_BUF_CPSEMA(bp)) |
@@ -1316,7 +1297,7 @@ xlog_bdstrat( | |||
1316 | if (iclog->ic_state & XLOG_STATE_IOERROR) { | 1297 | if (iclog->ic_state & XLOG_STATE_IOERROR) { |
1317 | XFS_BUF_ERROR(bp, EIO); | 1298 | XFS_BUF_ERROR(bp, EIO); |
1318 | XFS_BUF_STALE(bp); | 1299 | XFS_BUF_STALE(bp); |
1319 | xfs_biodone(bp); | 1300 | xfs_buf_ioend(bp, 0); |
1320 | /* | 1301 | /* |
1321 | * It would seem logical to return EIO here, but we rely on | 1302 | * It would seem logical to return EIO here, but we rely on |
1322 | * the log state machine to propagate I/O errors instead of | 1303 | * the log state machine to propagate I/O errors instead of |
@@ -1428,11 +1409,8 @@ xlog_sync(xlog_t *log, | |||
1428 | XFS_BUF_BUSY(bp); | 1409 | XFS_BUF_BUSY(bp); |
1429 | XFS_BUF_ASYNC(bp); | 1410 | XFS_BUF_ASYNC(bp); |
1430 | bp->b_flags |= XBF_LOG_BUFFER; | 1411 | bp->b_flags |= XBF_LOG_BUFFER; |
1431 | /* | 1412 | |
1432 | * Do an ordered write for the log block. | 1413 | if (log->l_mp->m_flags & XFS_MOUNT_BARRIER) |
1433 | * Its unnecessary to flush the first split block in the log wrap case. | ||
1434 | */ | ||
1435 | if (!split && (log->l_mp->m_flags & XFS_MOUNT_BARRIER)) | ||
1436 | XFS_BUF_ORDERED(bp); | 1414 | XFS_BUF_ORDERED(bp); |
1437 | 1415 | ||
1438 | ASSERT(XFS_BUF_ADDR(bp) <= log->l_logBBsize-1); | 1416 | ASSERT(XFS_BUF_ADDR(bp) <= log->l_logBBsize-1); |
@@ -3025,7 +3003,8 @@ _xfs_log_force( | |||
3025 | 3003 | ||
3026 | XFS_STATS_INC(xs_log_force); | 3004 | XFS_STATS_INC(xs_log_force); |
3027 | 3005 | ||
3028 | xlog_cil_push(log, 1); | 3006 | if (log->l_cilp) |
3007 | xlog_cil_force(log); | ||
3029 | 3008 | ||
3030 | spin_lock(&log->l_icloglock); | 3009 | spin_lock(&log->l_icloglock); |
3031 | 3010 | ||
@@ -3177,7 +3156,7 @@ _xfs_log_force_lsn( | |||
3177 | XFS_STATS_INC(xs_log_force); | 3156 | XFS_STATS_INC(xs_log_force); |
3178 | 3157 | ||
3179 | if (log->l_cilp) { | 3158 | if (log->l_cilp) { |
3180 | lsn = xlog_cil_push_lsn(log, lsn); | 3159 | lsn = xlog_cil_force_lsn(log, lsn); |
3181 | if (lsn == NULLCOMMITLSN) | 3160 | if (lsn == NULLCOMMITLSN) |
3182 | return 0; | 3161 | return 0; |
3183 | } | 3162 | } |
@@ -3734,7 +3713,7 @@ xfs_log_force_umount( | |||
3734 | * call below. | 3713 | * call below. |
3735 | */ | 3714 | */ |
3736 | if (!logerror && (mp->m_flags & XFS_MOUNT_DELAYLOG)) | 3715 | if (!logerror && (mp->m_flags & XFS_MOUNT_DELAYLOG)) |
3737 | xlog_cil_push(log, 1); | 3716 | xlog_cil_force(log); |
3738 | 3717 | ||
3739 | /* | 3718 | /* |
3740 | * We must hold both the GRANT lock and the LOG lock, | 3719 | * We must hold both the GRANT lock and the LOG lock, |