Skip to content

Commit

Permalink
virtiofs: define dax address space operations
Browse files Browse the repository at this point in the history
This is done along the lines of ext4 and xfs.  I primarily wanted
->writepages hook at this time so that I could call into
dax_writeback_mapping_range().  This in turn will decide which pfns need to
be written back.

Signed-off-by: Vivek Goyal <[email protected]>
Signed-off-by: Miklos Szeredi <[email protected]>
  • Loading branch information
rhvgoyal authored and Miklos Szeredi committed Sep 10, 2020
1 parent 2a9a609 commit 9483e7d
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions fs/fuse/dax.c
Original file line number Diff line number Diff line change
Expand Up @@ -575,6 +575,16 @@ ssize_t fuse_dax_write_iter(struct kiocb *iocb, struct iov_iter *from)
return ret;
}

static int fuse_dax_writepages(struct address_space *mapping,
struct writeback_control *wbc)
{

struct inode *inode = mapping->host;
struct fuse_conn *fc = get_fuse_conn(inode);

return dax_writeback_mapping_range(mapping, fc->dax->dev, wbc);
}

static vm_fault_t __fuse_dax_fault(struct vm_fault *vmf,
enum page_entry_size pe_size, bool write)
{
Expand Down Expand Up @@ -741,6 +751,13 @@ bool fuse_dax_inode_alloc(struct super_block *sb, struct fuse_inode *fi)
return true;
}

static const struct address_space_operations fuse_dax_file_aops = {
.writepages = fuse_dax_writepages,
.direct_IO = noop_direct_IO,
.set_page_dirty = noop_set_page_dirty,
.invalidatepage = noop_invalidatepage,
};

void fuse_dax_inode_init(struct inode *inode)
{
struct fuse_conn *fc = get_fuse_conn(inode);
Expand All @@ -749,6 +766,7 @@ void fuse_dax_inode_init(struct inode *inode)
return;

inode->i_flags |= S_DAX;
inode->i_data.a_ops = &fuse_dax_file_aops;
}

bool fuse_dax_check_alignment(struct fuse_conn *fc, unsigned int map_alignment)
Expand Down

0 comments on commit 9483e7d

Please sign in to comment.