diff options
Diffstat (limited to 'fs/xfs/xfs_bmap.c')
-rw-r--r-- | fs/xfs/xfs_bmap.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c index 98251cdc52aa..1869fb973819 100644 --- a/fs/xfs/xfs_bmap.c +++ b/fs/xfs/xfs_bmap.c | |||
@@ -2629,13 +2629,12 @@ xfs_bmap_btalloc( | |||
2629 | if (startag == NULLAGNUMBER) | 2629 | if (startag == NULLAGNUMBER) |
2630 | startag = ag = 0; | 2630 | startag = ag = 0; |
2631 | notinit = 0; | 2631 | notinit = 0; |
2632 | down_read(&mp->m_peraglock); | 2632 | pag = xfs_perag_get(mp, ag); |
2633 | while (blen < ap->alen) { | 2633 | while (blen < ap->alen) { |
2634 | pag = &mp->m_perag[ag]; | ||
2635 | if (!pag->pagf_init && | 2634 | if (!pag->pagf_init && |
2636 | (error = xfs_alloc_pagf_init(mp, args.tp, | 2635 | (error = xfs_alloc_pagf_init(mp, args.tp, |
2637 | ag, XFS_ALLOC_FLAG_TRYLOCK))) { | 2636 | ag, XFS_ALLOC_FLAG_TRYLOCK))) { |
2638 | up_read(&mp->m_peraglock); | 2637 | xfs_perag_put(pag); |
2639 | return error; | 2638 | return error; |
2640 | } | 2639 | } |
2641 | /* | 2640 | /* |
@@ -2667,13 +2666,13 @@ xfs_bmap_btalloc( | |||
2667 | break; | 2666 | break; |
2668 | 2667 | ||
2669 | error = xfs_filestream_new_ag(ap, &ag); | 2668 | error = xfs_filestream_new_ag(ap, &ag); |
2670 | if (error) { | 2669 | xfs_perag_put(pag); |
2671 | up_read(&mp->m_peraglock); | 2670 | if (error) |
2672 | return error; | 2671 | return error; |
2673 | } | ||
2674 | 2672 | ||
2675 | /* loop again to set 'blen'*/ | 2673 | /* loop again to set 'blen'*/ |
2676 | startag = NULLAGNUMBER; | 2674 | startag = NULLAGNUMBER; |
2675 | pag = xfs_perag_get(mp, ag); | ||
2677 | continue; | 2676 | continue; |
2678 | } | 2677 | } |
2679 | } | 2678 | } |
@@ -2681,8 +2680,10 @@ xfs_bmap_btalloc( | |||
2681 | ag = 0; | 2680 | ag = 0; |
2682 | if (ag == startag) | 2681 | if (ag == startag) |
2683 | break; | 2682 | break; |
2683 | xfs_perag_put(pag); | ||
2684 | pag = xfs_perag_get(mp, ag); | ||
2684 | } | 2685 | } |
2685 | up_read(&mp->m_peraglock); | 2686 | xfs_perag_put(pag); |
2686 | /* | 2687 | /* |
2687 | * Since the above loop did a BUF_TRYLOCK, it is | 2688 | * Since the above loop did a BUF_TRYLOCK, it is |
2688 | * possible that there is space for this request. | 2689 | * possible that there is space for this request. |
@@ -4470,7 +4471,7 @@ xfs_bmapi( | |||
4470 | xfs_fsblock_t abno; /* allocated block number */ | 4471 | xfs_fsblock_t abno; /* allocated block number */ |
4471 | xfs_extlen_t alen; /* allocated extent length */ | 4472 | xfs_extlen_t alen; /* allocated extent length */ |
4472 | xfs_fileoff_t aoff; /* allocated file offset */ | 4473 | xfs_fileoff_t aoff; /* allocated file offset */ |
4473 | xfs_bmalloca_t bma; /* args for xfs_bmap_alloc */ | 4474 | xfs_bmalloca_t bma = { 0 }; /* args for xfs_bmap_alloc */ |
4474 | xfs_btree_cur_t *cur; /* bmap btree cursor */ | 4475 | xfs_btree_cur_t *cur; /* bmap btree cursor */ |
4475 | xfs_fileoff_t end; /* end of mapped file region */ | 4476 | xfs_fileoff_t end; /* end of mapped file region */ |
4476 | int eof; /* we've hit the end of extents */ | 4477 | int eof; /* we've hit the end of extents */ |