Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cca24370 authored by Miklos Szeredi's avatar Miklos Szeredi
Browse files

fuse: lock page in mkwrite



Lock the page in fuse_page_mkwrite() to protect against a race with
fuse_writepage() where the page is redirtied before the actual writeback
begins.

Signed-off-by: default avatarMiklos Szeredi <mszeredi@suse.cz>
parent 385b1268
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -1618,14 +1618,17 @@ static void fuse_vma_close(struct vm_area_struct *vma)
static int fuse_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
{
	struct page *page = vmf->page;
	/*
	 * Don't use page->mapping as it may become NULL from a
	 * concurrent truncate.
	 */
	struct inode *inode = vma->vm_file->f_mapping->host;
	struct inode *inode = file_inode(vma->vm_file);

	file_update_time(vma->vm_file);
	lock_page(page);
	if (page->mapping != inode->i_mapping) {
		unlock_page(page);
		return VM_FAULT_NOPAGE;
	}

	fuse_wait_on_page_writeback(inode, page->index);
	return 0;
	return VM_FAULT_LOCKED;
}

static const struct vm_operations_struct fuse_file_vm_ops = {