提交 359c92c0 编写于 作者: L Linus Torvalds

Merge tag 'dax-fixes-5.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm

Pull dax fixes from Dan Williams:
 "A fix for an xfstest failure and some and an update that removes an
  fsdax dependency on block devices.

  Summary:

   - Fix RWF_NOWAIT writes to properly return -EAGAIN

   - Clean up an unused helper

   - Update dax_writeback_mapping_range to not need a block_device
     argument"

* tag 'dax-fixes-5.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm:
  dax: pass NOWAIT flag to iomap_apply
  dax: Get rid of fs_dax_get_by_host() helper
  dax: Pass dax_dev instead of bdev to dax_writeback_mapping_range()
...@@ -61,7 +61,7 @@ struct dax_device *fs_dax_get_by_bdev(struct block_device *bdev) ...@@ -61,7 +61,7 @@ struct dax_device *fs_dax_get_by_bdev(struct block_device *bdev)
{ {
if (!blk_queue_dax(bdev->bd_queue)) if (!blk_queue_dax(bdev->bd_queue))
return NULL; return NULL;
return fs_dax_get_by_host(bdev->bd_disk->disk_name); return dax_get_by_host(bdev->bd_disk->disk_name);
} }
EXPORT_SYMBOL_GPL(fs_dax_get_by_bdev); EXPORT_SYMBOL_GPL(fs_dax_get_by_bdev);
#endif #endif
......
...@@ -937,12 +937,11 @@ static int dax_writeback_one(struct xa_state *xas, struct dax_device *dax_dev, ...@@ -937,12 +937,11 @@ static int dax_writeback_one(struct xa_state *xas, struct dax_device *dax_dev,
* on persistent storage prior to completion of the operation. * on persistent storage prior to completion of the operation.
*/ */
int dax_writeback_mapping_range(struct address_space *mapping, int dax_writeback_mapping_range(struct address_space *mapping,
struct block_device *bdev, struct writeback_control *wbc) struct dax_device *dax_dev, struct writeback_control *wbc)
{ {
XA_STATE(xas, &mapping->i_pages, wbc->range_start >> PAGE_SHIFT); XA_STATE(xas, &mapping->i_pages, wbc->range_start >> PAGE_SHIFT);
struct inode *inode = mapping->host; struct inode *inode = mapping->host;
pgoff_t end_index = wbc->range_end >> PAGE_SHIFT; pgoff_t end_index = wbc->range_end >> PAGE_SHIFT;
struct dax_device *dax_dev;
void *entry; void *entry;
int ret = 0; int ret = 0;
unsigned int scanned = 0; unsigned int scanned = 0;
...@@ -953,10 +952,6 @@ int dax_writeback_mapping_range(struct address_space *mapping, ...@@ -953,10 +952,6 @@ int dax_writeback_mapping_range(struct address_space *mapping,
if (!mapping->nrexceptional || wbc->sync_mode != WB_SYNC_ALL) if (!mapping->nrexceptional || wbc->sync_mode != WB_SYNC_ALL)
return 0; return 0;
dax_dev = dax_get_by_host(bdev->bd_disk->disk_name);
if (!dax_dev)
return -EIO;
trace_dax_writeback_range(inode, xas.xa_index, end_index); trace_dax_writeback_range(inode, xas.xa_index, end_index);
tag_pages_for_writeback(mapping, xas.xa_index, end_index); tag_pages_for_writeback(mapping, xas.xa_index, end_index);
...@@ -977,7 +972,6 @@ int dax_writeback_mapping_range(struct address_space *mapping, ...@@ -977,7 +972,6 @@ int dax_writeback_mapping_range(struct address_space *mapping,
xas_lock_irq(&xas); xas_lock_irq(&xas);
} }
xas_unlock_irq(&xas); xas_unlock_irq(&xas);
put_dax(dax_dev);
trace_dax_writeback_range_done(inode, xas.xa_index, end_index); trace_dax_writeback_range_done(inode, xas.xa_index, end_index);
return ret; return ret;
} }
...@@ -1207,6 +1201,9 @@ dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter, ...@@ -1207,6 +1201,9 @@ dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter,
lockdep_assert_held(&inode->i_rwsem); lockdep_assert_held(&inode->i_rwsem);
} }
if (iocb->ki_flags & IOCB_NOWAIT)
flags |= IOMAP_NOWAIT;
while (iov_iter_count(iter)) { while (iov_iter_count(iter)) {
ret = iomap_apply(inode, pos, iov_iter_count(iter), flags, ops, ret = iomap_apply(inode, pos, iov_iter_count(iter), flags, ops,
iter, dax_iomap_actor); iter, dax_iomap_actor);
......
...@@ -960,8 +960,9 @@ ext2_writepages(struct address_space *mapping, struct writeback_control *wbc) ...@@ -960,8 +960,9 @@ ext2_writepages(struct address_space *mapping, struct writeback_control *wbc)
static int static int
ext2_dax_writepages(struct address_space *mapping, struct writeback_control *wbc) ext2_dax_writepages(struct address_space *mapping, struct writeback_control *wbc)
{ {
return dax_writeback_mapping_range(mapping, struct ext2_sb_info *sbi = EXT2_SB(mapping->host->i_sb);
mapping->host->i_sb->s_bdev, wbc);
return dax_writeback_mapping_range(mapping, sbi->s_daxdev, wbc);
} }
const struct address_space_operations ext2_aops = { const struct address_space_operations ext2_aops = {
......
...@@ -2867,7 +2867,7 @@ static int ext4_dax_writepages(struct address_space *mapping, ...@@ -2867,7 +2867,7 @@ static int ext4_dax_writepages(struct address_space *mapping,
percpu_down_read(&sbi->s_journal_flag_rwsem); percpu_down_read(&sbi->s_journal_flag_rwsem);
trace_ext4_writepages(inode, wbc); trace_ext4_writepages(inode, wbc);
ret = dax_writeback_mapping_range(mapping, inode->i_sb->s_bdev, wbc); ret = dax_writeback_mapping_range(mapping, sbi->s_daxdev, wbc);
trace_ext4_writepages_result(inode, wbc, ret, trace_ext4_writepages_result(inode, wbc, ret,
nr_to_write - wbc->nr_to_write); nr_to_write - wbc->nr_to_write);
percpu_up_read(&sbi->s_journal_flag_rwsem); percpu_up_read(&sbi->s_journal_flag_rwsem);
......
...@@ -587,7 +587,7 @@ xfs_dax_writepages( ...@@ -587,7 +587,7 @@ xfs_dax_writepages(
xfs_iflags_clear(ip, XFS_ITRUNCATED); xfs_iflags_clear(ip, XFS_ITRUNCATED);
return dax_writeback_mapping_range(mapping, return dax_writeback_mapping_range(mapping,
xfs_inode_buftarg(ip)->bt_bdev, wbc); xfs_inode_buftarg(ip)->bt_daxdev, wbc);
} }
STATIC sector_t STATIC sector_t
......
...@@ -129,11 +129,6 @@ static inline bool generic_fsdax_supported(struct dax_device *dax_dev, ...@@ -129,11 +129,6 @@ static inline bool generic_fsdax_supported(struct dax_device *dax_dev,
sectors); sectors);
} }
static inline struct dax_device *fs_dax_get_by_host(const char *host)
{
return dax_get_by_host(host);
}
static inline void fs_put_dax(struct dax_device *dax_dev) static inline void fs_put_dax(struct dax_device *dax_dev)
{ {
put_dax(dax_dev); put_dax(dax_dev);
...@@ -141,7 +136,7 @@ static inline void fs_put_dax(struct dax_device *dax_dev) ...@@ -141,7 +136,7 @@ static inline void fs_put_dax(struct dax_device *dax_dev)
struct dax_device *fs_dax_get_by_bdev(struct block_device *bdev); struct dax_device *fs_dax_get_by_bdev(struct block_device *bdev);
int dax_writeback_mapping_range(struct address_space *mapping, int dax_writeback_mapping_range(struct address_space *mapping,
struct block_device *bdev, struct writeback_control *wbc); struct dax_device *dax_dev, struct writeback_control *wbc);
struct page *dax_layout_busy_page(struct address_space *mapping); struct page *dax_layout_busy_page(struct address_space *mapping);
dax_entry_t dax_lock_page(struct page *page); dax_entry_t dax_lock_page(struct page *page);
...@@ -160,11 +155,6 @@ static inline bool generic_fsdax_supported(struct dax_device *dax_dev, ...@@ -160,11 +155,6 @@ static inline bool generic_fsdax_supported(struct dax_device *dax_dev,
return false; return false;
} }
static inline struct dax_device *fs_dax_get_by_host(const char *host)
{
return NULL;
}
static inline void fs_put_dax(struct dax_device *dax_dev) static inline void fs_put_dax(struct dax_device *dax_dev)
{ {
} }
...@@ -180,7 +170,7 @@ static inline struct page *dax_layout_busy_page(struct address_space *mapping) ...@@ -180,7 +170,7 @@ static inline struct page *dax_layout_busy_page(struct address_space *mapping)
} }
static inline int dax_writeback_mapping_range(struct address_space *mapping, static inline int dax_writeback_mapping_range(struct address_space *mapping,
struct block_device *bdev, struct writeback_control *wbc) struct dax_device *dax_dev, struct writeback_control *wbc)
{ {
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册