Re: [ndctl PATCH] build: Use asciidoc instead of asciidoctor on RHEL
On Tue, 2020-10-06 at 17:15 -0700, Dan Williams wrote: > Until RHEL moves to asciidoctor fallback to the old asciidoc for RHEL > builds. > > Signed-off-by: Dan Williams > --- > ndctl.spec.in |7 ++- > 1 file changed, 6 insertions(+), 1 deletion(-) > Thanks Dan - looks good! I applied this and tested with a copr build for el8, and it all looks good: https://download.copr.fedorainfracloud.org/results/djbw/ndctl/epel-8-x86_64/01698754-ndctl/ > diff --git a/ndctl.spec.in b/ndctl.spec.in > index 94e15ad309c5..056c53069082 100644 > --- a/ndctl.spec.in > +++ b/ndctl.spec.in > @@ -9,7 +9,12 @@ Source0: > https://github.com/pmem/%{name}/archive/v%{version}.tar.gz#/%{name}-%{v > Requires:LNAME%{?_isa} = %{version}-%{release} > Requires:DAX_LNAME%{?_isa} = %{version}-%{release} > BuildRequires: autoconf > +%if 0%{?rhel} < 9 > +BuildRequires: asciidoc > +%define asciidoc --disable-asciidoctor > +%else > BuildRequires: rubygem-asciidoctor > +%endif > BuildRequires: xmlto > BuildRequires: automake > BuildRequires: libtool > @@ -86,7 +91,7 @@ control API for these devices. > %build > echo %{version} > version > ./autogen.sh > -%configure --disable-static --disable-silent-rules > +%configure --disable-static --disable-silent-rules %{?asciidoc} > make %{?_smp_mflags} > > %install > ___ Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org To unsubscribe send an email to linux-nvdimm-le...@lists.01.org
Re: [PATCH] ext4/xfs: add page refcount helper
On Wed, Oct 7, 2020 at 1:25 AM Jan Kara wrote: > > On Tue 06-10-20 16:09:30, Ralph Campbell wrote: > > There are several places where ZONE_DEVICE struct pages assume a reference > > count == 1 means the page is idle and free. Instead of open coding this, > > add a helper function to hide this detail. > > > > Signed-off-by: Ralph Campbell > > Reviewed-by: Christoph Hellwig > > Looks as sane direction but if we are going to abstract checks when > ZONE_DEVICE page is idle, we should also update e.g. > mm/swap.c:put_devmap_managed_page() or > mm/gup.c:__unpin_devmap_managed_user_page() (there may be more places like > this but I found at least these two...). Maybe Dan has more thoughts about > this. Yes, but I think that cleanup comes once the idle page count is unified to be 0 across typical and ZONE_DEVICE pages. Then free_devmap_managed_page() can be moved internal to __put_page(). For this patch it's just hiding the "idle == 1" assumption from dax-filesystems. ___ Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org To unsubscribe send an email to linux-nvdimm-le...@lists.01.org
[PATCH v2] ext4/xfs: add page refcount helper
There are several places where ZONE_DEVICE struct pages assume a reference count == 1 means the page is idle and free. Instead of open coding this, add helper functions to hide this detail. Signed-off-by: Ralph Campbell Reviewed-by: Christoph Hellwig Acked-by: Darrick J. Wong Acked-by: Theodore Ts'o # for fs/ext4/inode.c --- Changes in v2: I strongly resisted the idea of extending this patch but after Jan Kara's comment about there being more places that could be cleaned up, I felt compelled to make this one tensy wensy change to add a dax_wakeup_page() to match the dax_wait_page(). I kept the Reviewed/Acked-bys since I don't think this substantially changes the patch. fs/dax.c| 4 ++-- fs/ext4/inode.c | 5 + fs/xfs/xfs_file.c | 4 +--- include/linux/dax.h | 15 +++ mm/memremap.c | 3 ++- 5 files changed, 21 insertions(+), 10 deletions(-) diff --git a/fs/dax.c b/fs/dax.c index 5b47834f2e1b..85c63f735909 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -358,7 +358,7 @@ static void dax_disassociate_entry(void *entry, struct address_space *mapping, for_each_mapped_pfn(entry, pfn) { struct page *page = pfn_to_page(pfn); - WARN_ON_ONCE(trunc && page_ref_count(page) > 1); + WARN_ON_ONCE(trunc && !dax_layout_is_idle_page(page)); WARN_ON_ONCE(page->mapping && page->mapping != mapping); page->mapping = NULL; page->index = 0; @@ -372,7 +372,7 @@ static struct page *dax_busy_page(void *entry) for_each_mapped_pfn(entry, pfn) { struct page *page = pfn_to_page(pfn); - if (page_ref_count(page) > 1) + if (!dax_layout_is_idle_page(page)) return page; } return NULL; diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 771ed8b1fadb..132620cbfa13 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -3937,10 +3937,7 @@ int ext4_break_layouts(struct inode *inode) if (!page) return 0; - error = ___wait_var_event(>_refcount, - atomic_read(>_refcount) == 1, - TASK_INTERRUPTIBLE, 0, 0, - ext4_wait_dax_page(ei)); + error = dax_wait_page(ei, page, ext4_wait_dax_page); } while (error == 0); return error; diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 3d1b95124744..a5304aaeaa3a 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -749,9 +749,7 @@ xfs_break_dax_layouts( return 0; *retry = true; - return ___wait_var_event(>_refcount, - atomic_read(>_refcount) == 1, TASK_INTERRUPTIBLE, - 0, 0, xfs_wait_dax_page(inode)); + return dax_wait_page(inode, page, xfs_wait_dax_page); } int diff --git a/include/linux/dax.h b/include/linux/dax.h index b52f084aa643..e2da78e87338 100644 --- a/include/linux/dax.h +++ b/include/linux/dax.h @@ -243,6 +243,21 @@ static inline bool dax_mapping(struct address_space *mapping) return mapping->host && IS_DAX(mapping->host); } +static inline bool dax_layout_is_idle_page(struct page *page) +{ + return page_ref_count(page) == 1; +} + +static inline void dax_wakeup_page(struct page *page) +{ + wake_up_var(>_refcount); +} + +#define dax_wait_page(_inode, _page, _wait_cb) \ + ___wait_var_event(&(_page)->_refcount, \ + dax_layout_is_idle_page(_page), \ + TASK_INTERRUPTIBLE, 0, 0, _wait_cb(_inode)) + #ifdef CONFIG_DEV_DAX_HMEM_DEVICES void hmem_register_device(int target_nid, struct resource *r); #else diff --git a/mm/memremap.c b/mm/memremap.c index 2bb276680837..504a10ff2edf 100644 --- a/mm/memremap.c +++ b/mm/memremap.c @@ -12,6 +12,7 @@ #include #include #include +#include static DEFINE_XARRAY(pgmap_array); @@ -508,7 +509,7 @@ void free_devmap_managed_page(struct page *page) { /* notify page idle for dax */ if (!is_device_private_page(page)) { - wake_up_var(>_refcount); + dax_wakeup_page(page); return; } -- 2.20.1 ___ Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org To unsubscribe send an email to linux-nvdimm-le...@lists.01.org
[PATCH] x86/mce: Gate copy_mc_fragile() export by CONFIG_COPY_MC_TEST=y
It appears that modpost is not happy about exporting assembly symbols that are not consumed in the same build. As Boris reports: WARNING: modpost: EXPORT symbol "copy_mc_fragile" [vmlinux] version generation failed, symbol will not be versioned. The export is only consumed in the CONFIG_COPY_MC_TEST=y case, and even then not in a way that modpost could see. CONFIG_COPY_MC_TEST uses a module built in tools/testing/nvdimm/ to exercise the copy_mc_fragile() corner cases. Given the test already requires manually editing the config entry for CONFIG_COPY_MC_TEST to make it "def_bool y" the additional dependency to require is CONFIG_MODVERSIONS=n is not too onerous. Alternatively, COPY_MC_TEST and its related infrastructure could just be ripped out because it has served its purpose. For now, just stop exporting the symbol by default, and add the MODVERSIONS dependency to the test. Fixes: ec6347bb4339 ("x86, powerpc: Rename memcpy_mcsafe() to copy_mc_to_{user, kernel}()") Reported-by: Borislav Petkov Cc: Thomas Gleixner Cc: Ingo Molnar Cc: Borislav Petkov Cc: x...@kernel.org Cc: "H. Peter Anvin" Cc: Tony Luck Signed-off-by: Dan Williams --- arch/x86/Kconfig.debug|1 + arch/x86/lib/copy_mc_64.S |2 ++ 2 files changed, 3 insertions(+) diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug index 27b5e2bc6a01..6f0f5d8ac62e 100644 --- a/arch/x86/Kconfig.debug +++ b/arch/x86/Kconfig.debug @@ -63,6 +63,7 @@ config EARLY_PRINTK_USB_XDBC crashes or need a very simple printk logging facility. config COPY_MC_TEST + depends on !MODVERSIONS def_bool n config EFI_PGT_DUMP diff --git a/arch/x86/lib/copy_mc_64.S b/arch/x86/lib/copy_mc_64.S index 892d8915f609..50fb05256751 100644 --- a/arch/x86/lib/copy_mc_64.S +++ b/arch/x86/lib/copy_mc_64.S @@ -88,7 +88,9 @@ SYM_FUNC_START(copy_mc_fragile) .L_done: ret SYM_FUNC_END(copy_mc_fragile) +#ifdef CONFIG_COPY_MC_TEST EXPORT_SYMBOL_GPL(copy_mc_fragile) +#endif .section .fixup, "ax" /* ___ Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org To unsubscribe send an email to linux-nvdimm-le...@lists.01.org
Re: [PATCH] ext4/xfs: add page refcount helper
On 10/7/20 1:25 AM, Jan Kara wrote: On Tue 06-10-20 16:09:30, Ralph Campbell wrote: There are several places where ZONE_DEVICE struct pages assume a reference count == 1 means the page is idle and free. Instead of open coding this, add a helper function to hide this detail. Signed-off-by: Ralph Campbell Reviewed-by: Christoph Hellwig Looks as sane direction but if we are going to abstract checks when ZONE_DEVICE page is idle, we should also update e.g. mm/swap.c:put_devmap_managed_page() or mm/gup.c:__unpin_devmap_managed_user_page() (there may be more places like this but I found at least these two...). Maybe Dan has more thoughts about this. Honza I think this is a good point but I would like to make that a follow on patch rather than add to this one. ___ Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org To unsubscribe send an email to linux-nvdimm-le...@lists.01.org
UPS Invoice Notification
Your most recent UPS invoice for your account is now available.Please view and pay your invoice.For questions about your invoice, or invoice payment, please call (800) 811-1648 Monday through Friday 8:00 am to 9:00 pm Eastern Time.For technical support questions regarding your electronic invoicing, please call 877-289-6418.Thank you for using UPS.This is a post only email; please do not respond to this message.Notice: This email message and all attachments transmitted with it may contain proprietary information intended solely for the use of the addressee. If the reader of this message is not the intended recipient, you are hereby notified that any reading, dissemination, distribution, copying or other use of this message or its attachments is strictly prohibited. If you have received this message in error, please notify the sender immediately by electronic mail at customer.serv...@ups.com and delete this message and all copies and backups thereof. Thank you. ___ Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org To unsubscribe send an email to linux-nvdimm-le...@lists.01.org
Re: [PATCH] ext4/xfs: add page refcount helper
On Tue, Oct 06, 2020 at 04:09:30PM -0700, Ralph Campbell wrote: > There are several places where ZONE_DEVICE struct pages assume a reference > count == 1 means the page is idle and free. Instead of open coding this, > add a helper function to hide this detail. > > Signed-off-by: Ralph Campbell > Reviewed-by: Christoph Hellwig > --- > > I'm resending this as a separate patch since I think it is ready to > merge. Originally, this was part of an RFC and is unchanged from v3: > https://lore.kernel.org/linux-mm/20201001181715.17416-1-rcampb...@nvidia.com > > It applies cleanly to linux-5.9.0-rc7-mm1 but doesn't really > depend on anything, just simple merge conflicts when applied to > other trees. > I'll let the various maintainers decide which tree and when to merge. > It isn't urgent since it is a clean up patch. > > fs/dax.c| 4 ++-- > fs/ext4/inode.c | 5 + > fs/xfs/xfs_file.c | 4 +--- > include/linux/dax.h | 10 ++ > 4 files changed, 14 insertions(+), 9 deletions(-) > > diff --git a/fs/dax.c b/fs/dax.c > index 5b47834f2e1b..85c63f735909 100644 > --- a/fs/dax.c > +++ b/fs/dax.c > @@ -358,7 +358,7 @@ static void dax_disassociate_entry(void *entry, struct > address_space *mapping, > for_each_mapped_pfn(entry, pfn) { > struct page *page = pfn_to_page(pfn); > > - WARN_ON_ONCE(trunc && page_ref_count(page) > 1); > + WARN_ON_ONCE(trunc && !dax_layout_is_idle_page(page)); > WARN_ON_ONCE(page->mapping && page->mapping != mapping); > page->mapping = NULL; > page->index = 0; > @@ -372,7 +372,7 @@ static struct page *dax_busy_page(void *entry) > for_each_mapped_pfn(entry, pfn) { > struct page *page = pfn_to_page(pfn); > > - if (page_ref_count(page) > 1) > + if (!dax_layout_is_idle_page(page)) > return page; > } > return NULL; > diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c > index 771ed8b1fadb..132620cbfa13 100644 > --- a/fs/ext4/inode.c > +++ b/fs/ext4/inode.c > @@ -3937,10 +3937,7 @@ int ext4_break_layouts(struct inode *inode) > if (!page) > return 0; > > - error = ___wait_var_event(>_refcount, > - atomic_read(>_refcount) == 1, > - TASK_INTERRUPTIBLE, 0, 0, > - ext4_wait_dax_page(ei)); > + error = dax_wait_page(ei, page, ext4_wait_dax_page); > } while (error == 0); > > return error; > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index 3d1b95124744..a5304aaeaa3a 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -749,9 +749,7 @@ xfs_break_dax_layouts( > return 0; > > *retry = true; > - return ___wait_var_event(>_refcount, > - atomic_read(>_refcount) == 1, TASK_INTERRUPTIBLE, > - 0, 0, xfs_wait_dax_page(inode)); > + return dax_wait_page(inode, page, xfs_wait_dax_page); I don't mind this open-coded soup getting cleaned up into a macro, though my general opinion is that if the mm/dax developers are ok with this then: Acked-by: Darrick J. Wong --D > } > > int > diff --git a/include/linux/dax.h b/include/linux/dax.h > index b52f084aa643..8909a91cd381 100644 > --- a/include/linux/dax.h > +++ b/include/linux/dax.h > @@ -243,6 +243,16 @@ static inline bool dax_mapping(struct address_space > *mapping) > return mapping->host && IS_DAX(mapping->host); > } > > +static inline bool dax_layout_is_idle_page(struct page *page) > +{ > + return page_ref_count(page) == 1; > +} > + > +#define dax_wait_page(_inode, _page, _wait_cb) > \ > + ___wait_var_event(&(_page)->_refcount, \ > + dax_layout_is_idle_page(_page), \ > + TASK_INTERRUPTIBLE, 0, 0, _wait_cb(_inode)) > + > #ifdef CONFIG_DEV_DAX_HMEM_DEVICES > void hmem_register_device(int target_nid, struct resource *r); > #else > -- > 2.20.1 > ___ Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org To unsubscribe send an email to linux-nvdimm-le...@lists.01.org
Re: [PATCH] ext4/xfs: add page refcount helper
On Tue, Oct 06, 2020 at 07:40:05PM -0700, Dan Williams wrote: > On Tue, Oct 6, 2020 at 4:09 PM Ralph Campbell wrote: > > > > There are several places where ZONE_DEVICE struct pages assume a reference > > count == 1 means the page is idle and free. Instead of open coding this, > > add a helper function to hide this detail. > > > > Signed-off-by: Ralph Campbell > > Reviewed-by: Christoph Hellwig > > --- > > > > I'm resending this as a separate patch since I think it is ready to > > merge. Originally, this was part of an RFC and is unchanged from v3: > > https://lore.kernel.org/linux-mm/20201001181715.17416-1-rcampb...@nvidia.com > > > > It applies cleanly to linux-5.9.0-rc7-mm1 but doesn't really > > depend on anything, just simple merge conflicts when applied to > > other trees. > > I'll let the various maintainers decide which tree and when to merge. > > It isn't urgent since it is a clean up patch. > > Thanks Ralph, it looks good to me. Jan, or Ted care to ack? I don't > have much else pending for dax at the moment as Andrew is carrying my > dax updates for this cycle. Andrew please take this into -mm if you > get a chance. Otherwise I'll cycle back to it when some other dax > updates arrive in my queue. Acked-by: Theodore Ts'o # for fs/ext4/inode.c ___ Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org To unsubscribe send an email to linux-nvdimm-le...@lists.01.org
Re: [PATCH] ext4/xfs: add page refcount helper
On Tue 06-10-20 16:09:30, Ralph Campbell wrote: > There are several places where ZONE_DEVICE struct pages assume a reference > count == 1 means the page is idle and free. Instead of open coding this, > add a helper function to hide this detail. > > Signed-off-by: Ralph Campbell > Reviewed-by: Christoph Hellwig Looks as sane direction but if we are going to abstract checks when ZONE_DEVICE page is idle, we should also update e.g. mm/swap.c:put_devmap_managed_page() or mm/gup.c:__unpin_devmap_managed_user_page() (there may be more places like this but I found at least these two...). Maybe Dan has more thoughts about this. Honza > diff --git a/fs/dax.c b/fs/dax.c > index 5b47834f2e1b..85c63f735909 100644 > --- a/fs/dax.c > +++ b/fs/dax.c > @@ -358,7 +358,7 @@ static void dax_disassociate_entry(void *entry, struct > address_space *mapping, > for_each_mapped_pfn(entry, pfn) { > struct page *page = pfn_to_page(pfn); > > - WARN_ON_ONCE(trunc && page_ref_count(page) > 1); > + WARN_ON_ONCE(trunc && !dax_layout_is_idle_page(page)); > WARN_ON_ONCE(page->mapping && page->mapping != mapping); > page->mapping = NULL; > page->index = 0; > @@ -372,7 +372,7 @@ static struct page *dax_busy_page(void *entry) > for_each_mapped_pfn(entry, pfn) { > struct page *page = pfn_to_page(pfn); > > - if (page_ref_count(page) > 1) > + if (!dax_layout_is_idle_page(page)) > return page; > } > return NULL; > diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c > index 771ed8b1fadb..132620cbfa13 100644 > --- a/fs/ext4/inode.c > +++ b/fs/ext4/inode.c > @@ -3937,10 +3937,7 @@ int ext4_break_layouts(struct inode *inode) > if (!page) > return 0; > > - error = ___wait_var_event(>_refcount, > - atomic_read(>_refcount) == 1, > - TASK_INTERRUPTIBLE, 0, 0, > - ext4_wait_dax_page(ei)); > + error = dax_wait_page(ei, page, ext4_wait_dax_page); > } while (error == 0); > > return error; > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index 3d1b95124744..a5304aaeaa3a 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -749,9 +749,7 @@ xfs_break_dax_layouts( > return 0; > > *retry = true; > - return ___wait_var_event(>_refcount, > - atomic_read(>_refcount) == 1, TASK_INTERRUPTIBLE, > - 0, 0, xfs_wait_dax_page(inode)); > + return dax_wait_page(inode, page, xfs_wait_dax_page); > } > > int > diff --git a/include/linux/dax.h b/include/linux/dax.h > index b52f084aa643..8909a91cd381 100644 > --- a/include/linux/dax.h > +++ b/include/linux/dax.h > @@ -243,6 +243,16 @@ static inline bool dax_mapping(struct address_space > *mapping) > return mapping->host && IS_DAX(mapping->host); > } > > +static inline bool dax_layout_is_idle_page(struct page *page) > +{ > + return page_ref_count(page) == 1; > +} > + > +#define dax_wait_page(_inode, _page, _wait_cb) > \ > + ___wait_var_event(&(_page)->_refcount, \ > + dax_layout_is_idle_page(_page), \ > + TASK_INTERRUPTIBLE, 0, 0, _wait_cb(_inode)) > + > #ifdef CONFIG_DEV_DAX_HMEM_DEVICES > void hmem_register_device(int target_nid, struct resource *r); > #else > -- > 2.20.1 > -- Jan Kara SUSE Labs, CR ___ Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org To unsubscribe send an email to linux-nvdimm-le...@lists.01.org