From patchwork Fri Nov 23 17:54:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 10696255 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6F0501750 for ; Fri, 23 Nov 2018 17:54:54 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5D5D421BED for ; Fri, 23 Nov 2018 17:54:54 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 516782A023; Fri, 23 Nov 2018 17:54:54 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7018329F45 for ; Fri, 23 Nov 2018 17:54:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2395290AbeKXEkH (ORCPT ); Fri, 23 Nov 2018 23:40:07 -0500 Received: from userp2120.oracle.com ([156.151.31.85]:40588 "EHLO userp2120.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391644AbeKXEkH (ORCPT ); Fri, 23 Nov 2018 23:40:07 -0500 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.22/8.16.0.22) with SMTP id wANHsOB8078833; Fri, 23 Nov 2018 17:54:49 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=date : from : to : cc : subject : message-id : mime-version : content-type; s=corp-2018-07-02; bh=SrbODkFUW/j6qPm9ZHk212bk/2eF35PlwFMDxsekW40=; b=bKTM3cAvt4Vc+WXQMaJO1IHkfxDHssWi9aCLKvo1D1RSJmwupDeFY7dQCssra6o0G9bZ YxLIwo/m3AtnP9d1gw9W9BSBnFem8y2PXy6ypaQ2Q1sIo/9JJ5xWcygtQEnDN47cC1u9 zC3gwvyGp1SVVOa5giG2knHUmhzWCS1jGSQwSxGedF+Zjz+2drw+MGO828yLQ6MQ0+09 EbO8OtEedwuwsNSnMCwbZYCEixy+xRP+vsJ/mJvBAWALZJUd46nhMsLzS10uBZxZnYCe Dv/16OGob1ItfC8H6RcHQoAU8INIRH4tU1mwclcfVL9FcOoRe86kCZgh+eZRh/lUUaFE iw== Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233]) by userp2120.oracle.com with ESMTP id 2ntbmr3qb7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 23 Nov 2018 17:54:49 +0000 Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserv0021.oracle.com (8.14.4/8.14.4) with ESMTP id wANHsm1N019681 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 23 Nov 2018 17:54:48 GMT Received: from abhmp0007.oracle.com (abhmp0007.oracle.com [141.146.116.13]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id wANHslRV012147; Fri, 23 Nov 2018 17:54:48 GMT Received: from localhost (/10.159.231.177) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 23 Nov 2018 09:54:47 -0800 Date: Fri, 23 Nov 2018 09:54:48 -0800 From: "Darrick J. Wong" To: Dave Chinner Cc: xfs Subject: [PATCH] xfs: reserve blocks for rmapbt changes in xfs_reflink_end_cow Message-ID: <20181123175448.GX6792@magnolia> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.9.4 (2018-02-28) X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=9086 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1811230150 Sender: linux-xfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-xfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Darrick J. Wong In xfs_reflink_end_cow, we have to swap written extents from the CoW fork into the data fork, which can require extensive rmapbt updates. The transaction block reservation calculation forgot that part of the calculation, which lead to a shutdown during an end_cow transaction roll during fsx exercises: XFS: Assertion failed: tp->t_blk_res >= tp->t_blk_res_used, file: fs/xfs/xfs_trans.c, line: 116 Call Trace: xfs_trans_dup+0x211/0x250 [xfs] xfs_trans_roll+0x6d/0x180 [xfs] xfs_defer_trans_roll+0x10c/0x3b0 [xfs] xfs_defer_finish_noroll+0xdf/0x740 [xfs] xfs_defer_finish+0x13/0x70 [xfs] xfs_reflink_end_cow+0x2c6/0x680 [xfs] xfs_dio_write_end_io+0x115/0x220 [xfs] iomap_dio_complete+0x3f/0x130 iomap_dio_rw+0x3c3/0x420 xfs_file_dio_aio_write+0x132/0x3c0 [xfs] xfs_file_write_iter+0x8b/0xc0 [xfs] __vfs_write+0x193/0x1f0 vfs_write+0xba/0x1c0 ksys_write+0x52/0xc0 do_syscall_64+0x50/0x160 entry_SYSCALL_64_after_hwframe+0x49/0xbe Signed-off-by: Darrick J. Wong --- fs/xfs/xfs_reflink.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 322a852ce284..c706d7791479 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -663,9 +663,14 @@ xfs_reflink_end_cow( ASSERT(0); goto out; } - resblks = XFS_NEXTENTADD_SPACE_RES(ip->i_mount, - (unsigned int)(end_fsb - offset_fsb), - XFS_DATA_FORK); + if (xfs_sb_version_hasrmapbt(&ip->i_mount->m_sb)) + resblks = XFS_SWAP_RMAP_SPACE_RES(ip->i_mount, + (unsigned int)(end_fsb - offset_fsb), + XFS_DATA_FORK); + else + resblks = XFS_NEXTENTADD_SPACE_RES(ip->i_mount, + (unsigned int)(end_fsb - offset_fsb), + XFS_DATA_FORK); error = xfs_trans_alloc(ip->i_mount, &M_RES(ip->i_mount)->tr_write, resblks, 0, XFS_TRANS_RESERVE | XFS_TRANS_NOFS, &tp); if (error)