diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/xfs/xfs_trans_ail.c | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/fs/xfs/xfs_trans_ail.c b/fs/xfs/xfs_trans_ail.c index 7ed7425478de..4d6330eddc8d 100644 --- a/fs/xfs/xfs_trans_ail.c +++ b/fs/xfs/xfs_trans_ail.c | |||
@@ -34,9 +34,9 @@ STATIC xfs_log_item_t * xfs_ail_min(xfs_ail_entry_t *); | |||
34 | STATIC xfs_log_item_t * xfs_ail_next(xfs_ail_entry_t *, xfs_log_item_t *); | 34 | STATIC xfs_log_item_t * xfs_ail_next(xfs_ail_entry_t *, xfs_log_item_t *); |
35 | 35 | ||
36 | #ifdef DEBUG | 36 | #ifdef DEBUG |
37 | STATIC void xfs_ail_check(xfs_ail_entry_t *); | 37 | STATIC void xfs_ail_check(xfs_ail_entry_t *, xfs_log_item_t *); |
38 | #else | 38 | #else |
39 | #define xfs_ail_check(a) | 39 | #define xfs_ail_check(a,l) |
40 | #endif /* DEBUG */ | 40 | #endif /* DEBUG */ |
41 | 41 | ||
42 | 42 | ||
@@ -563,7 +563,7 @@ xfs_ail_insert( | |||
563 | next_lip->li_ail.ail_forw = lip; | 563 | next_lip->li_ail.ail_forw = lip; |
564 | lip->li_ail.ail_forw->li_ail.ail_back = lip; | 564 | lip->li_ail.ail_forw->li_ail.ail_back = lip; |
565 | 565 | ||
566 | xfs_ail_check(base); | 566 | xfs_ail_check(base, lip); |
567 | return; | 567 | return; |
568 | } | 568 | } |
569 | 569 | ||
@@ -577,12 +577,12 @@ xfs_ail_delete( | |||
577 | xfs_log_item_t *lip) | 577 | xfs_log_item_t *lip) |
578 | /* ARGSUSED */ | 578 | /* ARGSUSED */ |
579 | { | 579 | { |
580 | xfs_ail_check(base, lip); | ||
580 | lip->li_ail.ail_forw->li_ail.ail_back = lip->li_ail.ail_back; | 581 | lip->li_ail.ail_forw->li_ail.ail_back = lip->li_ail.ail_back; |
581 | lip->li_ail.ail_back->li_ail.ail_forw = lip->li_ail.ail_forw; | 582 | lip->li_ail.ail_back->li_ail.ail_forw = lip->li_ail.ail_forw; |
582 | lip->li_ail.ail_forw = NULL; | 583 | lip->li_ail.ail_forw = NULL; |
583 | lip->li_ail.ail_back = NULL; | 584 | lip->li_ail.ail_back = NULL; |
584 | 585 | ||
585 | xfs_ail_check(base); | ||
586 | return lip; | 586 | return lip; |
587 | } | 587 | } |
588 | 588 | ||
@@ -626,13 +626,13 @@ xfs_ail_next( | |||
626 | */ | 626 | */ |
627 | STATIC void | 627 | STATIC void |
628 | xfs_ail_check( | 628 | xfs_ail_check( |
629 | xfs_ail_entry_t *base) | 629 | xfs_ail_entry_t *base, |
630 | xfs_log_item_t *lip) | ||
630 | { | 631 | { |
631 | xfs_log_item_t *lip; | ||
632 | xfs_log_item_t *prev_lip; | 632 | xfs_log_item_t *prev_lip; |
633 | 633 | ||
634 | lip = base->ail_forw; | 634 | prev_lip = base->ail_forw; |
635 | if (lip == (xfs_log_item_t*)base) { | 635 | if (prev_lip == (xfs_log_item_t*)base) { |
636 | /* | 636 | /* |
637 | * Make sure the pointers are correct when the list | 637 | * Make sure the pointers are correct when the list |
638 | * is empty. | 638 | * is empty. |
@@ -642,9 +642,27 @@ xfs_ail_check( | |||
642 | } | 642 | } |
643 | 643 | ||
644 | /* | 644 | /* |
645 | * Check the next and previous entries are valid. | ||
646 | */ | ||
647 | ASSERT((lip->li_flags & XFS_LI_IN_AIL) != 0); | ||
648 | prev_lip = lip->li_ail.ail_back; | ||
649 | if (prev_lip != (xfs_log_item_t*)base) { | ||
650 | ASSERT(prev_lip->li_ail.ail_forw == lip); | ||
651 | ASSERT(XFS_LSN_CMP(prev_lip->li_lsn, lip->li_lsn) <= 0); | ||
652 | } | ||
653 | prev_lip = lip->li_ail.ail_forw; | ||
654 | if (prev_lip != (xfs_log_item_t*)base) { | ||
655 | ASSERT(prev_lip->li_ail.ail_back == lip); | ||
656 | ASSERT(XFS_LSN_CMP(prev_lip->li_lsn, lip->li_lsn) >= 0); | ||
657 | } | ||
658 | |||
659 | |||
660 | #ifdef XFS_TRANS_DEBUG | ||
661 | /* | ||
645 | * Walk the list checking forward and backward pointers, | 662 | * Walk the list checking forward and backward pointers, |
646 | * lsn ordering, and that every entry has the XFS_LI_IN_AIL | 663 | * lsn ordering, and that every entry has the XFS_LI_IN_AIL |
647 | * flag set. | 664 | * flag set. This is really expensive, so only do it when |
665 | * specifically debugging the transaction subsystem. | ||
648 | */ | 666 | */ |
649 | prev_lip = (xfs_log_item_t*)base; | 667 | prev_lip = (xfs_log_item_t*)base; |
650 | while (lip != (xfs_log_item_t*)base) { | 668 | while (lip != (xfs_log_item_t*)base) { |
@@ -659,5 +677,6 @@ xfs_ail_check( | |||
659 | } | 677 | } |
660 | ASSERT(lip == (xfs_log_item_t*)base); | 678 | ASSERT(lip == (xfs_log_item_t*)base); |
661 | ASSERT(base->ail_back == prev_lip); | 679 | ASSERT(base->ail_back == prev_lip); |
680 | #endif /* XFS_TRANS_DEBUG */ | ||
662 | } | 681 | } |
663 | #endif /* DEBUG */ | 682 | #endif /* DEBUG */ |