提交 48bf2b17 编写于 作者: S Steven Whitehouse

GFS2: Something nonlinear this way comes!

For some reason GFS2 has been missing support for non-linear
mappings. This patch fixes that, and also avoids taking any
locks for mmap in the O_NOATIME case. In fact we don't actually need
to take the lock here at all - just doing file_accessed() would be
enough, but we have to take the lock eventually and this helps
it hit disk (and thus be seen by other nodes) faster.
Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
上级 4a0f9a32
...@@ -425,33 +425,36 @@ static struct vm_operations_struct gfs2_vm_ops = { ...@@ -425,33 +425,36 @@ static struct vm_operations_struct gfs2_vm_ops = {
.page_mkwrite = gfs2_page_mkwrite, .page_mkwrite = gfs2_page_mkwrite,
}; };
/** /**
* gfs2_mmap - * gfs2_mmap -
* @file: The file to map * @file: The file to map
* @vma: The VMA which described the mapping * @vma: The VMA which described the mapping
* *
* Returns: 0 or error code * There is no need to get a lock here unless we should be updating
* atime. We ignore any locking errors since the only consequence is
* a missed atime update (which will just be deferred until later).
*
* Returns: 0
*/ */
static int gfs2_mmap(struct file *file, struct vm_area_struct *vma) static int gfs2_mmap(struct file *file, struct vm_area_struct *vma)
{ {
struct gfs2_inode *ip = GFS2_I(file->f_mapping->host); struct gfs2_inode *ip = GFS2_I(file->f_mapping->host);
struct gfs2_holder i_gh;
int error;
gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &i_gh); if (!(file->f_flags & O_NOATIME)) {
error = gfs2_glock_nq(&i_gh); struct gfs2_holder i_gh;
if (error) { int error;
gfs2_holder_uninit(&i_gh);
return error;
}
gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &i_gh);
error = gfs2_glock_nq(&i_gh);
file_accessed(file);
if (error == 0)
gfs2_glock_dq_uninit(&i_gh);
}
vma->vm_ops = &gfs2_vm_ops; vma->vm_ops = &gfs2_vm_ops;
vma->vm_flags |= VM_CAN_NONLINEAR;
gfs2_glock_dq_uninit(&i_gh); return 0;
return error;
} }
/** /**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册