From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753291AbcBFXlJ (ORCPT ); Sat, 6 Feb 2016 18:41:09 -0500 Received: from ipmail06.adl2.internode.on.net ([150.101.137.129]:43917 "EHLO ipmail06.adl2.internode.on.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752874AbcBFXk4 (ORCPT ); Sat, 6 Feb 2016 18:40:56 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DBCACag7ZWPBATLHleKAECgw+BP4Jpg3qBeJ0/AQEBAQEBBotmhUSEB4YHBAICgSFNAQEBAQEBBwEBAQFBP4RCAQEEJxMcMwgDGAklDwUlAwcaARKIGr4lDB4YhTKEf4QchFABBIdQhwaIH41HgWSNGIVuiFCEWiguhxuBOAEBAQ Date: Sun, 7 Feb 2016 10:40:53 +1100 From: Dave Chinner To: Ross Zwisler , Jan Kara , Dan Williams , Matthew Wilcox , Christoph Hellwig , "linux-kernel@vger.kernel.org" , Alexander Viro , Andrew Morton , Jan Kara , linux-fsdevel , linux-nvdimm Subject: Re: [PATCH 2/2] dax: fix bdev NULL pointer dereferences Message-ID: <20160206234053.GG31407@dastard> References: <20160201214730.GR20456@dastard> <20160202111723.GD12574@quack.suse.cz> <20160202164642.GE12574@quack.suse.cz> <20160202173456.GB23963@linux.intel.com> <20160203104611.GF12574@quack.suse.cz> <20160204195619.GA31860@linux.intel.com> <20160204202957.GB6895@quack.suse.cz> <20160205222500.GA15463@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160205222500.GA15463@linux.intel.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Feb 05, 2016 at 03:25:00PM -0700, Ross Zwisler wrote: > On Thu, Feb 04, 2016 at 09:29:57PM +0100, Jan Kara wrote: > > I think changes aren't very intrusive so we can feed them in during RC > > phase and frankly, you have to move to using ->writepages() anyway to make > > sync(2) work reliably. > > I've been looking into this a bit more, and I don't think we actually want to > have DAX flushing in response to sync(2) or syncfs(2). Here's some text from > the BUGS section of the sync(2) man page: > > BUGS > According to the standard specification (e.g., POSIX.1-2001), sync() > schedules the writes, but may return before the actual writing > is done. However, since version 1.3.20 Linux does actually wait. > (This still does not guarantee data integrity: modern disks have large > caches.) > > Based on this I don't believe that it is a requirement that sync and syncfs > actually flush the data durably to media before they return - they just need > to make sure it has been sent to the device, which is always true for all > writes PMEM via DAX, even without any calls to dax_writeback_mapping_range(). That's an assumption we've already pointed out as being platform dependent, not to mention also being undesirable from a performance point of view (writes are 10x slower into pmem than into the page cache using the same physical memory!). Further, the ordering constraints of modern filesystems mean that they guarantee durability of data written back when sync() is run. i.e. ext4, XFS, btrfs, etc all ensure that sync guarantees data integrity is maintained across all the data and metadata written back during sync(). e.g. for XFS we do file size update transactions at IO completion. sync() triggers writeback of data, then runs a transaction that modifies the file size so that the data is valid on disk. We absolutely need to ensure that this transaction is durable before sync() returns, otherwise we lose that data if a failure occurs immediately after sync() returns because the size update is not on disk. Users are right to complain when data written before a sync() call is made does not accessible after a crash/reboot because we failed to make it durable. That's why ->sync_fs(wait) is called at the end of the sync() implementation - it enables filesystems to ensure all data and metadata written during the sync processing is on durable storage. IOWs, we can't language-lawyer or weasel-word our way out of providing durability guarantees for sync(). Cheers, Dave. -- Dave Chinner david@fromorbit.com