summaryrefslogtreecommitdiffstats
path: root/fs/xfs/libxfs/xfs_refcount.c
diff options
context:
space:
mode:
authorDarrick J. Wong <darrick.wong@oracle.com>2016-10-03 18:11:19 +0200
committerDarrick J. Wong <darrick.wong@oracle.com>2016-10-03 18:11:19 +0200
commitf310bd2ecd37b17bf0042c9d1595329057970eb6 (patch)
tree50b6ae5b0f6465de86ddd81b1b95a1d7f12f15fa /fs/xfs/libxfs/xfs_refcount.c
parentxfs: add refcount btree support to growfs (diff)
downloadlinux-f310bd2ecd37b17bf0042c9d1595329057970eb6.tar.xz
linux-f310bd2ecd37b17bf0042c9d1595329057970eb6.zip
xfs: account for the refcount btree in the alloc/free log reservation
Every time we allocate or free a data extent, we might need to split the refcount btree. Reserve some blocks in the transaction to handle this possibility. Even though the deferred refcount code can roll a transaction to avoid overloading the transaction, we can still exceed the reservation. Certain pathological workloads (1k blocks, no cowextsize hint, random directio writes), cause a perfect storm wherein a refcount adjustment of a large range of blocks causes full tree splits in two separate extents in two separate refcount tree blocks; allocating new refcount tree blocks causes rmap btree splits; and all the allocation activity causes the freespace btrees to split, blowing the reservation. (Reproduced by generic/167 over NFS atop XFS) Signed-off-by: Christoph Hellwig <hch@lst.de> [darrick.wong@oracle.com: add commit message] Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Diffstat (limited to 'fs/xfs/libxfs/xfs_refcount.c')
0 files changed, 0 insertions, 0 deletions