Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp1996064pxk; Sat, 5 Sep 2020 05:13:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw03GWWcUfGcDMT2U9TyLA6YxzABQYbw+yvAk2KPB2t8GkVMID/lsVGYzlfp53aAuoutMsu X-Received: by 2002:aa7:c985:: with SMTP id c5mr13574317edt.355.1599307984549; Sat, 05 Sep 2020 05:13:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1599307984; cv=none; d=google.com; s=arc-20160816; b=oxSi4pXRX1aP4Q5d2WPva8f8Ghrw7niCtHSqAM1nNFnRY79Lfg1xJqjs3NX51mXfYn H+DvlyFQtoEX4jboX6m67Kixd3nYxTq8vmjsY79e6eKahTq42LiIQ9M6Ef00nbaKAGMj Yyib5FQKexL/ny8sHOwVmYrDQbIvj68BkmWFmYYYbY44IGXx4Yz1CNe7BEJz1eQTDWfF 53PaBl8JlpIKnYGWGQdHjs3fN2G7RMraT/Xwueigo+NZ5V1pV1R9VuNrVKNVBF4ghAUt UE/ZZV72QoUt3aSyWV+fA4KCCcipjVn0Oa6rIkY8RBHjnaINJhhpNu6N/PR5MPbvfgCO rdtQ== 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=qJZq+Utr2MNF3iSeTd5whZpczkdnhNmjJK+ZipavdxI=; b=RNV+1NnZhoIVQVTYeDyrl5a5JZN3c2TvSQmL6j83+tbQ/rWs5jsF/1q8JnKQBtaouD eaGLYof2vXjOYy2iKQXu0CjN6YOub4x4yweCsLENikmCV14pIEaW/i+0BG28pEWzlAZv +n+OYx78YMatvL/2gAYOpUrlC91IsvfblOuxtWwpf/EFo8qlry2s4jdrTNF2qJSjMDoK i35IY30TOiiRQZDR7hguiOAYkpOU4xSgRw/SjoSlJi0ch18O8BeRHYwIhfSkBon4HyNA HMjaTckKHNYNHVXmc+9r9lxStXQ01ioEgW1eClhb+POaXOumeVF3LH/vNMW6lj147U9C sdxg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b="WBb3bQ/8"; 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 a1si5588192eju.696.2020.09.05.05.12.39; Sat, 05 Sep 2020 05:13:04 -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="WBb3bQ/8"; 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 S1728535AbgIEMMP (ORCPT + 99 others); Sat, 5 Sep 2020 08:12:15 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:31527 "EHLO us-smtp-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728468AbgIEMML (ORCPT ); Sat, 5 Sep 2020 08:12:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599307930; 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=qJZq+Utr2MNF3iSeTd5whZpczkdnhNmjJK+ZipavdxI=; b=WBb3bQ/8Bo2MjMCOdrQXL1wsylmD+8nacR4dCR13zZw8ohhiiZHPcXxAnAbmX19h4J4XDQ VrrZu0UfXp5FFOyy5VtT+xujmqC2fFi1zapxWCOPHjPC1uR1SR6x5essRlyUBu7bSQhh1a XNYSrzyZ+mBoBh+G7/6pyQmiJ+JvEeI= 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-496-wmpBuOf2PGeDWX7-G1ZQ0g-1; Sat, 05 Sep 2020 08:12:07 -0400 X-MC-Unique: wmpBuOf2PGeDWX7-G1ZQ0g-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 6BE0B1074643; Sat, 5 Sep 2020 12:12: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 4CF9F7ED86; Sat, 5 Sep 2020 12:12: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 085CC1XE012789; Sat, 5 Sep 2020 08:12:01 -0400 Received: from localhost (mpatocka@localhost) by file01.intranet.prod.int.rdu2.redhat.com (8.14.4/8.14.4/Submit) with ESMTP id 085CC19D012786; Sat, 5 Sep 2020 08:12:01 -0400 X-Authentication-Warning: file01.intranet.prod.int.rdu2.redhat.com: mpatocka owned process doing -bs Date: Sat, 5 Sep 2020 08:12:01 -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 1/2] ext2: 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 ext2 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 ext2 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/ext2/file.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) Index: linux-2.6/fs/ext2/file.c =================================================================== --- linux-2.6.orig/fs/ext2/file.c 2020-09-05 10:01:41.000000000 +0200 +++ linux-2.6/fs/ext2/file.c 2020-09-05 13:09:50.000000000 +0200 @@ -93,8 +93,10 @@ static vm_fault_t ext2_dax_fault(struct struct inode *inode = file_inode(vmf->vma->vm_file); struct ext2_inode_info *ei = EXT2_I(inode); vm_fault_t ret; + bool write = (vmf->flags & FAULT_FLAG_WRITE) && + (vmf->vma->vm_flags & VM_SHARED); - if (vmf->flags & FAULT_FLAG_WRITE) { + if (write) { sb_start_pagefault(inode->i_sb); file_update_time(vmf->vma->vm_file); } @@ -103,7 +105,7 @@ static vm_fault_t ext2_dax_fault(struct ret = dax_iomap_fault(vmf, PE_SIZE_PTE, NULL, NULL, &ext2_iomap_ops); up_read(&ei->dax_sem); - if (vmf->flags & FAULT_FLAG_WRITE) + if (write) sb_end_pagefault(inode->i_sb); return ret; }