From patchwork Fri Mar 31 04:18:00 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Calvin Owens X-Patchwork-Id: 9655471 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id E0E6C602BD for ; Fri, 31 Mar 2017 04:18:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D11932862D for ; Fri, 31 Mar 2017 04:18:38 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C4EBA28681; Fri, 31 Mar 2017 04:18:38 +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=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=unavailable 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 5DC122862D for ; Fri, 31 Mar 2017 04:18:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751422AbdCaESZ (ORCPT ); Fri, 31 Mar 2017 00:18:25 -0400 Received: from mx0a-00082601.pphosted.com ([67.231.145.42]:37669 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750763AbdCaESV (ORCPT ); Fri, 31 Mar 2017 00:18:21 -0400 Received: from pps.filterd (m0044012.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.20/8.16.0.20) with SMTP id v2V4F0B7027828; Thu, 30 Mar 2017 21:18:13 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=date : from : to : cc : subject : message-id : references : mime-version : content-type : in-reply-to; s=facebook; bh=AUYiD7R6vguXJ6I9cfMVz8t573EanlLuU79bm07MezE=; b=pnprrb7IcGyRcSfUnNiEIpxXL/+6Zd5ZeQAaCG9GoIMHRdQtW9mJkdIHWQPAwXI1nHsp REyP8VxXzWFhkHmuyYZDf/07d8KH3iZiIyiriyNK75h4v/aTelnThluImN0XlbOH0Xf9 GUMgW4KkZFxfALd+Hw5Ss2rOjrYB1WVEwFs= Received: from maileast.thefacebook.com ([199.201.65.23]) by mx0a-00082601.pphosted.com with ESMTP id 29hfcwg2fu-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 30 Mar 2017 21:18:13 -0700 Received: from NAM02-CY1-obe.outbound.protection.outlook.com (192.168.183.28) by o365-in.thefacebook.com (192.168.177.24) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 31 Mar 2017 00:18:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.onmicrosoft.com; s=selector1-fb-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=AUYiD7R6vguXJ6I9cfMVz8t573EanlLuU79bm07MezE=; b=Xhtw6WFUwCZtxvak3FhClPgxvYbLlOZt6fmQvvAL2BUVtatKK0GtnnUeIBTD64zlv+vvvQEjCc8aBKb2Aeiy8cvMk9Mm0H0rhbu5itTZSWp7gcHioImYFMi9fJNXINxoVJMlNHVJIfpiUdj2u1u0cgM661AWmfOJOeKJhaIiVFM= Authentication-Results: redhat.com; dkim=none (message not signed) header.d=none; redhat.com; dmarc=none action=none header.from=fb.com; Received: from Haydn (2620:10d:c090:200::c:a991) by CY4PR15MB1221.namprd15.prod.outlook.com (10.172.177.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.991.14; Fri, 31 Mar 2017 04:18:08 +0000 Date: Thu, 30 Mar 2017 21:18:00 -0700 From: Calvin Owens To: Brian Foster CC: "Darrick J. Wong" , , , Christoph Hellwig , Dave Chinner , , Subject: [PATCH v3] xfs: Honor FALLOC_FL_KEEP_SIZE when punching ends of files Message-ID: <20170331041800.ugi4wgmbqx44mbwa@Haydn> References: <22a11e65fd5037498a78de61f3ed4dae466ad854.1489791330.git.calvinowens@fb.com> <19504ff40a16efff2e51d85388fce5be578edbc3.1489985397.git.calvinowens@fb.com> <20170321113932.GA58653@bfoster.bfoster> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20170306 (1.8.0) X-Originating-IP: [2620:10d:c090:200::c:a991] X-ClientProxiedBy: MWHPR14CA0037.namprd14.prod.outlook.com (10.171.142.151) To CY4PR15MB1221.namprd15.prod.outlook.com (10.172.177.19) X-MS-Office365-Filtering-Correlation-Id: b89ad65e-c21f-44d8-dbfb-08d477ecf05e X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:CY4PR15MB1221; X-Microsoft-Exchange-Diagnostics: 1; CY4PR15MB1221; 3:wjv21Ytmk3rSg8WTVLZUIhajRI8PuCkJA1VkrXTJ/a4Va1C5Ff64t4RCDU08h3LX0WrgQF8XTdxsHKHy02zBlw5mTI+QJpfE+9RA6lMvGqsFwBSOcboe8+PQdLHi4Go6gDREZTEpOHDmrSInGEcIKGfJtH999QHxD6oY8XcPKn6NuNpcRZltVULKaUHDL/sdkFE4W0h2y2arBnDXZtb8r+ZCrrrCyTGv9djzWVIg6AMQQ4BkIjg5y130usqA8En34O3WtE6Ppchc5YqUVzVglwtdOs6uIGpw57fe8h7S8QTFK678KDEDbEtaDOszyG9rTHJv1ZSRw6gC1YX+AE4UnQ==; 25:NawkemUVqAIZIivNQnXuWdA9Wb0fGCht/d74C5oirppA+0aJKu5VLJxvvPQ4c14KUJfDCXZ213IWde1ZQXUWM14IzfC5R/UA49iGwqRMe22mstxI8YfUBXClHCEROFwZQib0doeVIUTkeUweDOW3+yJBHi5gKvWYqN9Ke17q1TuZOwi+FWvZk82a3bMs0UDhcLg9x1Zk4dR1Dpl2km8exO+mXt6WBPdjbtLQqlLCd0CBQrMz3dPYEeAZid4cxeADAKGBEtwzDI3Fbqe8j725gBe6ot2Qqz/dupELrSgt7iXjvU87luvMss4tT1pC6DE6dJUjhBfUXb+h+Afuvep7OO3R56I0EWKDJTMXxDN0GnjPaeIjMeDmH22kWuFXDYHnBlcLE5QLiF1ay3lIut1rGRorTgxR4KMICYpFR34qjnlFDhRAhRaF56UGARu5xnm29aIMz+LWdjcpsj/dbm9KXQ== X-Microsoft-Exchange-Diagnostics: 1; CY4PR15MB1221; 31:Bw7uqmWFvP/XUvKQPEdENV81l776HXufG/OPgvvAFCnkvWfzxJJXRE5UxQCjvB6XoNY7dOGwFwFxMH5vtPv5CZK/uqOBA68Upn9RtrqZ3RArTph6qDW8iOlO9QezPV4zzCAkU65V89BGl0NAEtfWCFEVGEA1MCFHUCd0Qblk/yn6a2RkaW+zpTCQ8B4JWjHkAtbVRsVRg1yUqp8u42z5AblhVVOFjmBeN0AH979CSNc=; 20:f9gZB4G23+L5dssDCbWpDzAQP3c5/Yw3ObPM56VpZf5YTgJ6TEgbhdz+S+HC6jUVb2SoItq/lI+LChpIfPNhosjH5b29srbyNjUreqBYM8McnwJ0ly+TwFxpHdt0f2nTzocwkxUOmJoVZUfPwLtVkdD60W/Nj53wEshuSyYJQN+atC3yiVl2KbvkXmiAMllo7a8Nz6d+wskdnRE7gqUkStkgNfALFU18wSzfccY8IIgqN99hdR5wStBxm8VdIdBiJeZtt9AxVezDuDULQzXDJBVoRo+FYP45hR8VJki2rCXhwotsu4lS2FoAr0Lh9gavpzWJxArYXervoyyJNcEMTGKOouFWTiUY8NpcTiaC1+s/4MaWNBbWb8sJBWtQkco+aCUtoJqGFxP/UwWP0DOatTqJYhcsVfsou5ZksSI8dC/ZlXpNoA8jN3g+qlQHZcjgQuBIakk/dDt2lJ2L6Kf7jXsHDhWiS4uKfBOoPZ8BNyI9aaIJNZ7LURkm+JCeLe5X X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(9452136761055)(67672495146484); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(5005006)(8121501046)(10201501046)(93006087)(93001087)(3002001)(6041248)(201703131423075)(201702281528075)(201703061421075)(20161123560025)(20161123564025)(20161123562025)(20161123555025)(6072148); SRVR:CY4PR15MB1221; BCL:0; PCL:0; RULEID:; SRVR:CY4PR15MB1221; X-Microsoft-Exchange-Diagnostics: 1; CY4PR15MB1221; 4:kdsZzozuo30GkO/Xy6ITaMJ464ZzhPJGLXFM16zDmx0JbZIzqQ4bq3jM2TVP0rW7BWxWrlAWztttJmVJd0UK/+YDZ+u0jf+7YK7mfi9pPtQkW4Nq2GTr8r7PjFdvergk3LUQufbR6KtJKcK11yDdCSOznCZXWgCTLrx4uJijeeUTeWx09kRmcrVoH/9U5L/XaX7wNvu+rePrrIHt4ZM05iZ9ZYC+zALr5RQg14zU79H9TvzcM4+1+kGTbqRFe9HlfkMioxCEgJqgsL6lLt3x1aoytMiWJC7bBT+3Z8956/oFmMlQqNSLEkv2Jv2aOeGmYKJGkeeCbyUs66joMjm3CrRl7/dddQ/6ikUhq3I3D2hhpl8JbTtKh5pMZR0OtufxWiWXkaljAkWLe13aaoMECeBgBggZ0oqpoCBJywOR3qZZBT6bO3AxbqGJjrAJgSkSNoYt7X8DrnH/4KLRcT7AvwP3q1CDrzFeIeKSFIYwA5cT4j8EYWCyhH7Wz4yVhHC23Ae/j3bzkvGSWKokGkDPudnaWXyXXX7EGj7T9sxfq57kNEjNE/Qldgzx3TlkAUFLIJBETRXw9vr3oTpSzx0xgI5FzOXsjmh4QMEIPP5vI1cAOcEsYXkaCCOv/EDk1afZvs5bRWXcLJ0szw6L4/ggAAI0T/mvji+93LKRhuyWoyXlvCm5u3k3tD/31UBo9tLY1wGdsXWTDkMQ4O1S+oIhQllwYai7KK8W3dNRY5qO5u1px6uIaT/CTIhwS/5W+BBnLDfRje1EErV7mzG2LFxF4NxYWNsfDLDSEVCDgZ1Kio8= X-Forefront-PRVS: 02638D901B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39400400002)(39410400002)(39840400002)(39850400002)(39450400003)(43544003)(54906002)(4326008)(7736002)(76176999)(9686003)(55016002)(25786009)(50986999)(6496005)(54356999)(38730400002)(5660300001)(305945005)(110136004)(33716001)(93886004)(33646002)(23676002)(42186005)(50466002)(6116002)(6666003)(2950100002)(1076002)(189998001)(6916009)(86362001)(4001350100001)(2906002)(53936002)(8676002)(83506001)(47776003)(81166006); DIR:OUT; SFP:1102; SCL:1; SRVR:CY4PR15MB1221; H:Haydn; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjE1TUIxMjIxOzIzOlZ5cFA4OUJrSzlrMlpGRVFUOXgrQUdwS2pE?= =?utf-8?B?UHNrWk00NEovTWRNbURDb0liWnlOTkRjeWhwT3hyWHgwSkZqd1dqcjJVWExy?= =?utf-8?B?V2NuQzdONjNMalUvM3FUQzhLUmpmME1hdE9Gam5kRkYzaHhtTVlxVTRobFYv?= =?utf-8?B?MWh6OUpGVmgxYjBrOEhQczY3WG1EOEhLWTFUWVRvMmt5R2QwS2JXZS9sUkpW?= =?utf-8?B?UDZoZmVZZTZPZmtzbFNEUG1pTHllUHFROFNTMzZUeE5QcXlEUk1DUXFRak1y?= =?utf-8?B?Z2VQNkxsL2ExKzlaMzlDcDVGL1VZTno4RHg1aVNwV1U4VVdyV0xRdVNJUlhD?= =?utf-8?B?VzdLM1I3YTVUMXpwRjMzUnE0L3c3RHE0SUJ6dDBlZHNqdTc2NUtBM0w2Vm55?= =?utf-8?B?cFcyN0lmZTJQeE13eVcyR1FCcGNvV1R1a0M3OTBpT3NSWnIyZFdZQlJBWm9B?= =?utf-8?B?V1YwdTBYTys1T3dXaWs4TzlHZm42RlpKaVl4ZHdMY1hBTk5Ob0ZNSi9HVmM4?= =?utf-8?B?TFlQWXBDZmVlUWEvVzkrUHBkK0xEdGl1aGJQdmxMYXlxRkIvS2d5Ykd4ZlUr?= =?utf-8?B?TWhHdEw5NUM0Z1pmMkF5YjRuMmtKT2hLQUE2bitKOGVmT1orL05nQmFqZStE?= =?utf-8?B?SEJuUVp2K0hvRVA2dWczUGVrRkpKc1FCejRwcWxTU1hnM0c5SWY2a2tkVFdi?= =?utf-8?B?UEhGVkZQak55dkFaanF4UHMwWGhqZk9wSjRSakl5RlJldmd5MEN6ZzU1UW9W?= =?utf-8?B?TnpSSGgyaFZNTmlIMEc2Z2pQakt4NFRvakYveXc5ZjdEcFpYUyttM2pXOUZC?= =?utf-8?B?czdmaHV1QXNuWFM5Z2VaSXUyRTN2Z0hacEpNU3MvNVlBckhlOVdza0FRa2Ew?= =?utf-8?B?MnFjemNZc3hrc2FlNlA1ZmZSdVBLT2VYVjdaTnZsS292SzBtNE1USWNuNlFK?= =?utf-8?B?SmIwY1ZaVlR1RnB2clBQQngzTHA2ZThBK1ZPTDhyZktOTXdQQURjR3dqWXky?= =?utf-8?B?NzVHYzUvRWNncWNDKytwWkVabldJTVc3bDdDdmVUcTdyWEh0VVVaS1dCNUlX?= =?utf-8?B?alBFdGNxSUg4VEhUdUI0OGxtSEFwY2RHT3I1ZWVzVU4yU3lCbkk2VUJvb3NM?= =?utf-8?B?ZGxyb284N0l3V0JnVTlBL0FWZUpFaS83S0k5WG96WUJzMEc0NzB1Q1JOOXVx?= =?utf-8?B?a09ZcnRUa1J4L3hUUDJ0UklLOHZ3Y2FOK0todlE0ZXpiMEplOUJ0RDNTWHBU?= =?utf-8?B?L3ZmM3B4Qm1vMXZXMWZteHhOR0hLdEJNK0FnSDhvZzJONU9mMk5FRVZUdDFQ?= =?utf-8?B?ZnBwZ2pobE5Qd3VQQTlQeS95SG11eS8vYWpqVlJMdUlzNStBV3NuYlNFbWpl?= =?utf-8?B?M1dsQVlLMmpBTG0zUzBzUUVSbG9HQlduRVlicUdVbXNSRWRqcm5iL1NnUUNY?= =?utf-8?Q?6A4z8uiOAkjD2kMc4/ry2Kde53Z?= X-Microsoft-Exchange-Diagnostics: 1; CY4PR15MB1221; 6:yrA15hNbEwPbQelHAFMS+ltCsYFgovtqPIvlThiyPKpFWML2YPF1e5YHowGysZMbvg/x33YoM224+udOXfXtYuyl+vP6OA56PEKEGYbceywWxbv3vqXqpKcIvd6E1b3ZwmnEMlQluuZ4L/viNKHd5AP2I8HuLGzSe4I3roS2aMnGCxnRX5e1pvf8r2gyEEccR2X4IlUio+UrF091WNI/Gh0ZVtXegjW2IeD+q9OSjv5gh8u/qQuTxGbupKUE94NLrQbRMaqVAhMPR9E0fIbI4PhCADuASDUPkqfgactrbUrdmajKc1FubFevBFfeESbchvRSZvp64Drf9zIbPJkHa854rva6WwgdvKyjn9FP9TUFp97q4sE60Cy42oIYutR+638sbFnJUZcmuf0wbkMTTA==; 5:hd8I+CMcr+sOH2g98nJRHDNhn+eMLRuUhPMc3S7+29wbNBVczrTsC3/FR9KOsVp1LIWDc9rZ9cVSC+I0n6TuYAFjq8x9jWIxO10vGgSbLPj2snWoQCKp9zv0nv7cGxbnmOkRA1lPMro4Ht6HlGRmGw==; 24:OsQHQjGMSDKUwmX6pUDIgLOEkXAvqe/gXTqPJlX+kcHZzQkMDD5t0PbeNfeEfCnd/uY3v6vEW0ucNNidRi7zky955ZiaAft7vdeipHfnFcg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY4PR15MB1221; 7:nMSs7gI08rgtXIYoTLGNbT8LSqLxMLeMmL2yapkX4cR07GSFsrO8JTZ4EoQ2+kFPlKc5QLRF46bfIhVwEO/C3GbI30PdU3Y5kuxTG+ObQPKaoaQrjR3WYSRRtpI8yPJdvtw0z6e8m+YoE3DOqP1ZrUqOv1UOXI7kJqyeSXHzGlHHi7H4UwYJ5+FGhk9gOaWrC/4ns4xImVemVzR8Mzk9+MsO5fT9KPCoc4GfRUfmP+ULcFLHV0TLtKBY5SxegVGZQGJzJE72EkGDSnRssJY+DNkbMBB3UOqn0CZrJ2SMK6RIrJtymkrri1pSL1zzRwLJnFUPh6heoWiXhNARfKYdXg==; 20:OHiNkTpVGiOvWHBopg2zcZksR8ztVO+2x+Rc3p292HJpWMFwTyRFaZBMH8GsqwZ/FgnNWcMGvz1XcLTJIHpCoY6ywW7R0hAA/BFtuOfJUJYlPE2NyqR6EfJG7FQbRCOwrXFr0dtPtBTylblwI+HDAjKkKKSc3r+nni38dqhQCXY= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Mar 2017 04:18:08.8142 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR15MB1221 X-OriginatorOrg: fb.com X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-03-31_03:, , signatures=0 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 When punching past EOF on XFS, fallocate(mode=PUNCH_HOLE|KEEP_SIZE) will round the file size up to the nearest multiple of PAGE_SIZE: calvinow@vm-disks/generic-xfs-1 ~$ dd if=/dev/urandom of=test bs=2048 count=1 calvinow@vm-disks/generic-xfs-1 ~$ stat test Size: 2048 Blocks: 8 IO Block: 4096 regular file calvinow@vm-disks/generic-xfs-1 ~$ fallocate -n -l 2048 -o 2048 -p test calvinow@vm-disks/generic-xfs-1 ~$ stat test Size: 4096 Blocks: 8 IO Block: 4096 regular file Commit 3c2bdc912a1cc050 ("xfs: kill xfs_zero_remaining_bytes") replaced xfs_zero_remaining_bytes() with calls to iomap helpers. The new helpers don't enforce that [pos,offset) lies strictly on [0,i_size) when being called from xfs_free_file_space(), so by "leaking" these ranges into xfs_zero_range() we get this buggy behavior. Fix this by reintroducing the checks xfs_zero_remaining_bytes() did against i_size at the bottom of xfs_free_file_space(). Reported-by: Aaron Gao Fixes: 3c2bdc912a1cc050 ("xfs: kill xfs_zero_remaining_bytes") Cc: Christoph Hellwig Cc: Brian Foster Cc: # 4.8+ Signed-off-by: Calvin Owens Reviewed-by: Christoph Hellwig Reviewed-by: Darrick J. Wong --- fs/xfs/xfs_bmap_util.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c index 8b75dce..828532c 100644 --- a/fs/xfs/xfs_bmap_util.c +++ b/fs/xfs/xfs_bmap_util.c @@ -1311,8 +1311,16 @@ xfs_free_file_space( /* * Now that we've unmap all full blocks we'll have to zero out any * partial block at the beginning and/or end. xfs_zero_range is - * smart enough to skip any holes, including those we just created. + * smart enough to skip any holes, including those we just created, + * but we must take care not to zero beyond EOF and enlarge i_size. */ + + if (offset >= XFS_ISIZE(ip)) + return 0; + + if (offset + len > XFS_ISIZE(ip)) + len = XFS_ISIZE(ip) - offset; + return xfs_zero_range(ip, offset, len, NULL); }