Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp1996589pxk; Sat, 5 Sep 2020 05:13:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyj1rfPaWPjHFinfxJ2+j+2IUoZPJl7gTaiOFH0dGpOuYMPRDWqQG3JOLNirkTSNBXLVBN8 X-Received: by 2002:a17:906:72d2:: with SMTP id m18mr11889670ejl.220.1599308037625; Sat, 05 Sep 2020 05:13:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1599308037; cv=none; d=google.com; s=arc-20160816; b=TFXMCuelLyNoOv/9iX9IWSZBqGztnr9JjEORpMHtBRQTRiK7zYMsa3Lj8FfMRG2hFI ARKS6bHWtXzEbtyMF/RzCOcEgHArWUtc9Vil9rO59CLTedFPwpznaThmY9ZNuFoIQkJc t+Gng0zDCihgYcnNdXOdF5m1DCi2+3j8xaXuWhLhYpxRJCQVY1EiXIRbFMeoLOLMSBx0 TEUKHZNIvSC4D2+aJh+C1Ro+gkxJoxlunho/HxA//03M/hv7U+X5m0sMtsxsclV6gXTK B3CsCnSwE9q4YF/HHaI5g08G4/EKB2zFb/LinOSKAZDjnr71rF275ZG1c6GOyXDia828 fIKg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :message-id:in-reply-to:subject:cc:to:from:date:dkim-signature; bh=WHiq5fa/IzvIT3iZbseq6dJ4UmL8j1xtV2j4zAaXmDU=; b=ie2qiJKE1vCDOE8WR1NVNAPYyKwGGFGJPCSnB3lbPkpDx+kPyn5dqiMqiDr0luz7+A zUaOWWyQ2Fbt+Qt1agoRhlG2VLcB9nm3MODEOqhdU6oUURaICXbUcQSjZHmgrfxeGRSK KrY2WJ8vUpWhRBmhLWC8dQ+op0Fht1eEOvhGPTjbOALbdQuSB7Z5/cEbRKbeUpSDRo2H CKJmaXCpAF/c1ivH3TOAJb1pzf2C4z3g04JHAUWKDalsAY5zB3X1De8mCEMdUmkwvveR Uruibnl1RrLr87O5NZCTw/M4R3QdguyNxvIKXtBNxezfvYzrdau1xT+dZsZrPvrpyafx W0EA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=g4nUQhhl; spf=pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d16si6106562ejc.620.2020.09.05.05.13.33; Sat, 05 Sep 2020 05:13:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=g4nUQhhl; spf=pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728536AbgIEMNS (ORCPT + 99 others); Sat, 5 Sep 2020 08:13:18 -0400 Received: from us-smtp-2.mimecast.com ([207.211.31.81]:43308 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728481AbgIEMNR (ORCPT ); Sat, 5 Sep 2020 08:13:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599307992; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=WHiq5fa/IzvIT3iZbseq6dJ4UmL8j1xtV2j4zAaXmDU=; b=g4nUQhhlipkd6GTBXMrFYsJuFmhqLyYFSrmtsDsfcRVNT16bEESV73OJx8cvwkdC5JP0uD JIyekixPtYbKkvwEZS3B8kfdse61i9Y3KGudTGky5oH74PMhFmQg3yc4/esKI2k4RbKHTf Chfnmu+qd8oGOOQXrqwZTddJrquivsQ= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-147-10FS3LDTPYaWtHPHRukgAg-1; Sat, 05 Sep 2020 08:13:08 -0400 X-MC-Unique: 10FS3LDTPYaWtHPHRukgAg-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id B2DC31005E74; Sat, 5 Sep 2020 12:13:05 +0000 (UTC) Received: from file01.intranet.prod.int.rdu2.redhat.com (file01.intranet.prod.int.rdu2.redhat.com [10.11.5.7]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C8F6F7ED7D; Sat, 5 Sep 2020 12:13:02 +0000 (UTC) Received: from file01.intranet.prod.int.rdu2.redhat.com (localhost [127.0.0.1]) by file01.intranet.prod.int.rdu2.redhat.com (8.14.4/8.14.4) with ESMTP id 085CD2bl012814; Sat, 5 Sep 2020 08:13:02 -0400 Received: from localhost (mpatocka@localhost) by file01.intranet.prod.int.rdu2.redhat.com (8.14.4/8.14.4/Submit) with ESMTP id 085CD2uR012810; Sat, 5 Sep 2020 08:13:02 -0400 X-Authentication-Warning: file01.intranet.prod.int.rdu2.redhat.com: mpatocka owned process doing -bs Date: Sat, 5 Sep 2020 08:13:02 -0400 (EDT) From: Mikulas Patocka X-X-Sender: mpatocka@file01.intranet.prod.int.rdu2.redhat.com To: Linus Torvalds , Jan Kara , "Darrick J. Wong" , Dave Chinner cc: Jann Horn , Christoph Hellwig , Oleg Nesterov , Kirill Shutemov , "Theodore Ts'o" , Andrea Arcangeli , Matthew Wilcox , Andrew Morton , Dan Williams , linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-nvdimm@lists.01.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org Subject: [PATCH 2/2] xfs: don't update mtime on COW faults In-Reply-To: Message-ID: References: User-Agent: Alpine 2.02 (LRH 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org When running in a dax mode, if the user maps a page with MAP_PRIVATE and PROT_WRITE, the xfs filesystem would incorrectly update ctime and mtime when the user hits a COW fault. This breaks building of the Linux kernel. How to reproduce: 1. extract the Linux kernel tree on dax-mounted xfs filesystem 2. run make clean 3. run make -j12 4. run make -j12 - at step 4, make would incorrectly rebuild the whole kernel (although it was already built in step 3). The reason for the breakage is that almost all object files depend on objtool. When we run objtool, it takes COW page fault on its .data section, and these faults will incorrectly update the timestamp of the objtool binary. The updated timestamp causes make to rebuild the whole tree. Signed-off-by: Mikulas Patocka Cc: stable@vger.kernel.org --- fs/xfs/xfs_file.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) Index: linux-2.6/fs/xfs/xfs_file.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_file.c 2020-09-05 10:01:42.000000000 +0200 +++ linux-2.6/fs/xfs/xfs_file.c 2020-09-05 13:59:12.000000000 +0200 @@ -1223,6 +1223,13 @@ __xfs_filemap_fault( return ret; } +static bool +xfs_is_write_fault( + struct vm_fault *vmf) +{ + return vmf->flags & FAULT_FLAG_WRITE && vmf->vma->vm_flags & VM_SHARED; +} + static vm_fault_t xfs_filemap_fault( struct vm_fault *vmf) @@ -1230,7 +1237,7 @@ xfs_filemap_fault( /* DAX can shortcut the normal fault path on write faults! */ return __xfs_filemap_fault(vmf, PE_SIZE_PTE, IS_DAX(file_inode(vmf->vma->vm_file)) && - (vmf->flags & FAULT_FLAG_WRITE)); + xfs_is_write_fault(vmf)); } static vm_fault_t @@ -1243,7 +1250,7 @@ xfs_filemap_huge_fault( /* DAX can shortcut the normal fault path on write faults! */ return __xfs_filemap_fault(vmf, pe_size, - (vmf->flags & FAULT_FLAG_WRITE)); + xfs_is_write_fault(vmf)); } static vm_fault_t