xfs: fix log reservation overflows when allocating large rt extents
authorDarrick J. Wong <darrick.wong@oracle.com>
Wed, 11 Dec 2019 21:19:07 +0000 (13:19 -0800)
committerDarrick J. Wong <darrick.wong@oracle.com>
Tue, 17 Dec 2019 19:19:28 +0000 (11:19 -0800)
commitb1de6fc7520fe12949c070af0e8c0e4044cd3420
treecc0344349ff164c80715efecd102d281bc255b91
parentd0c2204135a0cdbc607c94c481cf1ccb2f659aa7
xfs: fix log reservation overflows when allocating large rt extents

Omar Sandoval reported that a 4G fallocate on the realtime device causes
filesystem shutdowns due to a log reservation overflow that happens when
we log the rtbitmap updates.  Factor rtbitmap/rtsummary updates into the
the tr_write and tr_itruncate log reservation calculation.

"The following reproducer results in a transaction log overrun warning
for me:

    mkfs.xfs -f -r rtdev=/dev/vdc -d rtinherit=1 -m reflink=0 /dev/vdb
    mount -o rtdev=/dev/vdc /dev/vdb /mnt
    fallocate -l 4G /mnt/foo

Reported-by: Omar Sandoval <osandov@osandov.com>
Tested-by: Omar Sandoval <osandov@osandov.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
fs/xfs/libxfs/xfs_trans_resv.c