mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-06 02:24:14 +08:00
libnvdimm/dax for 4.19-rc6
* (2) fixes for the dax error handling updates that were merged for v4.19-rc1. My mails to Al have been bouncing recently, so I do not have his ack but the uaccess change is of the trivial / obviously correct variety. The address_space_operations fixes a regression. * A filesystem-dax fix to correct the zero page lookup to be compatible with non-x86 (mips and s390) architectures. -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJbqoecAAoJEB7SkWpmfYgCaPYP/1Pf2ADt0pOskSk0ixM06UI9 1lR2g2/ICMc505+oB+wUv9TkZOh9jcIS9o8GfLhgNvP7AU4woRvudeyr4NUc0mdw rtHRA6TIimbXa3+O2qMg4gqUjXRxj6urQp5oeQi8mQ/vefZv1aisEw/Klae8klVC HGoMFii19WGXXyPM2vNUb2L+JGZt1p/nl/Z8ydPavn1XkIIGb7c+MivDiaemjjgT 487TmFULgLVhTCtQXlhkH7UCcCQ3+l3yxKaS1/g2hFpWE4LncBIvq8XBPwf5RQSL H/5rH/sd30XR2L0NMERxr0ENvCJf2iIf4bIqckODN4L9ojRE8zmBZMsSeRKmHufm 3ZfTBLHjPUwwKWy7PlKSsFk2J8KjErsqRlfZQSMSJShpEgL1jCjYtuTEtupaegbU v8TwzsNDgJ1B6JuKJ7lh7hOF7vUQ/i65xG8SFACvNoiih8RGSW3llra442k2hmFu IEMXa9S4tvqHfXUb0J/6hLLi+xoV+KsYPWRiCuovy7t6EfAWUnNuGCldjfsQtZZv npHS7F7lkWlSCneDbE4cMdkkwjBKjAw0sjIWDrPVVCoITVe1j9+bEwE9reX1VOS+ L+PB/WgcVH72MeiQnmPPTcUyEmNgCbku7NEhwrMHJngxuo9HmXE+BN8jdFDYZFfL uWDV25XOxviOC9xBosw4 =mAaH -----END PGP SIGNATURE----- erge tag 'libnvdimm-fixes-4.19-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm Dan writes: "libnvdimm/dax for 4.19-rc6 * (2) fixes for the dax error handling updates that were merged for v4.19-rc1. My mails to Al have been bouncing recently, so I do not have his ack but the uaccess change is of the trivial / obviously correct variety. The address_space_operations fixes a regression. * A filesystem-dax fix to correct the zero page lookup to be compatible with non-x86 (mips and s390) architectures." * tag 'libnvdimm-fixes-4.19-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm: device-dax: Add missing address_space_operations uaccess: Fix is_source param for check_copy_size() in copy_to_iter_mcsafe() filesystem-dax: Fix use of zero page
This commit is contained in:
commit
a38523185b
@ -535,6 +535,11 @@ static unsigned long dax_get_unmapped_area(struct file *filp,
|
|||||||
return current->mm->get_unmapped_area(filp, addr, len, pgoff, flags);
|
return current->mm->get_unmapped_area(filp, addr, len, pgoff, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct address_space_operations dev_dax_aops = {
|
||||||
|
.set_page_dirty = noop_set_page_dirty,
|
||||||
|
.invalidatepage = noop_invalidatepage,
|
||||||
|
};
|
||||||
|
|
||||||
static int dax_open(struct inode *inode, struct file *filp)
|
static int dax_open(struct inode *inode, struct file *filp)
|
||||||
{
|
{
|
||||||
struct dax_device *dax_dev = inode_dax(inode);
|
struct dax_device *dax_dev = inode_dax(inode);
|
||||||
@ -544,6 +549,7 @@ static int dax_open(struct inode *inode, struct file *filp)
|
|||||||
dev_dbg(&dev_dax->dev, "trace\n");
|
dev_dbg(&dev_dax->dev, "trace\n");
|
||||||
inode->i_mapping = __dax_inode->i_mapping;
|
inode->i_mapping = __dax_inode->i_mapping;
|
||||||
inode->i_mapping->host = __dax_inode;
|
inode->i_mapping->host = __dax_inode;
|
||||||
|
inode->i_mapping->a_ops = &dev_dax_aops;
|
||||||
filp->f_mapping = inode->i_mapping;
|
filp->f_mapping = inode->i_mapping;
|
||||||
filp->f_wb_err = filemap_sample_wb_err(filp->f_mapping);
|
filp->f_wb_err = filemap_sample_wb_err(filp->f_mapping);
|
||||||
filp->private_data = dev_dax;
|
filp->private_data = dev_dax;
|
||||||
|
13
fs/dax.c
13
fs/dax.c
@ -1120,21 +1120,12 @@ static vm_fault_t dax_load_hole(struct address_space *mapping, void *entry,
|
|||||||
{
|
{
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
unsigned long vaddr = vmf->address;
|
unsigned long vaddr = vmf->address;
|
||||||
vm_fault_t ret = VM_FAULT_NOPAGE;
|
pfn_t pfn = pfn_to_pfn_t(my_zero_pfn(vaddr));
|
||||||
struct page *zero_page;
|
vm_fault_t ret;
|
||||||
pfn_t pfn;
|
|
||||||
|
|
||||||
zero_page = ZERO_PAGE(0);
|
|
||||||
if (unlikely(!zero_page)) {
|
|
||||||
ret = VM_FAULT_OOM;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
pfn = page_to_pfn_t(zero_page);
|
|
||||||
dax_insert_mapping_entry(mapping, vmf, entry, pfn, RADIX_DAX_ZERO_PAGE,
|
dax_insert_mapping_entry(mapping, vmf, entry, pfn, RADIX_DAX_ZERO_PAGE,
|
||||||
false);
|
false);
|
||||||
ret = vmf_insert_mixed(vmf->vma, vaddr, pfn);
|
ret = vmf_insert_mixed(vmf->vma, vaddr, pfn);
|
||||||
out:
|
|
||||||
trace_dax_load_hole(inode, vmf, ret);
|
trace_dax_load_hole(inode, vmf, ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -172,7 +172,7 @@ size_t copy_from_iter_flushcache(void *addr, size_t bytes, struct iov_iter *i)
|
|||||||
static __always_inline __must_check
|
static __always_inline __must_check
|
||||||
size_t copy_to_iter_mcsafe(void *addr, size_t bytes, struct iov_iter *i)
|
size_t copy_to_iter_mcsafe(void *addr, size_t bytes, struct iov_iter *i)
|
||||||
{
|
{
|
||||||
if (unlikely(!check_copy_size(addr, bytes, false)))
|
if (unlikely(!check_copy_size(addr, bytes, true)))
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
return _copy_to_iter_mcsafe(addr, bytes, i);
|
return _copy_to_iter_mcsafe(addr, bytes, i);
|
||||||
|
Loading…
Reference in New Issue
Block a user