From: Christoph Hellwig <hch@lst.de> To: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-nvdimm@ml01.01.org Cc: ross.zwisler@linux.intel.com Subject: [PATCH 07/12] xfs: fix locking for DAX writes Date: Wed, 14 Sep 2016 12:01:26 +0200 [thread overview] Message-ID: <1473847291-18913-8-git-send-email-hch@lst.de> (raw) In-Reply-To: <1473847291-18913-1-git-send-email-hch@lst.de> So far DAX writes inherited the locking from direct I/O writes, but the direct I/O model of using shared locks for writes is actually wrong for DAX. For direct I/O we're out of any standards and don't have to provide the Posix required exclusion between writers, but for DAX which gets transparently enable on applications without any knowledge of it we can't simply drop the requirement. Even worse this only happens for aligned writes and thus doesn't show up for many typical use cases. Signed-off-by: Christoph Hellwig <hch@lst.de> --- fs/xfs/xfs_file.c | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index e612a02..62649cc 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -714,24 +714,11 @@ xfs_file_dax_write( struct address_space *mapping = iocb->ki_filp->f_mapping; struct inode *inode = mapping->host; struct xfs_inode *ip = XFS_I(inode); - struct xfs_mount *mp = ip->i_mount; ssize_t ret = 0; - int unaligned_io = 0; - int iolock; + int iolock = XFS_IOLOCK_EXCL; struct iov_iter data; - /* "unaligned" here means not aligned to a filesystem block */ - if ((iocb->ki_pos & mp->m_blockmask) || - ((iocb->ki_pos + iov_iter_count(from)) & mp->m_blockmask)) { - unaligned_io = 1; - iolock = XFS_IOLOCK_EXCL; - } else if (mapping->nrpages) { - iolock = XFS_IOLOCK_EXCL; - } else { - iolock = XFS_IOLOCK_SHARED; - } xfs_rw_ilock(ip, iolock); - ret = xfs_file_aio_write_checks(iocb, from, &iolock); if (ret) goto out; @@ -758,11 +745,6 @@ xfs_file_dax_write( WARN_ON_ONCE(ret); } - if (iolock == XFS_IOLOCK_EXCL && !unaligned_io) { - xfs_rw_ilock_demote(ip, XFS_IOLOCK_EXCL); - iolock = XFS_IOLOCK_SHARED; - } - trace_xfs_file_dax_write(ip, iov_iter_count(from), iocb->ki_pos); data = *from; -- 2.1.4
next prev parent reply other threads:[~2016-09-14 10:01 UTC|newest] Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-09-14 10:01 iomap based DAX path V2 Christoph Hellwig 2016-09-14 10:01 ` Christoph Hellwig [not found] ` <1473847291-18913-1-git-send-email-hch-jcswGhMUV9g@public.gmane.org> 2016-09-14 10:01 ` [PATCH 01/12] iomap: add IOMAP_F_NEW flag Christoph Hellwig 2016-09-14 10:01 ` Christoph Hellwig 2016-09-14 10:01 ` [PATCH 02/12] iomap: expose iomap_apply outside iomap.c Christoph Hellwig 2016-09-14 10:01 ` Christoph Hellwig 2016-09-14 10:01 ` [PATCH 12/12] ext2: use iomap to implement DAX Christoph Hellwig 2016-09-14 10:01 ` Christoph Hellwig [not found] ` <1473847291-18913-13-git-send-email-hch-jcswGhMUV9g@public.gmane.org> 2016-09-14 22:51 ` Ross Zwisler 2016-09-14 22:51 ` Ross Zwisler 2016-09-15 5:14 ` Christoph Hellwig 2016-09-14 10:01 ` [PATCH 03/12] dax: don't pass buffer_head to dax_insert_mapping Christoph Hellwig 2016-09-14 10:01 ` [PATCH 04/12] dax: don't pass buffer_head to copy_user_dax Christoph Hellwig 2016-09-14 10:01 ` [PATCH 05/12] dax: provide an iomap based dax read/write path Christoph Hellwig [not found] ` <1473847291-18913-6-git-send-email-hch-jcswGhMUV9g@public.gmane.org> 2016-09-14 17:26 ` Ross Zwisler 2016-09-14 17:26 ` Ross Zwisler 2016-09-14 10:01 ` [PATCH 06/12] dax: provide an iomap based fault handler Christoph Hellwig 2016-09-14 17:27 ` Ross Zwisler [not found] ` <20160914172717.GB30852-VuQAYsv1563Yd54FQh9/CA@public.gmane.org> 2016-09-15 5:13 ` Christoph Hellwig 2016-09-15 5:13 ` Christoph Hellwig 2016-09-14 10:01 ` Christoph Hellwig [this message] 2016-09-14 10:01 ` [PATCH 08/12] xfs: take the ilock shared if possible in xfs_file_iomap_begin Christoph Hellwig 2016-09-14 10:01 ` [PATCH 09/12] xfs: refactor xfs_setfilesize Christoph Hellwig 2016-09-14 10:01 ` [PATCH 10/12] xfs: use iomap to implement DAX Christoph Hellwig [not found] ` <1473847291-18913-11-git-send-email-hch-jcswGhMUV9g@public.gmane.org> 2016-09-14 17:32 ` Ross Zwisler 2016-09-14 17:32 ` Ross Zwisler [not found] ` <20160914173247.GC30852-VuQAYsv1563Yd54FQh9/CA@public.gmane.org> 2016-09-15 5:14 ` Christoph Hellwig 2016-09-15 5:14 ` Christoph Hellwig 2016-09-15 5:29 ` Darrick J. Wong [not found] ` <20160915052933.GH9314-PTl6brltDGh4DFYR7WNSRA@public.gmane.org> 2016-09-15 6:43 ` Christoph Hellwig 2016-09-15 6:43 ` Christoph Hellwig 2016-09-14 10:01 ` [PATCH 11/12] ext2: stop passing buffer_head to ext2_get_blocks Christoph Hellwig [not found] ` <1473847291-18913-12-git-send-email-hch-jcswGhMUV9g@public.gmane.org> 2016-09-14 22:42 ` Ross Zwisler 2016-09-14 22:42 ` Ross Zwisler 2016-09-16 11:27 iomap based DAX path V3 Christoph Hellwig [not found] ` <1474025234-13804-1-git-send-email-hch-jcswGhMUV9g@public.gmane.org> 2016-09-16 11:27 ` [PATCH 07/12] xfs: fix locking for DAX writes Christoph Hellwig 2016-09-16 11:27 ` Christoph Hellwig
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=1473847291-18913-8-git-send-email-hch@lst.de \ --to=hch@lst.de \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-nvdimm@ml01.01.org \ --cc=linux-xfs@vger.kernel.org \ --cc=ross.zwisler@linux.intel.com \ --subject='Re: [PATCH 07/12] xfs: fix locking for DAX writes' \ /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
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.