|
@@ -4744,8 +4744,12 @@ xfs_bmapi(
|
|
|
* Check if writing previously allocated but
|
|
|
* unwritten extents.
|
|
|
*/
|
|
|
- if (wr && mval->br_state == XFS_EXT_UNWRITTEN &&
|
|
|
- ((flags & (XFS_BMAPI_PREALLOC|XFS_BMAPI_DELAY)) == 0)) {
|
|
|
+ if (wr &&
|
|
|
+ ((mval->br_state == XFS_EXT_UNWRITTEN &&
|
|
|
+ ((flags & (XFS_BMAPI_PREALLOC|XFS_BMAPI_DELAY)) == 0)) ||
|
|
|
+ (mval->br_state == XFS_EXT_NORM &&
|
|
|
+ ((flags & (XFS_BMAPI_PREALLOC|XFS_BMAPI_CONVERT)) ==
|
|
|
+ (XFS_BMAPI_PREALLOC|XFS_BMAPI_CONVERT))))) {
|
|
|
/*
|
|
|
* Modify (by adding) the state flag, if writing.
|
|
|
*/
|
|
@@ -4757,7 +4761,9 @@ xfs_bmapi(
|
|
|
*firstblock;
|
|
|
cur->bc_private.b.flist = flist;
|
|
|
}
|
|
|
- mval->br_state = XFS_EXT_NORM;
|
|
|
+ mval->br_state = (mval->br_state == XFS_EXT_UNWRITTEN)
|
|
|
+ ? XFS_EXT_NORM
|
|
|
+ : XFS_EXT_UNWRITTEN;
|
|
|
error = xfs_bmap_add_extent(ip, lastx, &cur, mval,
|
|
|
firstblock, flist, &tmp_logflags,
|
|
|
whichfork, (flags & XFS_BMAPI_RSVBLOCKS));
|