Skip to content

Commit 3560358

Browse files
committed
afs: Use the netfs write helpers
Make afs use the netfs write helpers. Signed-off-by: David Howells <[email protected]> Reviewed-by: Jeff Layton <[email protected]> cc: Marc Dionne <[email protected]> cc: [email protected] cc: [email protected] cc: [email protected] cc: [email protected]
1 parent 545b135 commit 3560358

File tree

4 files changed

+84
-726
lines changed

4 files changed

+84
-726
lines changed

fs/afs/file.c

Lines changed: 54 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ const struct file_operations afs_file_operations = {
3434
.release = afs_release,
3535
.llseek = generic_file_llseek,
3636
.read_iter = afs_file_read_iter,
37-
.write_iter = afs_file_write,
37+
.write_iter = netfs_file_write_iter,
3838
.mmap = afs_file_mmap,
3939
.splice_read = afs_file_splice_read,
4040
.splice_write = iter_file_splice_write,
@@ -50,16 +50,15 @@ const struct inode_operations afs_file_inode_operations = {
5050
};
5151

5252
const struct address_space_operations afs_file_aops = {
53+
.direct_IO = noop_direct_IO,
5354
.read_folio = netfs_read_folio,
5455
.readahead = netfs_readahead,
5556
.dirty_folio = netfs_dirty_folio,
56-
.launder_folio = afs_launder_folio,
57+
.launder_folio = netfs_launder_folio,
5758
.release_folio = netfs_release_folio,
5859
.invalidate_folio = netfs_invalidate_folio,
59-
.write_begin = afs_write_begin,
60-
.write_end = afs_write_end,
61-
.writepages = afs_writepages,
6260
.migrate_folio = filemap_migrate_folio,
61+
.writepages = afs_writepages,
6362
};
6463

6564
const struct address_space_operations afs_symlink_aops = {
@@ -355,7 +354,10 @@ static int afs_symlink_read_folio(struct file *file, struct folio *folio)
355354

356355
static int afs_init_request(struct netfs_io_request *rreq, struct file *file)
357356
{
358-
rreq->netfs_priv = key_get(afs_file_key(file));
357+
if (file)
358+
rreq->netfs_priv = key_get(afs_file_key(file));
359+
rreq->rsize = 256 * 1024;
360+
rreq->wsize = 256 * 1024;
359361
return 0;
360362
}
361363

@@ -372,11 +374,36 @@ static void afs_free_request(struct netfs_io_request *rreq)
372374
key_put(rreq->netfs_priv);
373375
}
374376

377+
static void afs_update_i_size(struct inode *inode, loff_t new_i_size)
378+
{
379+
struct afs_vnode *vnode = AFS_FS_I(inode);
380+
loff_t i_size;
381+
382+
write_seqlock(&vnode->cb_lock);
383+
i_size = i_size_read(&vnode->netfs.inode);
384+
if (new_i_size > i_size) {
385+
i_size_write(&vnode->netfs.inode, new_i_size);
386+
inode_set_bytes(&vnode->netfs.inode, new_i_size);
387+
}
388+
write_sequnlock(&vnode->cb_lock);
389+
fscache_update_cookie(afs_vnode_cache(vnode), NULL, &new_i_size);
390+
}
391+
392+
static void afs_netfs_invalidate_cache(struct netfs_io_request *wreq)
393+
{
394+
struct afs_vnode *vnode = AFS_FS_I(wreq->inode);
395+
396+
afs_invalidate_cache(vnode, 0);
397+
}
398+
375399
const struct netfs_request_ops afs_req_ops = {
376400
.init_request = afs_init_request,
377401
.free_request = afs_free_request,
378402
.check_write_begin = afs_check_write_begin,
379403
.issue_read = afs_issue_read,
404+
.update_i_size = afs_update_i_size,
405+
.invalidate_cache = afs_netfs_invalidate_cache,
406+
.create_write_requests = afs_create_write_requests,
380407
};
381408

382409
static void afs_add_open_mmap(struct afs_vnode *vnode)
@@ -445,28 +472,39 @@ static vm_fault_t afs_vm_map_pages(struct vm_fault *vmf, pgoff_t start_pgoff, pg
445472

446473
static ssize_t afs_file_read_iter(struct kiocb *iocb, struct iov_iter *iter)
447474
{
448-
struct afs_vnode *vnode = AFS_FS_I(file_inode(iocb->ki_filp));
475+
struct inode *inode = file_inode(iocb->ki_filp);
476+
struct afs_vnode *vnode = AFS_FS_I(inode);
449477
struct afs_file *af = iocb->ki_filp->private_data;
450-
int ret;
478+
ssize_t ret;
451479

452-
ret = afs_validate(vnode, af->key);
480+
if (iocb->ki_flags & IOCB_DIRECT)
481+
return netfs_unbuffered_read_iter(iocb, iter);
482+
483+
ret = netfs_start_io_read(inode);
453484
if (ret < 0)
454485
return ret;
455-
456-
return generic_file_read_iter(iocb, iter);
486+
ret = afs_validate(vnode, af->key);
487+
if (ret == 0)
488+
ret = filemap_read(iocb, iter, 0);
489+
netfs_end_io_read(inode);
490+
return ret;
457491
}
458492

459493
static ssize_t afs_file_splice_read(struct file *in, loff_t *ppos,
460494
struct pipe_inode_info *pipe,
461495
size_t len, unsigned int flags)
462496
{
463-
struct afs_vnode *vnode = AFS_FS_I(file_inode(in));
497+
struct inode *inode = file_inode(in);
498+
struct afs_vnode *vnode = AFS_FS_I(inode);
464499
struct afs_file *af = in->private_data;
465-
int ret;
500+
ssize_t ret;
466501

467-
ret = afs_validate(vnode, af->key);
502+
ret = netfs_start_io_read(inode);
468503
if (ret < 0)
469504
return ret;
470-
471-
return filemap_splice_read(in, ppos, pipe, len, flags);
505+
ret = afs_validate(vnode, af->key);
506+
if (ret == 0)
507+
ret = filemap_splice_read(in, ppos, pipe, len, flags);
508+
netfs_end_io_read(inode);
509+
return ret;
472510
}

fs/afs/internal.h

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1465,19 +1465,11 @@ extern int afs_check_volume_status(struct afs_volume *, struct afs_operation *);
14651465
/*
14661466
* write.c
14671467
*/
1468-
extern int afs_write_begin(struct file *file, struct address_space *mapping,
1469-
loff_t pos, unsigned len,
1470-
struct page **pagep, void **fsdata);
1471-
extern int afs_write_end(struct file *file, struct address_space *mapping,
1472-
loff_t pos, unsigned len, unsigned copied,
1473-
struct page *page, void *fsdata);
1474-
extern int afs_writepage(struct page *, struct writeback_control *);
14751468
extern int afs_writepages(struct address_space *, struct writeback_control *);
1476-
extern ssize_t afs_file_write(struct kiocb *, struct iov_iter *);
14771469
extern int afs_fsync(struct file *, loff_t, loff_t, int);
14781470
extern vm_fault_t afs_page_mkwrite(struct vm_fault *vmf);
14791471
extern void afs_prune_wb_keys(struct afs_vnode *);
1480-
int afs_launder_folio(struct folio *);
1472+
void afs_create_write_requests(struct netfs_io_request *wreq, loff_t start, size_t len);
14811473

14821474
/*
14831475
* xattr.c

0 commit comments

Comments
 (0)