On Wed 14-06-17 16:11:26, Dan Williams wrote: > 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: Jeff Moyer <jmoyer@xxxxxxxxxx> > Cc: Christoph Hellwig <hch@xxxxxx> > Cc: Matthew Wilcox <mawilcox@xxxxxxxxxxxxx> > Cc: Ross Zwisler <ross.zwisler@xxxxxxxxxxxxxxx> > Suggested-by: Jan Kara <jack@xxxxxxx> > Signed-off-by: Dan Williams <dan.j.williams@xxxxxxxxx> Looks good. You can add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > Changes since v3: > * move the check of QUEUE_FLAG_WC into the pmem driver directly (Jan) > > drivers/nvdimm/pmem.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c > index 06f6c27ec1e9..49938b246a7b 100644 > --- a/drivers/nvdimm/pmem.c > +++ b/drivers/nvdimm/pmem.c > @@ -244,7 +244,16 @@ static size_t pmem_copy_from_iter(struct dax_device *dax_dev, pgoff_t pgoff, > static void pmem_dax_flush(struct dax_device *dax_dev, pgoff_t pgoff, > void *addr, size_t size) > { > - arch_wb_cache_pmem(addr, size); > + struct pmem_device *pmem = dax_get_private(dax_dev); > + struct gendisk *disk = pmem->disk; > + struct request_queue *q = disk->queue; > + > + /* > + * Only perform cache management when the queue has caching > + * enabled. > + */ > + if (test_bit(QUEUE_FLAG_WC, &q->queue_flags)) > + arch_wb_cache_pmem(addr, size); > } > > static const struct dax_operations pmem_dax_ops = { > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR