From: Sasha Levin Date: Wed, 7 Nov 2018 18:11:27 +0000 (-0500) Subject: queue ue xfs-truncate-transaction-does-not-modify-the-inobt.patch for 4.9 and 4.14 X-Git-Tag: v3.18.125~15 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=29821e50cac20605a80a0626b24eb412cf92cc83;p=thirdparty%2Fkernel%2Fstable-queue.git queue ue xfs-truncate-transaction-does-not-modify-the-inobt.patch for 4.9 and 4.14 Signed-off-by: Sasha Levin --- diff --git a/queue-4.14/series b/queue-4.14/series index ab18cead581..e68aeae31eb 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -7,3 +7,4 @@ revert-arm-tegra-fix-ulpi-regression-on-tegra20.patch clk-tegra-add-quirk-for-getting-cdev1-2-clocks-on-te.patch fsnotify-fix-ignore-mask-logic-in-fsnotify.patch gpio-mxs-get-rid-of-external-api-call.patch +xfs-truncate-transaction-does-not-modify-the-inobt.patch diff --git a/queue-4.14/xfs-truncate-transaction-does-not-modify-the-inobt.patch b/queue-4.14/xfs-truncate-transaction-does-not-modify-the-inobt.patch new file mode 100644 index 00000000000..bddb39e6dc5 --- /dev/null +++ b/queue-4.14/xfs-truncate-transaction-does-not-modify-the-inobt.patch @@ -0,0 +1,74 @@ +From b0d30d72974d885786141c6830ef1c73843430cd Mon Sep 17 00:00:00 2001 +From: Brian Foster +Date: Sat, 3 Nov 2018 19:15:24 +0200 +Subject: xfs: truncate transaction does not modify the inobt + +[ Upstream commit a606ebdb859e78beb757dfefa08001df366e2ef5 ] + +The truncate transaction does not ever modify the inode btree, but +includes an associated log reservation. Update +xfs_calc_itruncate_reservation() to remove the reservation +associated with inobt updates. + +[Amir: This commit was merged for kernel v4.16 and a twin commit was + merged for xfsprogs v4.16. As a result, a small xfs filesystem + formatted with features -m rmapbt=1,reflink=1 using mkfs.xfs + version >= v4.16 cannot be mounted with kernel < v4.16. + + For example, xfstests generic/17{1,2,3} format a small fs and + when trying to mount it, they fail with an assert on this very + demonic line: + + XFS (vdc): Log size 3075 blocks too small, minimum size is 3717 blocks + XFS (vdc): AAIEEE! Log failed size checks. Abort! + XFS: Assertion failed: 0, file: src/linux/fs/xfs/xfs_log.c, line: 666 + + The simple solution for stable kernels is to apply this patch, + because mkfs.xfs v4.16 is already in the wild, so we have to + assume that xfs filesystems with a "too small" log exist. + Regardless, xfsprogs maintainers should also consider reverting + the twin patch to stop creating those filesystems for the sake + of users with unpatched kernels.] + +Signed-off-by: Brian Foster +Reviewed-by: Dave Chinner +Reviewed-by: Darrick J. Wong +Signed-off-by: Darrick J. Wong +Cc: # v4.9+ +Signed-off-by: Amir Goldstein +Reviewed-by: Darrick J . Wong +Signed-off-by: Sasha Levin +--- + fs/xfs/libxfs/xfs_trans_resv.c | 9 +-------- + 1 file changed, 1 insertion(+), 8 deletions(-) + +diff --git a/fs/xfs/libxfs/xfs_trans_resv.c b/fs/xfs/libxfs/xfs_trans_resv.c +index 6bd916bd35e2..48eff18c5496 100644 +--- a/fs/xfs/libxfs/xfs_trans_resv.c ++++ b/fs/xfs/libxfs/xfs_trans_resv.c +@@ -232,8 +232,6 @@ xfs_calc_write_reservation( + * the super block to reflect the freed blocks: sector size + * worst case split in allocation btrees per extent assuming 4 extents: + * 4 exts * 2 trees * (2 * max depth - 1) * block size +- * the inode btree: max depth * blocksize +- * the allocation btrees: 2 trees * (max depth - 1) * block size + */ + STATIC uint + xfs_calc_itruncate_reservation( +@@ -245,12 +243,7 @@ xfs_calc_itruncate_reservation( + XFS_FSB_TO_B(mp, 1))), + (xfs_calc_buf_res(9, mp->m_sb.sb_sectsize) + + xfs_calc_buf_res(xfs_allocfree_log_count(mp, 4), +- XFS_FSB_TO_B(mp, 1)) + +- xfs_calc_buf_res(5, 0) + +- xfs_calc_buf_res(xfs_allocfree_log_count(mp, 1), +- XFS_FSB_TO_B(mp, 1)) + +- xfs_calc_buf_res(2 + mp->m_ialloc_blks + +- mp->m_in_maxlevels, 0))); ++ XFS_FSB_TO_B(mp, 1)))); + } + + /* +-- +2.17.1 + diff --git a/queue-4.9/series b/queue-4.9/series index 3241ecdc4d6..cda481602fd 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -154,3 +154,4 @@ revert-x86-mm-expand-static-page-table-for-fixmap-sp.patch crypto-shash-fix-a-sleep-in-atomic-bug-in-shash_setk.patch ahci-don-t-ignore-result-code-of-ahci_reset_controll.patch gpio-mxs-get-rid-of-external-api-call.patch +xfs-truncate-transaction-does-not-modify-the-inobt.patch diff --git a/queue-4.9/xfs-truncate-transaction-does-not-modify-the-inobt.patch b/queue-4.9/xfs-truncate-transaction-does-not-modify-the-inobt.patch new file mode 100644 index 00000000000..f1b0cd46d20 --- /dev/null +++ b/queue-4.9/xfs-truncate-transaction-does-not-modify-the-inobt.patch @@ -0,0 +1,74 @@ +From aa247ef6fa86a4793a0eb13bd29139fdfe684075 Mon Sep 17 00:00:00 2001 +From: Brian Foster +Date: Sat, 3 Nov 2018 19:15:24 +0200 +Subject: xfs: truncate transaction does not modify the inobt + +[ Upstream commit a606ebdb859e78beb757dfefa08001df366e2ef5 ] + +The truncate transaction does not ever modify the inode btree, but +includes an associated log reservation. Update +xfs_calc_itruncate_reservation() to remove the reservation +associated with inobt updates. + +[Amir: This commit was merged for kernel v4.16 and a twin commit was + merged for xfsprogs v4.16. As a result, a small xfs filesystem + formatted with features -m rmapbt=1,reflink=1 using mkfs.xfs + version >= v4.16 cannot be mounted with kernel < v4.16. + + For example, xfstests generic/17{1,2,3} format a small fs and + when trying to mount it, they fail with an assert on this very + demonic line: + + XFS (vdc): Log size 3075 blocks too small, minimum size is 3717 blocks + XFS (vdc): AAIEEE! Log failed size checks. Abort! + XFS: Assertion failed: 0, file: src/linux/fs/xfs/xfs_log.c, line: 666 + + The simple solution for stable kernels is to apply this patch, + because mkfs.xfs v4.16 is already in the wild, so we have to + assume that xfs filesystems with a "too small" log exist. + Regardless, xfsprogs maintainers should also consider reverting + the twin patch to stop creating those filesystems for the sake + of users with unpatched kernels.] + +Signed-off-by: Brian Foster +Reviewed-by: Dave Chinner +Reviewed-by: Darrick J. Wong +Signed-off-by: Darrick J. Wong +Cc: # v4.9+ +Signed-off-by: Amir Goldstein +Reviewed-by: Darrick J . Wong +Signed-off-by: Sasha Levin +--- + fs/xfs/libxfs/xfs_trans_resv.c | 9 +-------- + 1 file changed, 1 insertion(+), 8 deletions(-) + +diff --git a/fs/xfs/libxfs/xfs_trans_resv.c b/fs/xfs/libxfs/xfs_trans_resv.c +index b456cca1bfb2..c0ecdec8e0a9 100644 +--- a/fs/xfs/libxfs/xfs_trans_resv.c ++++ b/fs/xfs/libxfs/xfs_trans_resv.c +@@ -232,8 +232,6 @@ xfs_calc_write_reservation( + * the super block to reflect the freed blocks: sector size + * worst case split in allocation btrees per extent assuming 4 extents: + * 4 exts * 2 trees * (2 * max depth - 1) * block size +- * the inode btree: max depth * blocksize +- * the allocation btrees: 2 trees * (max depth - 1) * block size + */ + STATIC uint + xfs_calc_itruncate_reservation( +@@ -245,12 +243,7 @@ xfs_calc_itruncate_reservation( + XFS_FSB_TO_B(mp, 1))), + (xfs_calc_buf_res(9, mp->m_sb.sb_sectsize) + + xfs_calc_buf_res(xfs_allocfree_log_count(mp, 4), +- XFS_FSB_TO_B(mp, 1)) + +- xfs_calc_buf_res(5, 0) + +- xfs_calc_buf_res(xfs_allocfree_log_count(mp, 1), +- XFS_FSB_TO_B(mp, 1)) + +- xfs_calc_buf_res(2 + mp->m_ialloc_blks + +- mp->m_in_maxlevels, 0))); ++ XFS_FSB_TO_B(mp, 1)))); + } + + /* +-- +2.17.1 +