On Sun, Apr 29, 2012 at 10:43:19PM +1000, Dave Chinner wrote: > > From: Dave Chinner <dchinner@xxxxxxxxxx> > > Speculative delayed allocation beyond EOF near the maximum supported > file offset can result in creating delalloc extents beyond > mp->m_maxioffset (8EB). These can never be trimmed during > xfs_free_eof_blocks() because they are beyond mp->m_maxioffset, and > that results in assert failures in xfs_fs_destroy_inode() due to > delalloc blocks still being present. xfstests 071 exposes this > problem. > > Limit speculative delalloc to mp->m_maxioffset to avoid this > problem. > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> > --- > fs/xfs/xfs_iomap.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c > index 303c03a..4a08ea3 100644 > --- a/fs/xfs/xfs_iomap.c > +++ b/fs/xfs/xfs_iomap.c > @@ -412,6 +412,15 @@ retry: > return error; > } > > + /* > + * Make sure preallocation does not create extents beyond the range we > + * actually support in this filesystem. > + */ > + if (last_fsb > XFS_B_TO_FSB(mp, mp->m_maxioffset)) > + last_fsb = XFS_B_TO_FSB(mp, mp->m_maxioffset); > + > + ASSERT(last_fsb > offset_fsb); > + Yeah, looks good. xfs_iomap_prealloc_size isn't the only one who can push us up above m_maxioffset, so this is the right place for the check. Reviewed-by: Ben Myers <bpm@xxxxxxx> _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs