diff options
Diffstat (limited to 'fs/xfs/xfs_itable.c')
| -rw-r--r-- | fs/xfs/xfs_itable.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c index 62efab2f3839..b1b801e4a28e 100644 --- a/fs/xfs/xfs_itable.c +++ b/fs/xfs/xfs_itable.c | |||
| @@ -106,6 +106,7 @@ xfs_bulkstat_one_iget( | |||
| 106 | buf->bs_dmevmask = dic->di_dmevmask; | 106 | buf->bs_dmevmask = dic->di_dmevmask; |
| 107 | buf->bs_dmstate = dic->di_dmstate; | 107 | buf->bs_dmstate = dic->di_dmstate; |
| 108 | buf->bs_aextents = dic->di_anextents; | 108 | buf->bs_aextents = dic->di_anextents; |
| 109 | buf->bs_forkoff = XFS_IFORK_BOFF(ip); | ||
| 109 | 110 | ||
| 110 | switch (dic->di_format) { | 111 | switch (dic->di_format) { |
| 111 | case XFS_DINODE_FMT_DEV: | 112 | case XFS_DINODE_FMT_DEV: |
| @@ -176,6 +177,7 @@ xfs_bulkstat_one_dinode( | |||
| 176 | buf->bs_dmevmask = be32_to_cpu(dic->di_dmevmask); | 177 | buf->bs_dmevmask = be32_to_cpu(dic->di_dmevmask); |
| 177 | buf->bs_dmstate = be16_to_cpu(dic->di_dmstate); | 178 | buf->bs_dmstate = be16_to_cpu(dic->di_dmstate); |
| 178 | buf->bs_aextents = be16_to_cpu(dic->di_anextents); | 179 | buf->bs_aextents = be16_to_cpu(dic->di_anextents); |
| 180 | buf->bs_forkoff = XFS_DFORK_BOFF(dic); | ||
| 179 | 181 | ||
| 180 | switch (dic->di_format) { | 182 | switch (dic->di_format) { |
| 181 | case XFS_DINODE_FMT_DEV: | 183 | case XFS_DINODE_FMT_DEV: |
| @@ -408,8 +410,10 @@ xfs_bulkstat( | |||
| 408 | (XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_inodelog); | 410 | (XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_inodelog); |
| 409 | nimask = ~(nicluster - 1); | 411 | nimask = ~(nicluster - 1); |
| 410 | nbcluster = nicluster >> mp->m_sb.sb_inopblog; | 412 | nbcluster = nicluster >> mp->m_sb.sb_inopblog; |
| 411 | irbuf = kmem_zalloc_greedy(&irbsize, PAGE_SIZE, PAGE_SIZE * 4, | 413 | irbuf = kmem_zalloc_greedy(&irbsize, PAGE_SIZE, PAGE_SIZE * 4); |
| 412 | KM_SLEEP | KM_MAYFAIL | KM_LARGE); | 414 | if (!irbuf) |
| 415 | return ENOMEM; | ||
| 416 | |||
| 413 | nirbuf = irbsize / sizeof(*irbuf); | 417 | nirbuf = irbsize / sizeof(*irbuf); |
| 414 | 418 | ||
| 415 | /* | 419 | /* |
| @@ -420,9 +424,7 @@ xfs_bulkstat( | |||
| 420 | while (XFS_BULKSTAT_UBLEFT(ubleft) && agno < mp->m_sb.sb_agcount) { | 424 | while (XFS_BULKSTAT_UBLEFT(ubleft) && agno < mp->m_sb.sb_agcount) { |
| 421 | cond_resched(); | 425 | cond_resched(); |
| 422 | bp = NULL; | 426 | bp = NULL; |
| 423 | down_read(&mp->m_peraglock); | ||
| 424 | error = xfs_ialloc_read_agi(mp, NULL, agno, &agbp); | 427 | error = xfs_ialloc_read_agi(mp, NULL, agno, &agbp); |
| 425 | up_read(&mp->m_peraglock); | ||
| 426 | if (error) { | 428 | if (error) { |
| 427 | /* | 429 | /* |
| 428 | * Skip this allocation group and go to the next one. | 430 | * Skip this allocation group and go to the next one. |
| @@ -729,7 +731,7 @@ xfs_bulkstat( | |||
| 729 | /* | 731 | /* |
| 730 | * Done, we're either out of filesystem or space to put the data. | 732 | * Done, we're either out of filesystem or space to put the data. |
| 731 | */ | 733 | */ |
| 732 | kmem_free(irbuf); | 734 | kmem_free_large(irbuf); |
| 733 | *ubcountp = ubelem; | 735 | *ubcountp = ubelem; |
| 734 | /* | 736 | /* |
| 735 | * Found some inodes, return them now and return the error next time. | 737 | * Found some inodes, return them now and return the error next time. |
| @@ -849,9 +851,7 @@ xfs_inumbers( | |||
| 849 | agbp = NULL; | 851 | agbp = NULL; |
| 850 | while (left > 0 && agno < mp->m_sb.sb_agcount) { | 852 | while (left > 0 && agno < mp->m_sb.sb_agcount) { |
| 851 | if (agbp == NULL) { | 853 | if (agbp == NULL) { |
| 852 | down_read(&mp->m_peraglock); | ||
| 853 | error = xfs_ialloc_read_agi(mp, NULL, agno, &agbp); | 854 | error = xfs_ialloc_read_agi(mp, NULL, agno, &agbp); |
| 854 | up_read(&mp->m_peraglock); | ||
| 855 | if (error) { | 855 | if (error) { |
| 856 | /* | 856 | /* |
| 857 | * If we can't read the AGI of this ag, | 857 | * If we can't read the AGI of this ag, |
