diff options
-rw-r--r-- | fs/xfs/xfs_trans_ail.c | 27 |
1 files changed, 7 insertions, 20 deletions
diff --git a/fs/xfs/xfs_trans_ail.c b/fs/xfs/xfs_trans_ail.c index dc9069568ff..645928cab42 100644 --- a/fs/xfs/xfs_trans_ail.c +++ b/fs/xfs/xfs_trans_ail.c | |||
@@ -29,7 +29,7 @@ | |||
29 | #include "xfs_error.h" | 29 | #include "xfs_error.h" |
30 | 30 | ||
31 | STATIC void xfs_ail_insert(struct xfs_ail *, xfs_log_item_t *); | 31 | STATIC void xfs_ail_insert(struct xfs_ail *, xfs_log_item_t *); |
32 | STATIC xfs_log_item_t * xfs_ail_delete(struct xfs_ail *, xfs_log_item_t *); | 32 | STATIC void xfs_ail_delete(struct xfs_ail *, xfs_log_item_t *); |
33 | STATIC xfs_log_item_t * xfs_ail_min(struct xfs_ail *); | 33 | STATIC xfs_log_item_t * xfs_ail_min(struct xfs_ail *); |
34 | STATIC xfs_log_item_t * xfs_ail_next(struct xfs_ail *, xfs_log_item_t *); | 34 | STATIC xfs_log_item_t * xfs_ail_next(struct xfs_ail *, xfs_log_item_t *); |
35 | 35 | ||
@@ -468,16 +468,13 @@ xfs_trans_ail_update( | |||
468 | xfs_log_item_t *lip, | 468 | xfs_log_item_t *lip, |
469 | xfs_lsn_t lsn) __releases(ailp->xa_lock) | 469 | xfs_lsn_t lsn) __releases(ailp->xa_lock) |
470 | { | 470 | { |
471 | xfs_log_item_t *dlip = NULL; | ||
472 | xfs_log_item_t *mlip; /* ptr to minimum lip */ | 471 | xfs_log_item_t *mlip; /* ptr to minimum lip */ |
473 | xfs_lsn_t tail_lsn; | 472 | xfs_lsn_t tail_lsn; |
474 | 473 | ||
475 | mlip = xfs_ail_min(ailp); | 474 | mlip = xfs_ail_min(ailp); |
476 | 475 | ||
477 | if (lip->li_flags & XFS_LI_IN_AIL) { | 476 | if (lip->li_flags & XFS_LI_IN_AIL) { |
478 | dlip = xfs_ail_delete(ailp, lip); | 477 | xfs_ail_delete(ailp, lip); |
479 | ASSERT(dlip == lip); | ||
480 | xfs_trans_ail_cursor_clear(ailp, dlip); | ||
481 | } else { | 478 | } else { |
482 | lip->li_flags |= XFS_LI_IN_AIL; | 479 | lip->li_flags |= XFS_LI_IN_AIL; |
483 | } | 480 | } |
@@ -485,7 +482,7 @@ xfs_trans_ail_update( | |||
485 | lip->li_lsn = lsn; | 482 | lip->li_lsn = lsn; |
486 | xfs_ail_insert(ailp, lip); | 483 | xfs_ail_insert(ailp, lip); |
487 | 484 | ||
488 | if (mlip == dlip) { | 485 | if (mlip == lip) { |
489 | mlip = xfs_ail_min(ailp); | 486 | mlip = xfs_ail_min(ailp); |
490 | /* | 487 | /* |
491 | * It is not safe to access mlip after the AIL lock is | 488 | * It is not safe to access mlip after the AIL lock is |
@@ -524,21 +521,18 @@ xfs_trans_ail_delete( | |||
524 | struct xfs_ail *ailp, | 521 | struct xfs_ail *ailp, |
525 | xfs_log_item_t *lip) __releases(ailp->xa_lock) | 522 | xfs_log_item_t *lip) __releases(ailp->xa_lock) |
526 | { | 523 | { |
527 | xfs_log_item_t *dlip; | ||
528 | xfs_log_item_t *mlip; | 524 | xfs_log_item_t *mlip; |
529 | xfs_lsn_t tail_lsn; | 525 | xfs_lsn_t tail_lsn; |
530 | 526 | ||
531 | if (lip->li_flags & XFS_LI_IN_AIL) { | 527 | if (lip->li_flags & XFS_LI_IN_AIL) { |
532 | mlip = xfs_ail_min(ailp); | 528 | mlip = xfs_ail_min(ailp); |
533 | dlip = xfs_ail_delete(ailp, lip); | 529 | xfs_ail_delete(ailp, lip); |
534 | ASSERT(dlip == lip); | ||
535 | xfs_trans_ail_cursor_clear(ailp, dlip); | ||
536 | 530 | ||
537 | 531 | ||
538 | lip->li_flags &= ~XFS_LI_IN_AIL; | 532 | lip->li_flags &= ~XFS_LI_IN_AIL; |
539 | lip->li_lsn = 0; | 533 | lip->li_lsn = 0; |
540 | 534 | ||
541 | if (mlip == dlip) { | 535 | if (mlip == lip) { |
542 | mlip = xfs_ail_min(ailp); | 536 | mlip = xfs_ail_min(ailp); |
543 | /* | 537 | /* |
544 | * It is not safe to access mlip after the AIL lock | 538 | * It is not safe to access mlip after the AIL lock |
@@ -632,7 +626,6 @@ STATIC void | |||
632 | xfs_ail_insert( | 626 | xfs_ail_insert( |
633 | struct xfs_ail *ailp, | 627 | struct xfs_ail *ailp, |
634 | xfs_log_item_t *lip) | 628 | xfs_log_item_t *lip) |
635 | /* ARGSUSED */ | ||
636 | { | 629 | { |
637 | xfs_log_item_t *next_lip; | 630 | xfs_log_item_t *next_lip; |
638 | 631 | ||
@@ -661,18 +654,14 @@ xfs_ail_insert( | |||
661 | /* | 654 | /* |
662 | * Delete the given item from the AIL. Return a pointer to the item. | 655 | * Delete the given item from the AIL. Return a pointer to the item. |
663 | */ | 656 | */ |
664 | /*ARGSUSED*/ | 657 | STATIC void |
665 | STATIC xfs_log_item_t * | ||
666 | xfs_ail_delete( | 658 | xfs_ail_delete( |
667 | struct xfs_ail *ailp, | 659 | struct xfs_ail *ailp, |
668 | xfs_log_item_t *lip) | 660 | xfs_log_item_t *lip) |
669 | /* ARGSUSED */ | ||
670 | { | 661 | { |
671 | xfs_ail_check(ailp, lip); | 662 | xfs_ail_check(ailp, lip); |
672 | |||
673 | list_del(&lip->li_ail); | 663 | list_del(&lip->li_ail); |
674 | 664 | xfs_trans_ail_cursor_clear(ailp, lip); | |
675 | return lip; | ||
676 | } | 665 | } |
677 | 666 | ||
678 | /* | 667 | /* |
@@ -682,7 +671,6 @@ xfs_ail_delete( | |||
682 | STATIC xfs_log_item_t * | 671 | STATIC xfs_log_item_t * |
683 | xfs_ail_min( | 672 | xfs_ail_min( |
684 | struct xfs_ail *ailp) | 673 | struct xfs_ail *ailp) |
685 | /* ARGSUSED */ | ||
686 | { | 674 | { |
687 | if (list_empty(&ailp->xa_ail)) | 675 | if (list_empty(&ailp->xa_ail)) |
688 | return NULL; | 676 | return NULL; |
@@ -699,7 +687,6 @@ STATIC xfs_log_item_t * | |||
699 | xfs_ail_next( | 687 | xfs_ail_next( |
700 | struct xfs_ail *ailp, | 688 | struct xfs_ail *ailp, |
701 | xfs_log_item_t *lip) | 689 | xfs_log_item_t *lip) |
702 | /* ARGSUSED */ | ||
703 | { | 690 | { |
704 | if (lip->li_ail.next == &ailp->xa_ail) | 691 | if (lip->li_ail.next == &ailp->xa_ail) |
705 | return NULL; | 692 | return NULL; |