File tree Expand file tree Collapse file tree 2 files changed +27
-2
lines changed
Expand file tree Collapse file tree 2 files changed +27
-2
lines changed Original file line number Diff line number Diff line change @@ -408,6 +408,11 @@ impl IndexNode for TtyDevice {
408408 Ok ( ( ) )
409409 }
410410
411+ fn page_cache ( & self ) -> Option < Arc < crate :: filesystem:: page_cache:: PageCache > > {
412+ // TTY设备是字符设备,不需要页面缓存
413+ None
414+ }
415+
411416 fn close ( & self , data : SpinLockGuard < FilePrivateData > ) -> Result < ( ) , SystemError > {
412417 let ( tty, _flags) = if let FilePrivateData :: Tty ( tty_priv) = & * data {
413418 ( tty_priv. tty ( ) , tty_priv. flags )
Original file line number Diff line number Diff line change @@ -609,7 +609,17 @@ impl PageFaultHandler {
609609 let vma = pfm. vma ( ) ;
610610 let vma_guard = vma. lock_irqsave ( ) ;
611611 let file = vma_guard. vm_file ( ) . expect ( "no vm_file in vma" ) ;
612- let page_cache = file. inode ( ) . page_cache ( ) . unwrap ( ) ;
612+ let page_cache = match file. inode ( ) . page_cache ( ) {
613+ Some ( cache) => cache,
614+ None => {
615+ // 文件没有页面缓存,可能是不支持内存映射的设备文件
616+ log:: warn!(
617+ "filemap_map_pages: file has no page cache, inode type: {}" ,
618+ crate :: libs:: name:: get_type_name( & file. inode( ) )
619+ ) ;
620+ return VmFaultReason :: VM_FAULT_SIGBUS ;
621+ }
622+ } ;
613623 let mapper = & mut pfm. mapper ;
614624
615625 // 起始页地址
@@ -650,7 +660,17 @@ impl PageFaultHandler {
650660 let vma = pfm. vma ( ) ;
651661 let vma_guard = vma. lock_irqsave ( ) ;
652662 let file = vma_guard. vm_file ( ) . expect ( "no vm_file in vma" ) ;
653- let page_cache = file. inode ( ) . page_cache ( ) . unwrap ( ) ;
663+ let page_cache = match file. inode ( ) . page_cache ( ) {
664+ Some ( cache) => cache,
665+ None => {
666+ // 文件没有页面缓存,可能是不支持内存映射的设备文件
667+ log:: warn!(
668+ "filemap_fault: file has no page cache, inode type: {}" ,
669+ crate :: libs:: name:: get_type_name( & file. inode( ) )
670+ ) ;
671+ return VmFaultReason :: VM_FAULT_SIGBUS ;
672+ }
673+ } ;
654674 let file_pgoff = pfm. file_pgoff . expect ( "no file_pgoff" ) ;
655675 let mut ret = VmFaultReason :: empty ( ) ;
656676
You can’t perform that action at this time.
0 commit comments