diff options
Diffstat (limited to 'fs/xfs/xfs_buf_item.c')
-rw-r--r-- | fs/xfs/xfs_buf_item.c | 87 |
1 files changed, 25 insertions, 62 deletions
diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c index 92af4098c7e8..a30f7e9eb2b9 100644 --- a/fs/xfs/xfs_buf_item.c +++ b/fs/xfs/xfs_buf_item.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include "xfs_buf_item.h" | 29 | #include "xfs_buf_item.h" |
30 | #include "xfs_trans_priv.h" | 30 | #include "xfs_trans_priv.h" |
31 | #include "xfs_error.h" | 31 | #include "xfs_error.h" |
32 | #include "xfs_trace.h" | ||
32 | 33 | ||
33 | 34 | ||
34 | kmem_zone_t *xfs_buf_item_zone; | 35 | kmem_zone_t *xfs_buf_item_zone; |
@@ -164,7 +165,7 @@ xfs_buf_item_size( | |||
164 | * is the buf log format structure with the | 165 | * is the buf log format structure with the |
165 | * cancel flag in it. | 166 | * cancel flag in it. |
166 | */ | 167 | */ |
167 | xfs_buf_item_trace("SIZE STALE", bip); | 168 | trace_xfs_buf_item_size_stale(bip); |
168 | ASSERT(bip->bli_format.blf_flags & XFS_BLI_CANCEL); | 169 | ASSERT(bip->bli_format.blf_flags & XFS_BLI_CANCEL); |
169 | return 1; | 170 | return 1; |
170 | } | 171 | } |
@@ -206,7 +207,7 @@ xfs_buf_item_size( | |||
206 | } | 207 | } |
207 | } | 208 | } |
208 | 209 | ||
209 | xfs_buf_item_trace("SIZE NORM", bip); | 210 | trace_xfs_buf_item_size(bip); |
210 | return nvecs; | 211 | return nvecs; |
211 | } | 212 | } |
212 | 213 | ||
@@ -259,7 +260,7 @@ xfs_buf_item_format( | |||
259 | * is the buf log format structure with the | 260 | * is the buf log format structure with the |
260 | * cancel flag in it. | 261 | * cancel flag in it. |
261 | */ | 262 | */ |
262 | xfs_buf_item_trace("FORMAT STALE", bip); | 263 | trace_xfs_buf_item_format_stale(bip); |
263 | ASSERT(bip->bli_format.blf_flags & XFS_BLI_CANCEL); | 264 | ASSERT(bip->bli_format.blf_flags & XFS_BLI_CANCEL); |
264 | bip->bli_format.blf_size = nvecs; | 265 | bip->bli_format.blf_size = nvecs; |
265 | return; | 266 | return; |
@@ -335,7 +336,7 @@ xfs_buf_item_format( | |||
335 | /* | 336 | /* |
336 | * Check to make sure everything is consistent. | 337 | * Check to make sure everything is consistent. |
337 | */ | 338 | */ |
338 | xfs_buf_item_trace("FORMAT NORM", bip); | 339 | trace_xfs_buf_item_format(bip); |
339 | xfs_buf_item_log_check(bip); | 340 | xfs_buf_item_log_check(bip); |
340 | } | 341 | } |
341 | 342 | ||
@@ -355,8 +356,7 @@ xfs_buf_item_pin( | |||
355 | ASSERT(atomic_read(&bip->bli_refcount) > 0); | 356 | ASSERT(atomic_read(&bip->bli_refcount) > 0); |
356 | ASSERT((bip->bli_flags & XFS_BLI_LOGGED) || | 357 | ASSERT((bip->bli_flags & XFS_BLI_LOGGED) || |
357 | (bip->bli_flags & XFS_BLI_STALE)); | 358 | (bip->bli_flags & XFS_BLI_STALE)); |
358 | xfs_buf_item_trace("PIN", bip); | 359 | trace_xfs_buf_item_pin(bip); |
359 | xfs_buftrace("XFS_PIN", bp); | ||
360 | xfs_bpin(bp); | 360 | xfs_bpin(bp); |
361 | } | 361 | } |
362 | 362 | ||
@@ -383,8 +383,7 @@ xfs_buf_item_unpin( | |||
383 | ASSERT(bp != NULL); | 383 | ASSERT(bp != NULL); |
384 | ASSERT(XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *) == bip); | 384 | ASSERT(XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *) == bip); |
385 | ASSERT(atomic_read(&bip->bli_refcount) > 0); | 385 | ASSERT(atomic_read(&bip->bli_refcount) > 0); |
386 | xfs_buf_item_trace("UNPIN", bip); | 386 | trace_xfs_buf_item_unpin(bip); |
387 | xfs_buftrace("XFS_UNPIN", bp); | ||
388 | 387 | ||
389 | freed = atomic_dec_and_test(&bip->bli_refcount); | 388 | freed = atomic_dec_and_test(&bip->bli_refcount); |
390 | ailp = bip->bli_item.li_ailp; | 389 | ailp = bip->bli_item.li_ailp; |
@@ -395,8 +394,8 @@ xfs_buf_item_unpin( | |||
395 | ASSERT(!(XFS_BUF_ISDELAYWRITE(bp))); | 394 | ASSERT(!(XFS_BUF_ISDELAYWRITE(bp))); |
396 | ASSERT(XFS_BUF_ISSTALE(bp)); | 395 | ASSERT(XFS_BUF_ISSTALE(bp)); |
397 | ASSERT(bip->bli_format.blf_flags & XFS_BLI_CANCEL); | 396 | ASSERT(bip->bli_format.blf_flags & XFS_BLI_CANCEL); |
398 | xfs_buf_item_trace("UNPIN STALE", bip); | 397 | trace_xfs_buf_item_unpin_stale(bip); |
399 | xfs_buftrace("XFS_UNPIN STALE", bp); | 398 | |
400 | /* | 399 | /* |
401 | * If we get called here because of an IO error, we may | 400 | * If we get called here because of an IO error, we may |
402 | * or may not have the item on the AIL. xfs_trans_ail_delete() | 401 | * or may not have the item on the AIL. xfs_trans_ail_delete() |
@@ -440,8 +439,8 @@ xfs_buf_item_unpin_remove( | |||
440 | if ((atomic_read(&bip->bli_refcount) == 1) && | 439 | if ((atomic_read(&bip->bli_refcount) == 1) && |
441 | (bip->bli_flags & XFS_BLI_STALE)) { | 440 | (bip->bli_flags & XFS_BLI_STALE)) { |
442 | ASSERT(XFS_BUF_VALUSEMA(bip->bli_buf) <= 0); | 441 | ASSERT(XFS_BUF_VALUSEMA(bip->bli_buf) <= 0); |
443 | xfs_buf_item_trace("UNPIN REMOVE", bip); | 442 | trace_xfs_buf_item_unpin_stale(bip); |
444 | xfs_buftrace("XFS_UNPIN_REMOVE", bp); | 443 | |
445 | /* | 444 | /* |
446 | * yes -- clear the xaction descriptor in-use flag | 445 | * yes -- clear the xaction descriptor in-use flag |
447 | * and free the chunk if required. We can safely | 446 | * and free the chunk if required. We can safely |
@@ -495,7 +494,7 @@ xfs_buf_item_trylock( | |||
495 | XFS_BUF_HOLD(bp); | 494 | XFS_BUF_HOLD(bp); |
496 | 495 | ||
497 | ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); | 496 | ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); |
498 | xfs_buf_item_trace("TRYLOCK SUCCESS", bip); | 497 | trace_xfs_buf_item_trylock(bip); |
499 | return XFS_ITEM_SUCCESS; | 498 | return XFS_ITEM_SUCCESS; |
500 | } | 499 | } |
501 | 500 | ||
@@ -524,7 +523,6 @@ xfs_buf_item_unlock( | |||
524 | uint hold; | 523 | uint hold; |
525 | 524 | ||
526 | bp = bip->bli_buf; | 525 | bp = bip->bli_buf; |
527 | xfs_buftrace("XFS_UNLOCK", bp); | ||
528 | 526 | ||
529 | /* | 527 | /* |
530 | * Clear the buffer's association with this transaction. | 528 | * Clear the buffer's association with this transaction. |
@@ -547,7 +545,7 @@ xfs_buf_item_unlock( | |||
547 | */ | 545 | */ |
548 | if (bip->bli_flags & XFS_BLI_STALE) { | 546 | if (bip->bli_flags & XFS_BLI_STALE) { |
549 | bip->bli_flags &= ~XFS_BLI_LOGGED; | 547 | bip->bli_flags &= ~XFS_BLI_LOGGED; |
550 | xfs_buf_item_trace("UNLOCK STALE", bip); | 548 | trace_xfs_buf_item_unlock_stale(bip); |
551 | ASSERT(bip->bli_format.blf_flags & XFS_BLI_CANCEL); | 549 | ASSERT(bip->bli_format.blf_flags & XFS_BLI_CANCEL); |
552 | if (!aborted) | 550 | if (!aborted) |
553 | return; | 551 | return; |
@@ -574,7 +572,7 @@ xfs_buf_item_unlock( | |||
574 | * release the buffer at the end of this routine. | 572 | * release the buffer at the end of this routine. |
575 | */ | 573 | */ |
576 | hold = bip->bli_flags & XFS_BLI_HOLD; | 574 | hold = bip->bli_flags & XFS_BLI_HOLD; |
577 | xfs_buf_item_trace("UNLOCK", bip); | 575 | trace_xfs_buf_item_unlock(bip); |
578 | 576 | ||
579 | /* | 577 | /* |
580 | * If the buf item isn't tracking any data, free it. | 578 | * If the buf item isn't tracking any data, free it. |
@@ -618,7 +616,8 @@ xfs_buf_item_committed( | |||
618 | xfs_buf_log_item_t *bip, | 616 | xfs_buf_log_item_t *bip, |
619 | xfs_lsn_t lsn) | 617 | xfs_lsn_t lsn) |
620 | { | 618 | { |
621 | xfs_buf_item_trace("COMMITTED", bip); | 619 | trace_xfs_buf_item_committed(bip); |
620 | |||
622 | if ((bip->bli_flags & XFS_BLI_INODE_ALLOC_BUF) && | 621 | if ((bip->bli_flags & XFS_BLI_INODE_ALLOC_BUF) && |
623 | (bip->bli_item.li_lsn != 0)) { | 622 | (bip->bli_item.li_lsn != 0)) { |
624 | return bip->bli_item.li_lsn; | 623 | return bip->bli_item.li_lsn; |
@@ -640,7 +639,7 @@ xfs_buf_item_push( | |||
640 | xfs_buf_t *bp; | 639 | xfs_buf_t *bp; |
641 | 640 | ||
642 | ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); | 641 | ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); |
643 | xfs_buf_item_trace("PUSH", bip); | 642 | trace_xfs_buf_item_push(bip); |
644 | 643 | ||
645 | bp = bip->bli_buf; | 644 | bp = bip->bli_buf; |
646 | 645 | ||
@@ -738,9 +737,6 @@ xfs_buf_item_init( | |||
738 | bip->bli_format.blf_blkno = (__int64_t)XFS_BUF_ADDR(bp); | 737 | bip->bli_format.blf_blkno = (__int64_t)XFS_BUF_ADDR(bp); |
739 | bip->bli_format.blf_len = (ushort)BTOBB(XFS_BUF_COUNT(bp)); | 738 | bip->bli_format.blf_len = (ushort)BTOBB(XFS_BUF_COUNT(bp)); |
740 | bip->bli_format.blf_map_size = map_size; | 739 | bip->bli_format.blf_map_size = map_size; |
741 | #ifdef XFS_BLI_TRACE | ||
742 | bip->bli_trace = ktrace_alloc(XFS_BLI_TRACE_SIZE, KM_NOFS); | ||
743 | #endif | ||
744 | 740 | ||
745 | #ifdef XFS_TRANS_DEBUG | 741 | #ifdef XFS_TRANS_DEBUG |
746 | /* | 742 | /* |
@@ -878,9 +874,6 @@ xfs_buf_item_free( | |||
878 | kmem_free(bip->bli_logged); | 874 | kmem_free(bip->bli_logged); |
879 | #endif /* XFS_TRANS_DEBUG */ | 875 | #endif /* XFS_TRANS_DEBUG */ |
880 | 876 | ||
881 | #ifdef XFS_BLI_TRACE | ||
882 | ktrace_free(bip->bli_trace); | ||
883 | #endif | ||
884 | kmem_zone_free(xfs_buf_item_zone, bip); | 877 | kmem_zone_free(xfs_buf_item_zone, bip); |
885 | } | 878 | } |
886 | 879 | ||
@@ -897,7 +890,8 @@ xfs_buf_item_relse( | |||
897 | { | 890 | { |
898 | xfs_buf_log_item_t *bip; | 891 | xfs_buf_log_item_t *bip; |
899 | 892 | ||
900 | xfs_buftrace("XFS_RELSE", bp); | 893 | trace_xfs_buf_item_relse(bp, _RET_IP_); |
894 | |||
901 | bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t*); | 895 | bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t*); |
902 | XFS_BUF_SET_FSPRIVATE(bp, bip->bli_item.li_bio_list); | 896 | XFS_BUF_SET_FSPRIVATE(bp, bip->bli_item.li_bio_list); |
903 | if ((XFS_BUF_FSPRIVATE(bp, void *) == NULL) && | 897 | if ((XFS_BUF_FSPRIVATE(bp, void *) == NULL) && |
@@ -994,7 +988,7 @@ xfs_buf_iodone_callbacks( | |||
994 | if (XFS_FORCED_SHUTDOWN(mp)) { | 988 | if (XFS_FORCED_SHUTDOWN(mp)) { |
995 | ASSERT(XFS_BUF_TARGET(bp) == mp->m_ddev_targp); | 989 | ASSERT(XFS_BUF_TARGET(bp) == mp->m_ddev_targp); |
996 | XFS_BUF_SUPER_STALE(bp); | 990 | XFS_BUF_SUPER_STALE(bp); |
997 | xfs_buftrace("BUF_IODONE_CB", bp); | 991 | trace_xfs_buf_item_iodone(bp, _RET_IP_); |
998 | xfs_buf_do_callbacks(bp, lip); | 992 | xfs_buf_do_callbacks(bp, lip); |
999 | XFS_BUF_SET_FSPRIVATE(bp, NULL); | 993 | XFS_BUF_SET_FSPRIVATE(bp, NULL); |
1000 | XFS_BUF_CLR_IODONE_FUNC(bp); | 994 | XFS_BUF_CLR_IODONE_FUNC(bp); |
@@ -1030,7 +1024,7 @@ xfs_buf_iodone_callbacks( | |||
1030 | XFS_BUF_SET_START(bp); | 1024 | XFS_BUF_SET_START(bp); |
1031 | } | 1025 | } |
1032 | ASSERT(XFS_BUF_IODONE_FUNC(bp)); | 1026 | ASSERT(XFS_BUF_IODONE_FUNC(bp)); |
1033 | xfs_buftrace("BUF_IODONE ASYNC", bp); | 1027 | trace_xfs_buf_item_iodone_async(bp, _RET_IP_); |
1034 | xfs_buf_relse(bp); | 1028 | xfs_buf_relse(bp); |
1035 | } else { | 1029 | } else { |
1036 | /* | 1030 | /* |
@@ -1053,9 +1047,7 @@ xfs_buf_iodone_callbacks( | |||
1053 | } | 1047 | } |
1054 | return; | 1048 | return; |
1055 | } | 1049 | } |
1056 | #ifdef XFSERRORDEBUG | 1050 | |
1057 | xfs_buftrace("XFS BUFCB NOERR", bp); | ||
1058 | #endif | ||
1059 | xfs_buf_do_callbacks(bp, lip); | 1051 | xfs_buf_do_callbacks(bp, lip); |
1060 | XFS_BUF_SET_FSPRIVATE(bp, NULL); | 1052 | XFS_BUF_SET_FSPRIVATE(bp, NULL); |
1061 | XFS_BUF_CLR_IODONE_FUNC(bp); | 1053 | XFS_BUF_CLR_IODONE_FUNC(bp); |
@@ -1081,7 +1073,9 @@ xfs_buf_error_relse( | |||
1081 | XFS_BUF_DONE(bp); | 1073 | XFS_BUF_DONE(bp); |
1082 | XFS_BUF_UNDELAYWRITE(bp); | 1074 | XFS_BUF_UNDELAYWRITE(bp); |
1083 | XFS_BUF_ERROR(bp,0); | 1075 | XFS_BUF_ERROR(bp,0); |
1084 | xfs_buftrace("BUF_ERROR_RELSE", bp); | 1076 | |
1077 | trace_xfs_buf_error_relse(bp, _RET_IP_); | ||
1078 | |||
1085 | if (! XFS_FORCED_SHUTDOWN(mp)) | 1079 | if (! XFS_FORCED_SHUTDOWN(mp)) |
1086 | xfs_force_shutdown(mp, SHUTDOWN_META_IO_ERROR); | 1080 | xfs_force_shutdown(mp, SHUTDOWN_META_IO_ERROR); |
1087 | /* | 1081 | /* |
@@ -1128,34 +1122,3 @@ xfs_buf_iodone( | |||
1128 | xfs_trans_ail_delete(ailp, (xfs_log_item_t *)bip); | 1122 | xfs_trans_ail_delete(ailp, (xfs_log_item_t *)bip); |
1129 | xfs_buf_item_free(bip); | 1123 | xfs_buf_item_free(bip); |
1130 | } | 1124 | } |
1131 | |||
1132 | #if defined(XFS_BLI_TRACE) | ||
1133 | void | ||
1134 | xfs_buf_item_trace( | ||
1135 | char *id, | ||
1136 | xfs_buf_log_item_t *bip) | ||
1137 | { | ||
1138 | xfs_buf_t *bp; | ||
1139 | ASSERT(bip->bli_trace != NULL); | ||
1140 | |||
1141 | bp = bip->bli_buf; | ||
1142 | ktrace_enter(bip->bli_trace, | ||
1143 | (void *)id, | ||
1144 | (void *)bip->bli_buf, | ||
1145 | (void *)((unsigned long)bip->bli_flags), | ||
1146 | (void *)((unsigned long)bip->bli_recur), | ||
1147 | (void *)((unsigned long)atomic_read(&bip->bli_refcount)), | ||
1148 | (void *)((unsigned long) | ||
1149 | (0xFFFFFFFF & XFS_BUF_ADDR(bp) >> 32)), | ||
1150 | (void *)((unsigned long)(0xFFFFFFFF & XFS_BUF_ADDR(bp))), | ||
1151 | (void *)((unsigned long)XFS_BUF_COUNT(bp)), | ||
1152 | (void *)((unsigned long)XFS_BUF_BFLAGS(bp)), | ||
1153 | XFS_BUF_FSPRIVATE(bp, void *), | ||
1154 | XFS_BUF_FSPRIVATE2(bp, void *), | ||
1155 | (void *)(unsigned long)XFS_BUF_ISPINNED(bp), | ||
1156 | (void *)XFS_BUF_IODONE_FUNC(bp), | ||
1157 | (void *)((unsigned long)(XFS_BUF_VALUSEMA(bp))), | ||
1158 | (void *)bip->bli_item.li_desc, | ||
1159 | (void *)((unsigned long)bip->bli_item.li_flags)); | ||
1160 | } | ||
1161 | #endif /* XFS_BLI_TRACE */ | ||