lkml.org 
[lkml]   [2021]   [Apr]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[RFC PATCH 32/37] f2fs: implement speculative fault handling
Date
We just need to make sure f2fs_filemap_fault() doesn't block in the
speculative case as it is called with an rcu read lock held.

Signed-off-by: Michel Lespinasse <michel@lespinasse.org>
---
fs/f2fs/file.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index d26ff2ae3f5e..c1cfdc3ec98e 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -37,7 +37,12 @@ static vm_fault_t f2fs_filemap_fault(struct vm_fault *vmf)
struct inode *inode = file_inode(vmf->vma->vm_file);
vm_fault_t ret;

- down_read(&F2FS_I(inode)->i_mmap_sem);
+ if (vmf->flags & FAULT_FLAG_SPECULATIVE) {
+ if (!down_read_trylock(&F2FS_I(inode)->i_mmap_sem))
+ return VM_FAULT_RETRY;
+ } else {
+ down_read(&F2FS_I(inode)->i_mmap_sem);
+ }
ret = filemap_fault(vmf);
up_read(&F2FS_I(inode)->i_mmap_sem);

@@ -171,6 +176,7 @@ static const struct vm_operations_struct f2fs_file_vm_ops = {
.fault = f2fs_filemap_fault,
.map_pages = filemap_map_pages,
.page_mkwrite = f2fs_vm_page_mkwrite,
+ .speculative = true,
};

static int get_parent_ino(struct inode *inode, nid_t *pino)
--
2.20.1
\
 
 \ /
  Last update: 2021-04-07 03:53    [W:0.299 / U:0.128 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site