Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1624833

[resend PATCH v2 32/33] filesystem-dax: gate calls to dax_flush() on QUEUE_FLAG_WC

From Dan Williams <dan.j.williams@intel.com>
Newsgroups linux.kernel
Subject [resend PATCH v2 32/33] filesystem-dax: gate calls to dax_flush() on QUEUE_FLAG_WC
Date 2017-04-17 21:20 +0200
Message-ID <txklR-4zD-45@gated-at.bofh.it> (permalink)
References <txklP-4zD-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Some platforms arrange for cpu caches to be flushed on power-fail. On
those platforms there is no requirement that the kernel track and flush
potentially dirty cache lines. Given that we still insert entries into
the radix for locking purposes this patch only disables the cache flush
loop, not the dirty tracking.

Userspace can override the default cache setting via the block device
queue "write_cache" attribute in sysfs.

Cc: Jan Kara <jack@suse.cz>
Cc: Jeff Moyer <jmoyer@redhat.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Matthew Wilcox <mawilcox@microsoft.com>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
 fs/dax.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/fs/dax.c b/fs/dax.c
index f37ed21e4093..5b7ee1bc74d0 100644
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -797,7 +797,8 @@ static int dax_writeback_one(struct block_device *bdev,
 	}
 
 	dax_mapping_entry_mkclean(mapping, index, pfn_t_to_pfn(pfn));
-	dax_flush(dax_dev, pgoff, kaddr, size);
+	if (test_bit(QUEUE_FLAG_WC, &bdev->bd_queue->queue_flags))
+		dax_flush(dax_dev, pgoff, kaddr, size);
 	/*
 	 * After we have flushed the cache, we can clear the dirty tag. There
 	 * cannot be new dirty data in the pfn after the flush has completed as
@@ -982,7 +983,8 @@ int __dax_zero_page_range(struct block_device *bdev,
 			return rc;
 		}
 		memset(kaddr + offset, 0, size);
-		dax_flush(dax_dev, pgoff, kaddr + offset, size);
+		if (test_bit(QUEUE_FLAG_WC, &bdev->bd_queue->queue_flags))
+			dax_flush(dax_dev, pgoff, kaddr + offset, size);
 		dax_read_unlock(id);
 	}
 	return 0;

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[resend PATCH v2 00/33] dax: introduce dax_operations Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:20 +0200
  [resend PATCH v2 32/33] filesystem-dax: gate calls to dax_flush()  on QUEUE_FLAG_WC Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:20 +0200
  [resend PATCH v2 03/33] dax: add a facility to lookup a dax device  by 'host' device name Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:20 +0200
  [resend PATCH v2 22/33] dax,  pmem: introduce an optional 'flush' dax_operation Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:20 +0200
  [resend PATCH v2 02/33] dax: refactor dax-fs into a generic  provider of 'struct dax_device' instances Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:20 +0200
  [resend PATCH v2 15/33] filesystem-dax: convert to  dax_direct_access() Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:20 +0200
  [resend PATCH v2 06/33] axon_ram: add dax_operations support Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:20 +0200
  [resend PATCH v2 17/33] block: remove block_device_operations  ->direct_access() Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:20 +0200
  [resend PATCH v2 13/33] ext2, ext4,  xfs: retrieve dax_device for iomap operations Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:20 +0200
  [resend PATCH v2 04/33] dax: introduce dax_operations Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:20 +0200
  [resend PATCH v2 20/33] dm: add ->copy_from_iter() dax operation  support Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:20 +0200
  [resend PATCH v2 27/33] x86, libnvdimm,  pmem: move arch_invalidate_pmem() to libnvdimm Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:20 +0200
  [resend PATCH v2 05/33] pmem: add dax_operations support Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:20 +0200
  [resend PATCH v2 12/33] dm: teach dm-targets to use a dax_device +  dax_operations Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:30 +0200
  [resend PATCH v2 18/33] x86, dax,  pmem: remove indirection around memcpy_from_pmem() Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:30 +0200
  [resend PATCH v2 07/33] brd: add dax_operations support Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:30 +0200
  [resend PATCH v2 24/33] filesystem-dax: convert to dax_flush() Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:30 +0200
  [resend PATCH v2 14/33] Revert "block: use DAX for partition table  reads" Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:30 +0200
  [resend PATCH v2 01/33] device-dax: rename 'dax_dev' to 'dev_dax' Dan Williams <dan.j.williams@intel.com> - 2017-04-17 21:30 +0200
  Re: [resend PATCH v2 00/33] dax: introduce dax_operations Dan Williams <dan.j.williams@intel.com> - 2017-04-22 03:10 +0200

csiph-web