From: Ross Zwisler <ross.zwisler@linux.intel.com>
To: Ross Zwisler <ross.zwisler@linux.intel.com>,
Jan Kara <jack@suse.cz>,
linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org,
linux-mm@kvack.org, linux-nvdimm@lists.01.org,
Johannes Weiner <hannes@cmpxchg.org>
Subject: Re: [PATCH 5/6] dax: Call ->iomap_begin without entry lock during dax fault
Date: Thu, 1 Dec 2016 16:27:04 -0700 [thread overview]
Message-ID: <20161201232704.GC13739@linux.intel.com> (raw)
In-Reply-To: <20161201222447.GB13739@linux.intel.com>
On Thu, Dec 01, 2016 at 03:24:47PM -0700, Ross Zwisler wrote:
> On Thu, Nov 24, 2016 at 10:46:35AM +0100, Jan Kara wrote:
> > Currently ->iomap_begin() handler is called with entry lock held. If the
> > filesystem held any locks between ->iomap_begin() and ->iomap_end()
> > (such as ext4 which will want to hold transaction open), this would cause
> > lock inversion with the iomap_apply() from standard IO path which first
> > calls ->iomap_begin() and only then calls ->actor() callback which grabs
> > entry locks for DAX.
>
> I don't see the dax_iomap_actor() grabbing any entry locks for DAX? Is this
> an issue currently, or are you just trying to make the code consistent so we
> don't run into issues in the future?
Ah, I see that you use this new ordering in patch 6/6 so that you can change
your interaction with the ext4 journal. I'm still curious if we have a lock
ordering inversion within DAX, but if this ordering helps you with ext4, good
enough.
One quick comment:
> @@ -1337,19 +1353,10 @@ int dax_iomap_pmd_fault(struct vm_area_struct *vma, unsigned long address,
> */
> entry = grab_mapping_entry(mapping, pgoff, RADIX_DAX_PMD);
> if (IS_ERR(entry))
> - goto fallback;
> + goto finish_iomap;
>
> - /*
> - * Note that we don't use iomap_apply here. We aren't doing I/O, only
> - * setting up a mapping, so really we're using iomap_begin() as a way
> - * to look up our filesystem block.
> - */
> - pos = (loff_t)pgoff << PAGE_SHIFT;
> - error = ops->iomap_begin(inode, pos, PMD_SIZE, iomap_flags, &iomap);
> - if (error)
> - goto unlock_entry;
> if (iomap.offset + iomap.length < pos + PMD_SIZE)
> - goto finish_iomap;
> + goto unlock_entry;
I think this offset+length bounds check could be moved along with the
iomap_begin() call up above the grab_mapping_entry(). You would then goto
'finish_iomap' if you hit this error condition, allowing you to avoid grabbing
and releasing of the mapping entry.
Other than that one small nit, this looks fine to me:
Reviewed-by: Ross Zwisler <ross.zwisler@linux.intel.com>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: Ross Zwisler <ross.zwisler@linux.intel.com>
To: Ross Zwisler <ross.zwisler@linux.intel.com>,
Jan Kara <jack@suse.cz>,
linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org,
linux-mm@kvack.org, linux-nvdimm@lists.01.org,
Johannes Weiner <hannes@cmpxchg.org>
Subject: Re: [PATCH 5/6] dax: Call ->iomap_begin without entry lock during dax fault
Date: Thu, 1 Dec 2016 16:27:04 -0700 [thread overview]
Message-ID: <20161201232704.GC13739@linux.intel.com> (raw)
In-Reply-To: <20161201222447.GB13739@linux.intel.com>
On Thu, Dec 01, 2016 at 03:24:47PM -0700, Ross Zwisler wrote:
> On Thu, Nov 24, 2016 at 10:46:35AM +0100, Jan Kara wrote:
> > Currently ->iomap_begin() handler is called with entry lock held. If the
> > filesystem held any locks between ->iomap_begin() and ->iomap_end()
> > (such as ext4 which will want to hold transaction open), this would cause
> > lock inversion with the iomap_apply() from standard IO path which first
> > calls ->iomap_begin() and only then calls ->actor() callback which grabs
> > entry locks for DAX.
>
> I don't see the dax_iomap_actor() grabbing any entry locks for DAX? Is this
> an issue currently, or are you just trying to make the code consistent so we
> don't run into issues in the future?
Ah, I see that you use this new ordering in patch 6/6 so that you can change
your interaction with the ext4 journal. I'm still curious if we have a lock
ordering inversion within DAX, but if this ordering helps you with ext4, good
enough.
One quick comment:
> @@ -1337,19 +1353,10 @@ int dax_iomap_pmd_fault(struct vm_area_struct *vma, unsigned long address,
> */
> entry = grab_mapping_entry(mapping, pgoff, RADIX_DAX_PMD);
> if (IS_ERR(entry))
> - goto fallback;
> + goto finish_iomap;
>
> - /*
> - * Note that we don't use iomap_apply here. We aren't doing I/O, only
> - * setting up a mapping, so really we're using iomap_begin() as a way
> - * to look up our filesystem block.
> - */
> - pos = (loff_t)pgoff << PAGE_SHIFT;
> - error = ops->iomap_begin(inode, pos, PMD_SIZE, iomap_flags, &iomap);
> - if (error)
> - goto unlock_entry;
> if (iomap.offset + iomap.length < pos + PMD_SIZE)
> - goto finish_iomap;
> + goto unlock_entry;
I think this offset+length bounds check could be moved along with the
iomap_begin() call up above the grab_mapping_entry(). You would then goto
'finish_iomap' if you hit this error condition, allowing you to avoid grabbing
and releasing of the mapping entry.
Other than that one small nit, this looks fine to me:
Reviewed-by: Ross Zwisler <ross.zwisler@linux.intel.com>
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm
next prev parent reply other threads:[~2016-12-01 23:27 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-24 9:46 [PATCH 0/6 v2] dax: Page invalidation fixes Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-11-24 9:46 ` [PATCH 1/6] ext2: Return BH_New buffers for zeroed blocks Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-11-29 17:48 ` Ross Zwisler
2016-11-29 17:48 ` Ross Zwisler
[not found] ` <1479980796-26161-1-git-send-email-jack-AlSwsSmVLrQ@public.gmane.org>
2016-11-24 9:46 ` [PATCH 2/6] mm: Invalidate DAX radix tree entries only if appropriate Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-11-29 19:34 ` Johannes Weiner
2016-11-29 19:34 ` Johannes Weiner
[not found] ` <20161129193403.GA12396-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2016-11-30 8:08 ` Jan Kara
2016-11-30 8:08 ` Jan Kara
2016-11-30 8:08 ` Jan Kara
[not found] ` <20161130080841.GD16667-4I4JzKEfoa/jFM9bn6wA6Q@public.gmane.org>
2016-11-30 15:59 ` Johannes Weiner
2016-11-30 15:59 ` Johannes Weiner
2016-12-09 12:02 ` Jan Kara
2016-12-09 12:02 ` Jan Kara
2016-11-29 22:17 ` Ross Zwisler
2016-11-24 9:46 ` [PATCH 3/6] dax: Avoid page invalidation races and unnecessary radix tree traversals Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-11-24 9:46 ` Jan Kara
[not found] ` <1479980796-26161-4-git-send-email-jack-AlSwsSmVLrQ@public.gmane.org>
2016-11-29 22:31 ` Ross Zwisler
2016-11-29 22:31 ` Ross Zwisler
2016-11-29 22:31 ` Ross Zwisler
2016-11-30 8:23 ` Jan Kara
2016-11-30 8:23 ` Jan Kara
2016-11-24 9:46 ` [PATCH 4/6] dax: Finish fault completely when loading holes Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-11-24 9:46 ` Jan Kara
[not found] ` <1479980796-26161-5-git-send-email-jack-AlSwsSmVLrQ@public.gmane.org>
2016-12-01 22:13 ` Ross Zwisler
2016-12-01 22:13 ` Ross Zwisler
2016-11-24 9:46 ` [PATCH 6/6] ext4: Simplify DAX fault path Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-11-24 9:46 ` [PATCH 5/6] dax: Call ->iomap_begin without entry lock during dax fault Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-11-24 9:46 ` Jan Kara
2016-12-01 22:24 ` Ross Zwisler
2016-12-01 22:24 ` Ross Zwisler
2016-12-01 23:27 ` Ross Zwisler [this message]
2016-12-01 23:27 ` Ross Zwisler
2016-12-02 10:12 ` Jan Kara
2016-12-02 10:08 ` Jan Kara
2016-12-02 10:08 ` Jan Kara
-- strict thread matches above, loose matches on Subject: below --
2016-12-12 16:47 [PATCH 0/6 v3] dax: Page invalidation fixes Jan Kara
2016-12-12 16:47 ` [PATCH 5/6] dax: Call ->iomap_begin without entry lock during dax fault Jan Kara
2016-12-12 16:47 ` Jan Kara
2016-12-12 16:47 ` Jan Kara
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=20161201232704.GC13739@linux.intel.com \
--to=ross.zwisler@linux.intel.com \
--cc=hannes@cmpxchg.org \
--cc=jack@suse.cz \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-nvdimm@lists.01.org \
/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.