dax.c (c6f40468657d16e4010ef84bf32a761feb3469ea) dax.c (952da06375c8f3aa58474fff718d9ae8442531b9)
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * fs/dax.c - Direct Access filesystem code
4 * Copyright (c) 2013-2014 Intel Corporation
5 * Author: Matthew Wilcox <matthew.r.wilcox@intel.com>
6 * Author: Ross Zwisler <ross.zwisler@linux.intel.com>
7 */
8

--- 1166 unchanged lines hidden (view full) ---

1175
1176int dax_zero_range(struct inode *inode, loff_t pos, loff_t len, bool *did_zero,
1177 const struct iomap_ops *ops)
1178{
1179 struct iomap_iter iter = {
1180 .inode = inode,
1181 .pos = pos,
1182 .len = len,
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * fs/dax.c - Direct Access filesystem code
4 * Copyright (c) 2013-2014 Intel Corporation
5 * Author: Matthew Wilcox <matthew.r.wilcox@intel.com>
6 * Author: Ross Zwisler <ross.zwisler@linux.intel.com>
7 */
8

--- 1166 unchanged lines hidden (view full) ---

1175
1176int dax_zero_range(struct inode *inode, loff_t pos, loff_t len, bool *did_zero,
1177 const struct iomap_ops *ops)
1178{
1179 struct iomap_iter iter = {
1180 .inode = inode,
1181 .pos = pos,
1182 .len = len,
1183 .flags = IOMAP_ZERO,
1183 .flags = IOMAP_DAX | IOMAP_ZERO,
1184 };
1185 int ret;
1186
1187 while ((ret = iomap_iter(&iter, ops)) > 0)
1188 iter.processed = dax_zero_iter(&iter, did_zero);
1189 return ret;
1190}
1191EXPORT_SYMBOL_GPL(dax_zero_range);

--- 111 unchanged lines hidden (view full) ---

1303ssize_t
1304dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter,
1305 const struct iomap_ops *ops)
1306{
1307 struct iomap_iter iomi = {
1308 .inode = iocb->ki_filp->f_mapping->host,
1309 .pos = iocb->ki_pos,
1310 .len = iov_iter_count(iter),
1184 };
1185 int ret;
1186
1187 while ((ret = iomap_iter(&iter, ops)) > 0)
1188 iter.processed = dax_zero_iter(&iter, did_zero);
1189 return ret;
1190}
1191EXPORT_SYMBOL_GPL(dax_zero_range);

--- 111 unchanged lines hidden (view full) ---

1303ssize_t
1304dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter,
1305 const struct iomap_ops *ops)
1306{
1307 struct iomap_iter iomi = {
1308 .inode = iocb->ki_filp->f_mapping->host,
1309 .pos = iocb->ki_pos,
1310 .len = iov_iter_count(iter),
1311 .flags = IOMAP_DAX,
1311 };
1312 loff_t done = 0;
1313 int ret;
1314
1315 if (iov_iter_rw(iter) == WRITE) {
1316 lockdep_assert_held_write(&iomi.inode->i_rwsem);
1317 iomi.flags |= IOMAP_WRITE;
1318 } else {

--- 137 unchanged lines hidden (view full) ---

1456 int *iomap_errp, const struct iomap_ops *ops)
1457{
1458 struct address_space *mapping = vmf->vma->vm_file->f_mapping;
1459 XA_STATE(xas, &mapping->i_pages, vmf->pgoff);
1460 struct iomap_iter iter = {
1461 .inode = mapping->host,
1462 .pos = (loff_t)vmf->pgoff << PAGE_SHIFT,
1463 .len = PAGE_SIZE,
1312 };
1313 loff_t done = 0;
1314 int ret;
1315
1316 if (iov_iter_rw(iter) == WRITE) {
1317 lockdep_assert_held_write(&iomi.inode->i_rwsem);
1318 iomi.flags |= IOMAP_WRITE;
1319 } else {

--- 137 unchanged lines hidden (view full) ---

1457 int *iomap_errp, const struct iomap_ops *ops)
1458{
1459 struct address_space *mapping = vmf->vma->vm_file->f_mapping;
1460 XA_STATE(xas, &mapping->i_pages, vmf->pgoff);
1461 struct iomap_iter iter = {
1462 .inode = mapping->host,
1463 .pos = (loff_t)vmf->pgoff << PAGE_SHIFT,
1464 .len = PAGE_SIZE,
1464 .flags = IOMAP_FAULT,
1465 .flags = IOMAP_DAX | IOMAP_FAULT,
1465 };
1466 vm_fault_t ret = 0;
1467 void *entry;
1468 int error;
1469
1470 trace_dax_pte_fault(iter.inode, vmf, ret);
1471 /*
1472 * Check whether offset isn't beyond end of file now. Caller is supposed

--- 92 unchanged lines hidden (view full) ---

1565static vm_fault_t dax_iomap_pmd_fault(struct vm_fault *vmf, pfn_t *pfnp,
1566 const struct iomap_ops *ops)
1567{
1568 struct address_space *mapping = vmf->vma->vm_file->f_mapping;
1569 XA_STATE_ORDER(xas, &mapping->i_pages, vmf->pgoff, PMD_ORDER);
1570 struct iomap_iter iter = {
1571 .inode = mapping->host,
1572 .len = PMD_SIZE,
1466 };
1467 vm_fault_t ret = 0;
1468 void *entry;
1469 int error;
1470
1471 trace_dax_pte_fault(iter.inode, vmf, ret);
1472 /*
1473 * Check whether offset isn't beyond end of file now. Caller is supposed

--- 92 unchanged lines hidden (view full) ---

1566static vm_fault_t dax_iomap_pmd_fault(struct vm_fault *vmf, pfn_t *pfnp,
1567 const struct iomap_ops *ops)
1568{
1569 struct address_space *mapping = vmf->vma->vm_file->f_mapping;
1570 XA_STATE_ORDER(xas, &mapping->i_pages, vmf->pgoff, PMD_ORDER);
1571 struct iomap_iter iter = {
1572 .inode = mapping->host,
1573 .len = PMD_SIZE,
1573 .flags = IOMAP_FAULT,
1574 .flags = IOMAP_DAX | IOMAP_FAULT,
1574 };
1575 vm_fault_t ret = VM_FAULT_FALLBACK;
1576 pgoff_t max_pgoff;
1577 void *entry;
1578 int error;
1579
1580 if (vmf->flags & FAULT_FLAG_WRITE)
1581 iter.flags |= IOMAP_WRITE;

--- 166 unchanged lines hidden ---
1575 };
1576 vm_fault_t ret = VM_FAULT_FALLBACK;
1577 pgoff_t max_pgoff;
1578 void *entry;
1579 int error;
1580
1581 if (vmf->flags & FAULT_FLAG_WRITE)
1582 iter.flags |= IOMAP_WRITE;

--- 166 unchanged lines hidden ---