diff options
Diffstat (limited to 'fs/xfs/xfs_bmap.c')
-rw-r--r-- | fs/xfs/xfs_bmap.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c index 98251cdc52aa..a9b95d9cf2ad 100644 --- a/fs/xfs/xfs_bmap.c +++ b/fs/xfs/xfs_bmap.c | |||
@@ -2630,11 +2630,12 @@ xfs_bmap_btalloc( | |||
2630 | startag = ag = 0; | 2630 | startag = ag = 0; |
2631 | notinit = 0; | 2631 | notinit = 0; |
2632 | down_read(&mp->m_peraglock); | 2632 | down_read(&mp->m_peraglock); |
2633 | pag = xfs_perag_get(mp, ag); | ||
2633 | while (blen < ap->alen) { | 2634 | while (blen < ap->alen) { |
2634 | pag = &mp->m_perag[ag]; | ||
2635 | if (!pag->pagf_init && | 2635 | if (!pag->pagf_init && |
2636 | (error = xfs_alloc_pagf_init(mp, args.tp, | 2636 | (error = xfs_alloc_pagf_init(mp, args.tp, |
2637 | ag, XFS_ALLOC_FLAG_TRYLOCK))) { | 2637 | ag, XFS_ALLOC_FLAG_TRYLOCK))) { |
2638 | xfs_perag_put(pag); | ||
2638 | up_read(&mp->m_peraglock); | 2639 | up_read(&mp->m_peraglock); |
2639 | return error; | 2640 | return error; |
2640 | } | 2641 | } |
@@ -2667,6 +2668,7 @@ xfs_bmap_btalloc( | |||
2667 | break; | 2668 | break; |
2668 | 2669 | ||
2669 | error = xfs_filestream_new_ag(ap, &ag); | 2670 | error = xfs_filestream_new_ag(ap, &ag); |
2671 | xfs_perag_put(pag); | ||
2670 | if (error) { | 2672 | if (error) { |
2671 | up_read(&mp->m_peraglock); | 2673 | up_read(&mp->m_peraglock); |
2672 | return error; | 2674 | return error; |
@@ -2674,6 +2676,7 @@ xfs_bmap_btalloc( | |||
2674 | 2676 | ||
2675 | /* loop again to set 'blen'*/ | 2677 | /* loop again to set 'blen'*/ |
2676 | startag = NULLAGNUMBER; | 2678 | startag = NULLAGNUMBER; |
2679 | pag = xfs_perag_get(mp, ag); | ||
2677 | continue; | 2680 | continue; |
2678 | } | 2681 | } |
2679 | } | 2682 | } |
@@ -2681,7 +2684,10 @@ xfs_bmap_btalloc( | |||
2681 | ag = 0; | 2684 | ag = 0; |
2682 | if (ag == startag) | 2685 | if (ag == startag) |
2683 | break; | 2686 | break; |
2687 | xfs_perag_put(pag); | ||
2688 | pag = xfs_perag_get(mp, ag); | ||
2684 | } | 2689 | } |
2690 | xfs_perag_put(pag); | ||
2685 | up_read(&mp->m_peraglock); | 2691 | up_read(&mp->m_peraglock); |
2686 | /* | 2692 | /* |
2687 | * Since the above loop did a BUF_TRYLOCK, it is | 2693 | * Since the above loop did a BUF_TRYLOCK, it is |