Commit d52b44d07a43b723ac2fbf1bf4053031f723676c

Authored by Nathan Scott
1 parent ad4a8ac4e9

[XFS] Fix regression in transaction reserved-block accounting for direct

writes.

SGI-PV: 938145
SGI-Modid: xfs-linux:xfs-kern:23088a

Signed-off-by: Nathan Scott <nathans@sgi.com>

Showing 1 changed file with 8 additions and 9 deletions Side-by-side Diff

... ... @@ -391,9 +391,9 @@
391 391 xfs_bmbt_irec_t imap[XFS_WRITE_IMAPS], *imapp;
392 392 xfs_bmap_free_t free_list;
393 393 int aeof;
394   - xfs_filblks_t datablocks, qblocks, resblks;
  394 + xfs_filblks_t qblocks, resblks;
395 395 int committed;
396   - int numrtextents;
  396 + int resrtextents;
397 397  
398 398 /*
399 399 * Make sure that the dquots are there. This doesn't hold
400 400  
401 401  
402 402  
... ... @@ -434,14 +434,14 @@
434 434  
435 435 if (!(extsz = ip->i_d.di_extsize))
436 436 extsz = mp->m_sb.sb_rextsize;
437   - numrtextents = qblocks = (count_fsb + extsz - 1);
438   - do_div(numrtextents, mp->m_sb.sb_rextsize);
  437 + resrtextents = qblocks = (count_fsb + extsz - 1);
  438 + do_div(resrtextents, mp->m_sb.sb_rextsize);
  439 + resblks = XFS_DIOSTRAT_SPACE_RES(mp, 0);
439 440 quota_flag = XFS_QMOPT_RES_RTBLKS;
440   - datablocks = 0;
441 441 } else {
442   - datablocks = qblocks = count_fsb;
  442 + resrtextents = 0;
  443 + resblks = qblocks = XFS_DIOSTRAT_SPACE_RES(mp, count_fsb);
443 444 quota_flag = XFS_QMOPT_RES_REGBLKS;
444   - numrtextents = 0;
445 445 }
446 446  
447 447 /*
448 448  
... ... @@ -449,9 +449,8 @@
449 449 */
450 450 xfs_iunlock(ip, XFS_ILOCK_EXCL);
451 451 tp = xfs_trans_alloc(mp, XFS_TRANS_DIOSTRAT);
452   - resblks = XFS_DIOSTRAT_SPACE_RES(mp, datablocks);
453 452 error = xfs_trans_reserve(tp, resblks,
454   - XFS_WRITE_LOG_RES(mp), numrtextents,
  453 + XFS_WRITE_LOG_RES(mp), resrtextents,
455 454 XFS_TRANS_PERM_LOG_RES,
456 455 XFS_WRITE_LOG_COUNT);
457 456