aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_bmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/xfs/xfs_bmap.c')
-rw-r--r--fs/xfs/xfs_bmap.c8
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