2929#include "fid.h"
3030#include "cache.h"
3131
32- static const struct vm_operations_struct v9fs_file_vm_ops ;
3332static const struct vm_operations_struct v9fs_mmap_file_vm_ops ;
3433
3534/**
@@ -74,7 +73,7 @@ int v9fs_file_open(struct inode *inode, struct file *file)
7473 }
7574
7675 mutex_lock (& v9inode -> v_mutex );
77- if ((v9ses -> cache ) && !v9inode -> writeback_fid &&
76+ if ((v9ses -> cache >= CACHE_WRITEBACK ) && !v9inode -> writeback_fid &&
7877 ((file -> f_flags & O_ACCMODE ) != O_RDONLY )) {
7978 /*
8079 * clone a fid and add it to writeback_fid
@@ -368,10 +367,15 @@ v9fs_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
368367{
369368 struct p9_fid * fid = iocb -> ki_filp -> private_data ;
370369 int ret , err = 0 ;
370+ struct inode * inode = file_inode (iocb -> ki_filp );
371+ struct v9fs_session_info * v9ses = v9fs_inode2v9ses (inode );
371372
372373 p9_debug (P9_DEBUG_VFS , "count %zu offset %lld\n" ,
373374 iov_iter_count (to ), iocb -> ki_pos );
374375
376+ if (v9ses -> cache > CACHE_MMAP )
377+ return generic_file_read_iter (iocb , to );
378+
375379 if (iocb -> ki_filp -> f_flags & O_NONBLOCK )
376380 ret = p9_client_read_once (fid , iocb -> ki_pos , to , & err );
377381 else
@@ -396,6 +400,11 @@ v9fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
396400 ssize_t retval ;
397401 loff_t origin ;
398402 int err = 0 ;
403+ struct inode * inode = file_inode (iocb -> ki_filp );
404+ struct v9fs_session_info * v9ses = v9fs_inode2v9ses (inode );
405+
406+ if (v9ses -> cache >= CACHE_WRITEBACK )
407+ return generic_file_write_iter (iocb , from );
399408
400409 retval = generic_write_checks (iocb , from );
401410 if (retval <= 0 )
@@ -478,25 +487,16 @@ static int
478487v9fs_file_mmap (struct file * filp , struct vm_area_struct * vma )
479488{
480489 int retval ;
481-
482-
483- retval = generic_file_mmap (filp , vma );
484- if (!retval )
485- vma -> vm_ops = & v9fs_file_vm_ops ;
486-
487- return retval ;
488- }
489-
490- static int
491- v9fs_mmap_file_mmap (struct file * filp , struct vm_area_struct * vma )
492- {
493- int retval ;
494- struct inode * inode ;
495- struct v9fs_inode * v9inode ;
490+ struct inode * inode = file_inode (filp );
491+ struct v9fs_inode * v9inode = V9FS_I (inode );
492+ struct v9fs_session_info * v9ses = v9fs_inode2v9ses (inode );
496493 struct p9_fid * fid ;
497494
498- inode = file_inode (filp );
499- v9inode = V9FS_I (inode );
495+ if (v9ses -> cache < CACHE_MMAP ) {
496+ invalidate_inode_pages2 (filp -> f_mapping );
497+ return generic_file_readonly_mmap (filp , vma );
498+ }
499+
500500 mutex_lock (& v9inode -> v_mutex );
501501 if (!v9inode -> writeback_fid &&
502502 (vma -> vm_flags & VM_SHARED ) &&
@@ -564,35 +564,6 @@ v9fs_vm_page_mkwrite(struct vm_fault *vmf)
564564 return VM_FAULT_NOPAGE ;
565565}
566566
567- /**
568- * v9fs_mmap_file_read_iter - read from a file
569- * @iocb: The operation parameters
570- * @to: The buffer to read into
571- *
572- */
573- static ssize_t
574- v9fs_mmap_file_read_iter (struct kiocb * iocb , struct iov_iter * to )
575- {
576- /* TODO: Check if there are dirty pages */
577- return v9fs_file_read_iter (iocb , to );
578- }
579-
580- /**
581- * v9fs_mmap_file_write_iter - write to a file
582- * @iocb: The operation parameters
583- * @from: The data to write
584- *
585- */
586- static ssize_t
587- v9fs_mmap_file_write_iter (struct kiocb * iocb , struct iov_iter * from )
588- {
589- /*
590- * TODO: invalidate mmaps on filp's inode between
591- * offset and offset+count
592- */
593- return v9fs_file_write_iter (iocb , from );
594- }
595-
596567static void v9fs_mmap_vm_close (struct vm_area_struct * vma )
597568{
598569 struct inode * inode ;
@@ -615,48 +586,13 @@ static void v9fs_mmap_vm_close(struct vm_area_struct *vma)
615586 filemap_fdatawrite_wbc (inode -> i_mapping , & wbc );
616587}
617588
618-
619- static const struct vm_operations_struct v9fs_file_vm_ops = {
620- .fault = filemap_fault ,
621- .map_pages = filemap_map_pages ,
622- .page_mkwrite = v9fs_vm_page_mkwrite ,
623- };
624-
625589static const struct vm_operations_struct v9fs_mmap_file_vm_ops = {
626590 .close = v9fs_mmap_vm_close ,
627591 .fault = filemap_fault ,
628592 .map_pages = filemap_map_pages ,
629593 .page_mkwrite = v9fs_vm_page_mkwrite ,
630594};
631595
632-
633- const struct file_operations v9fs_cached_file_operations = {
634- .llseek = generic_file_llseek ,
635- .read_iter = generic_file_read_iter ,
636- .write_iter = generic_file_write_iter ,
637- .open = v9fs_file_open ,
638- .release = v9fs_dir_release ,
639- .lock = v9fs_file_lock ,
640- .mmap = v9fs_file_mmap ,
641- .splice_read = generic_file_splice_read ,
642- .splice_write = iter_file_splice_write ,
643- .fsync = v9fs_file_fsync ,
644- };
645-
646- const struct file_operations v9fs_cached_file_operations_dotl = {
647- .llseek = generic_file_llseek ,
648- .read_iter = generic_file_read_iter ,
649- .write_iter = generic_file_write_iter ,
650- .open = v9fs_file_open ,
651- .release = v9fs_dir_release ,
652- .lock = v9fs_file_lock_dotl ,
653- .flock = v9fs_file_flock_dotl ,
654- .mmap = v9fs_file_mmap ,
655- .splice_read = generic_file_splice_read ,
656- .splice_write = iter_file_splice_write ,
657- .fsync = v9fs_file_fsync_dotl ,
658- };
659-
660596const struct file_operations v9fs_file_operations = {
661597 .llseek = generic_file_llseek ,
662598 .read_iter = v9fs_file_read_iter ,
@@ -678,34 +614,7 @@ const struct file_operations v9fs_file_operations_dotl = {
678614 .release = v9fs_dir_release ,
679615 .lock = v9fs_file_lock_dotl ,
680616 .flock = v9fs_file_flock_dotl ,
681- .mmap = generic_file_readonly_mmap ,
682- .splice_read = generic_file_splice_read ,
683- .splice_write = iter_file_splice_write ,
684- .fsync = v9fs_file_fsync_dotl ,
685- };
686-
687- const struct file_operations v9fs_mmap_file_operations = {
688- .llseek = generic_file_llseek ,
689- .read_iter = v9fs_mmap_file_read_iter ,
690- .write_iter = v9fs_mmap_file_write_iter ,
691- .open = v9fs_file_open ,
692- .release = v9fs_dir_release ,
693- .lock = v9fs_file_lock ,
694- .mmap = v9fs_mmap_file_mmap ,
695- .splice_read = generic_file_splice_read ,
696- .splice_write = iter_file_splice_write ,
697- .fsync = v9fs_file_fsync ,
698- };
699-
700- const struct file_operations v9fs_mmap_file_operations_dotl = {
701- .llseek = generic_file_llseek ,
702- .read_iter = v9fs_mmap_file_read_iter ,
703- .write_iter = v9fs_mmap_file_write_iter ,
704- .open = v9fs_file_open ,
705- .release = v9fs_dir_release ,
706- .lock = v9fs_file_lock_dotl ,
707- .flock = v9fs_file_flock_dotl ,
708- .mmap = v9fs_mmap_file_mmap ,
617+ .mmap = v9fs_file_mmap ,
709618 .splice_read = generic_file_splice_read ,
710619 .splice_write = iter_file_splice_write ,
711620 .fsync = v9fs_file_fsync_dotl ,
0 commit comments