All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boaz Harrosh <boaz@plexistor.com>
To: Matthew Wilcox <matthew.r.wilcox@intel.com>,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
	Alexander Viro <viro@zeniv.linux.org.uk>
Cc: willy@linux.intel.com
Subject: Re: [PATCH v2 5/6] block: Add support for DAX reads/writes to block devices
Date: Sun, 05 Jul 2015 16:47:20 +0300	[thread overview]
Message-ID: <55993568.4090304@plexistor.com> (raw)
In-Reply-To: <1435934443-17090-6-git-send-email-matthew.r.wilcox@intel.com>

On 07/03/2015 05:40 PM, Matthew Wilcox wrote:
> If a block device supports the ->direct_access methods, bypass the normal
> DIO path and use DAX to go straight to memcpy() instead of allocating
> a DIO and a BIO.
> 

I can't remember the details but I'm not sure it is safe for mmap to go through
page-cache while DAX is bypassing page-cache. (Because of the pg_mkwrite thing,
while IO), do you find this code safe?

I think you need to force all DAX IO through dax.c. I did not understand why we
need to give the user an option? why would he ever want a cached access to a memory
device (ie two copies of the same thing). Why not DAX hard coded?

> Includes support for the DIO_SKIP_DIO_COUNT flag in DAX, as is done in
> do_blockdev_direct_IO().
> 
> Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
> ---
>  fs/block_dev.c | 4 ++++
>  fs/dax.c       | 6 ++++--
>  2 files changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/block_dev.c b/fs/block_dev.c
> index 4fe10f9..0bb2993 100644
> --- a/fs/block_dev.c
> +++ b/fs/block_dev.c
> @@ -152,6 +152,9 @@ blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, loff_t offset)
>  	struct file *file = iocb->ki_filp;
>  	struct inode *inode = file->f_mapping->host;
>  
> +	if (IS_DAX(inode))
> +		return dax_do_io(iocb, inode, iter, offset, blkdev_get_block,
> +				NULL, DIO_SKIP_DIO_COUNT);
>  	return __blockdev_direct_IO(iocb, inode, I_BDEV(inode), iter, offset,
>  				    blkdev_get_block, NULL, NULL,
>  				    DIO_SKIP_DIO_COUNT);
> @@ -1170,6 +1173,7 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
>  		bdev->bd_disk = disk;
>  		bdev->bd_queue = disk->queue;
>  		bdev->bd_contains = bdev;
> +		bdev->bd_inode->i_flags = disk->fops->direct_access ? S_DAX : 0;
>  		if (!partno) {
>  			ret = -ENXIO;
>  			bdev->bd_part = disk_get_part(disk, partno);
> diff --git a/fs/dax.c b/fs/dax.c
> index eaa9e06..c3e21cc 100644
> --- a/fs/dax.c
> +++ b/fs/dax.c
> @@ -209,7 +209,8 @@ ssize_t dax_do_io(struct kiocb *iocb, struct inode *inode,
>  	}
>  
>  	/* Protects against truncate */
> -	inode_dio_begin(inode);
> +	if (!(flags & DIO_SKIP_DIO_COUNT))
> +		inode_dio_begin(inode);

Is really a separate issue, is it not?

>  
>  	retval = dax_io(inode, iter, pos, end, get_block, &bh);
>  
> @@ -219,7 +220,8 @@ ssize_t dax_do_io(struct kiocb *iocb, struct inode *inode,
>  	if ((retval > 0) && end_io)
>  		end_io(iocb, pos, retval, bh.b_private);
>  
> -	inode_dio_end(inode);
> +	if (!(flags & DIO_SKIP_DIO_COUNT))
> +		inode_dio_end(inode);
>   out:
>  	return retval;
>  }
> 

This scares me, the mix of DAX while cached data. I'd vote for hard-coded DAX
all over.

Boaz


  reply	other threads:[~2015-07-05 13:47 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-03 14:40 [PATCH v2 0/6] Miscellaneous DAX patches, take 2 Matthew Wilcox
2015-07-03 14:40 ` [PATCH v2 1/6] dax: Add block size note to documentation Matthew Wilcox
2015-07-04  5:03   ` Christoph Hellwig
2015-07-05  8:43     ` Boaz Harrosh
2015-07-03 14:40 ` [PATCH v2 2/6] dax: Use copy_from_iter_nocache Matthew Wilcox
2015-07-05 13:11   ` Boaz Harrosh
2015-07-03 14:40 ` [PATCH v2 3/6] ext4: Use ext4_get_block_write() for DAX Matthew Wilcox
2015-07-03 18:30   ` Theodore Ts'o
2015-07-03 18:48     ` Matthew Wilcox
2015-07-03 19:07       ` Theodore Ts'o
2015-07-05 13:29         ` Boaz Harrosh
2015-07-03 14:40 ` [PATCH v2 4/6] vfs: Allow truncate, chomd and chown to be interrupted by fatal signals Matthew Wilcox
2015-07-03 14:40 ` [PATCH v2 5/6] block: Add support for DAX reads/writes to block devices Matthew Wilcox
2015-07-05 13:47   ` Boaz Harrosh [this message]
2015-07-03 14:40 ` [PATCH v2 6/6] dax: bdev_direct_access() may sleep Matthew Wilcox

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=55993568.4090304@plexistor.com \
    --to=boaz@plexistor.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matthew.r.wilcox@intel.com \
    --cc=viro@zeniv.linux.org.uk \
    --cc=willy@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.