xfs: always use unwritten extents for direct I/O writes

To allow aio writes beyond i_size we need to create unwritten extents for
newly allocated blocks, similar to how we already do inside i_size.

Instead of adding another special case we now use unwritten extents
unconditionally.  This also marks the end of directly allocation data
extents in all of XFS - we now always use either delalloc or unwritten
extents.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
Christoph Hellwig 2014-02-10 10:27:43 +11:00 committed by Dave Chinner
parent 6039257378
commit d531d91d69

View file

@ -128,7 +128,6 @@ xfs_iomap_write_direct(
xfs_fsblock_t firstfsb; xfs_fsblock_t firstfsb;
xfs_extlen_t extsz, temp; xfs_extlen_t extsz, temp;
int nimaps; int nimaps;
int bmapi_flag;
int quota_flag; int quota_flag;
int rt; int rt;
xfs_trans_t *tp; xfs_trans_t *tp;
@ -200,18 +199,15 @@ xfs_iomap_write_direct(
xfs_trans_ijoin(tp, ip, 0); xfs_trans_ijoin(tp, ip, 0);
bmapi_flag = 0;
if (offset < XFS_ISIZE(ip) || extsz)
bmapi_flag |= XFS_BMAPI_PREALLOC;
/* /*
* From this point onwards we overwrite the imap pointer that the * From this point onwards we overwrite the imap pointer that the
* caller gave to us. * caller gave to us.
*/ */
xfs_bmap_init(&free_list, &firstfsb); xfs_bmap_init(&free_list, &firstfsb);
nimaps = 1; nimaps = 1;
error = xfs_bmapi_write(tp, ip, offset_fsb, count_fsb, bmapi_flag, error = xfs_bmapi_write(tp, ip, offset_fsb, count_fsb,
&firstfsb, 0, imap, &nimaps, &free_list); XFS_BMAPI_PREALLOC, &firstfsb, 0,
imap, &nimaps, &free_list);
if (error) if (error)
goto out_bmap_cancel; goto out_bmap_cancel;