Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 371045
b: refs/heads/master
c: c9bdbdc
h: refs/heads/master
i:
  371043: a9a5fe2
v: v3
  • Loading branch information
Brian Foster authored and Ben Myers committed Mar 22, 2013
1 parent 8d825af commit 6f19e04
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3c58b5f809eda8ae8d891b7a87d0a235ab0f9bf5
refs/heads/master: c9bdbdc0741d90908f492415c890b630f43f17f8
19 changes: 17 additions & 2 deletions trunk/fs/xfs/xfs_iomap.c
Original file line number Diff line number Diff line change
Expand Up @@ -389,8 +389,15 @@ xfs_iomap_prealloc_size(
if (!alloc_blocks)
goto check_writeio;

alloc_blocks = XFS_FILEOFF_MIN(MAXEXTLEN,
rounddown_pow_of_two(alloc_blocks));
/*
* MAXEXTLEN is not a power of two value but we round the prealloc down
* to the nearest power of two value after throttling. To prevent the
* round down from unconditionally reducing the maximum supported prealloc
* size, we round up first, apply appropriate throttling, round down and
* cap the value to MAXEXTLEN.
*/
alloc_blocks = XFS_FILEOFF_MIN(roundup_pow_of_two(MAXEXTLEN),
alloc_blocks);

xfs_icsb_sync_counters(mp, XFS_ICSB_LAZY_COUNT);
freesp = mp->m_sb.sb_fdblocks;
Expand All @@ -407,6 +414,14 @@ xfs_iomap_prealloc_size(
}
if (shift)
alloc_blocks >>= shift;
/*
* rounddown_pow_of_two() returns an undefined result if we pass in
* alloc_blocks = 0.
*/
if (alloc_blocks)
alloc_blocks = rounddown_pow_of_two(alloc_blocks);
if (alloc_blocks > MAXEXTLEN)
alloc_blocks = MAXEXTLEN;

/*
* If we are still trying to allocate more space than is
Expand Down

0 comments on commit 6f19e04

Please sign in to comment.