Skip to content
Permalink
Browse files
afs: Use the netfs write helpers
Make afs use the netfs write helpers.

Signed-off-by: David Howells <dhowells@redhat.com>
  • Loading branch information
dhowells committed Feb 16, 2022
1 parent 7b4c488 commit b1f2f7eee31062dfb5b817b8b98980273c39a6bf
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 409 deletions.
@@ -31,7 +31,7 @@ const struct file_operations afs_file_operations = {
.release = afs_release,
.llseek = generic_file_llseek,
.read_iter = afs_file_read_iter,
.write_iter = afs_file_write,
.write_iter = netfs_file_write_iter,
.mmap = afs_file_mmap,
.splice_read = generic_file_splice_read,
.splice_write = iter_file_splice_write,
@@ -54,10 +54,8 @@ const struct address_space_operations afs_file_aops = {
.launder_page = afs_launder_page,
.releasepage = netfs_releasepage,
.invalidatepage = netfs_invalidatepage,
.write_begin = afs_write_begin,
.write_end = afs_write_end,
.writepage = afs_writepage,
.writepages = afs_writepages,
.writepages = netfs_writepages,
};

const struct address_space_operations afs_symlink_aops = {
@@ -71,7 +69,7 @@ static const struct vm_operations_struct afs_vm_ops = {
.close = afs_vm_close,
.fault = filemap_fault,
.map_pages = afs_vm_map_pages,
.page_mkwrite = afs_page_mkwrite,
.page_mkwrite = netfs_page_mkwrite,
};

/*
@@ -371,11 +369,66 @@ static void afs_priv_cleanup(struct address_space *mapping, void *netfs_priv)
key_put(netfs_priv);
}

static void afs_init_dirty_region(struct netfs_dirty_region *region, struct file *file)
{
region->netfs_priv = key_get(afs_file_key(file));
}

static void afs_split_dirty_region(struct netfs_dirty_region *region)
{
key_get(region->netfs_priv);
}

static void afs_free_dirty_region(struct netfs_dirty_region *region)
{
key_put(region->netfs_priv);
}

static void afs_init_writeback(struct netfs_writeback *wback)
{
//wback->netfs_priv = key_get(afs_file_key(file));
}

static void afs_update_i_size(struct file *file, loff_t new_i_size)
{
struct afs_vnode *vnode = AFS_FS_I(file_inode(file));
loff_t i_size;

write_seqlock(&vnode->cb_lock);
i_size = i_size_read(&vnode->vfs_inode);
if (new_i_size > i_size) {
i_size_write(&vnode->vfs_inode, new_i_size);
inode_set_bytes(&vnode->vfs_inode, new_i_size);
}
write_sequnlock(&vnode->cb_lock);
fscache_update_cookie(afs_vnode_cache(vnode), NULL, &new_i_size);
}

static int afs_validate_for_write(struct inode *inode, struct file *file)
{
return afs_validate(AFS_FS_I(inode), afs_file_key(file));
}

static void afs_netfs_invalidate_cache(struct netfs_writeback *wback)
{
struct afs_vnode *vnode = AFS_FS_I(wback->inode);

afs_invalidate_cache(vnode, 0);
}

const struct netfs_request_ops afs_req_ops = {
.init_rreq = afs_init_rreq,
.check_write_begin = afs_check_write_begin,
.issue_op = afs_req_issue_op,
.cleanup = afs_priv_cleanup,
.init_dirty_region = afs_init_dirty_region,
.split_dirty_region = afs_split_dirty_region,
.free_dirty_region = afs_free_dirty_region,
.update_i_size = afs_update_i_size,
.validate_for_write = afs_validate_for_write,
.invalidate_cache = afs_netfs_invalidate_cache,
.init_writeback = afs_init_writeback,
.create_write_requests = afs_create_write_requests,
};

int afs_write_inode(struct inode *inode, struct writeback_control *wbc)
@@ -61,7 +61,9 @@ static void afs_set_netfs_context(struct afs_vnode *vnode)
struct netfs_i_context *ctx = netfs_i_context(&vnode->vfs_inode);

netfs_i_context_init(&vnode->vfs_inode, &afs_req_ops);
ctx->rsize = 4 * 1024 * 1024;
ctx->wsize = 16*1024*1024; // 0x33333;
//ctx->min_bshift = ilog2(0x10000);
//ctx->obj_bshift = ilog2(0x40000);
}

/*
@@ -1533,19 +1533,11 @@ extern int afs_set_page_dirty(struct page *);
#else
#define afs_set_page_dirty __set_page_dirty_nobuffers
#endif
extern int afs_write_begin(struct file *file, struct address_space *mapping,
loff_t pos, unsigned len, unsigned flags,
struct page **pagep, void **fsdata);
extern int afs_write_end(struct file *file, struct address_space *mapping,
loff_t pos, unsigned len, unsigned copied,
struct page *page, void *fsdata);
extern int afs_writepage(struct page *, struct writeback_control *);
extern int afs_writepages(struct address_space *, struct writeback_control *);
extern ssize_t afs_file_write(struct kiocb *, struct iov_iter *);
extern int afs_fsync(struct file *, loff_t, loff_t, int);
extern vm_fault_t afs_page_mkwrite(struct vm_fault *vmf);
extern void afs_prune_wb_keys(struct afs_vnode *);
extern int afs_launder_page(struct page *);
extern void afs_create_write_requests(struct netfs_writeback *);

/*
* xattr.c

0 comments on commit b1f2f7e

Please sign in to comment.