diff options
-rw-r--r-- | fs/xfs/xfs_bmap.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c index 85e7e327bcd8..e74cfaf52248 100644 --- a/fs/xfs/xfs_bmap.c +++ b/fs/xfs/xfs_bmap.c | |||
@@ -5621,8 +5621,20 @@ xfs_getbmap( | |||
5621 | XFS_FSB_TO_BB(mp, map[i].br_blockcount); | 5621 | XFS_FSB_TO_BB(mp, map[i].br_blockcount); |
5622 | out[cur_ext].bmv_unused1 = 0; | 5622 | out[cur_ext].bmv_unused1 = 0; |
5623 | out[cur_ext].bmv_unused2 = 0; | 5623 | out[cur_ext].bmv_unused2 = 0; |
5624 | ASSERT(((iflags & BMV_IF_DELALLOC) != 0) || | 5624 | |
5625 | (map[i].br_startblock != DELAYSTARTBLOCK)); | 5625 | /* |
5626 | * delayed allocation extents that start beyond EOF can | ||
5627 | * occur due to speculative EOF allocation when the | ||
5628 | * delalloc extent is larger than the largest freespace | ||
5629 | * extent at conversion time. These extents cannot be | ||
5630 | * converted by data writeback, so can exist here even | ||
5631 | * if we are not supposed to be finding delalloc | ||
5632 | * extents. | ||
5633 | */ | ||
5634 | if (map[i].br_startblock == DELAYSTARTBLOCK && | ||
5635 | map[i].br_startoff <= XFS_B_TO_FSB(mp, XFS_ISIZE(ip))) | ||
5636 | ASSERT((iflags & BMV_IF_DELALLOC) != 0); | ||
5637 | |||
5626 | if (map[i].br_startblock == HOLESTARTBLOCK && | 5638 | if (map[i].br_startblock == HOLESTARTBLOCK && |
5627 | whichfork == XFS_ATTR_FORK) { | 5639 | whichfork == XFS_ATTR_FORK) { |
5628 | /* came to the end of attribute fork */ | 5640 | /* came to the end of attribute fork */ |