|
@@ -1457,6 +1457,13 @@ xfs_create(
|
|
|
error = xfs_trans_reserve(tp, resblks, log_res, 0,
|
|
|
XFS_TRANS_PERM_LOG_RES, log_count);
|
|
|
if (error == ENOSPC) {
|
|
|
+ /* flush outstanding delalloc blocks and retry */
|
|
|
+ xfs_flush_inodes(dp);
|
|
|
+ error = xfs_trans_reserve(tp, resblks, XFS_CREATE_LOG_RES(mp), 0,
|
|
|
+ XFS_TRANS_PERM_LOG_RES, XFS_CREATE_LOG_COUNT);
|
|
|
+ }
|
|
|
+ if (error == ENOSPC) {
|
|
|
+ /* No space at all so try a "no-allocation" reservation */
|
|
|
resblks = 0;
|
|
|
error = xfs_trans_reserve(tp, 0, log_res, 0,
|
|
|
XFS_TRANS_PERM_LOG_RES, log_count);
|