Commit d5b81454 authored by Andreas Gruenbacher's avatar Andreas Gruenbacher

Revert "gfs2: Fix mmap locking for write faults"

This reverts commit b7f55d92.

As explained by Linus in [*], write faults on a mmap region are reads
from a filesysten point of view, so taking the inode glock exclusively
on write faults is incorrect.

Instead, when a page is marked writable, the .page_mkwrite vm operation
will be called, which is where the exclusive lock taking needs to
happen.  I got this wrong because of a broken test case that made me
believe .page_mkwrite isn't getting called when it actually is.

[*] https://lore.kernel.org/lkml/CAHk-=wj8EWr_D65i4oRSj2FTbrc6RdNydNNCGxeabRnwtoU=3Q@mail.gmail.com/Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
parent c2131f7e
...@@ -540,11 +540,9 @@ static vm_fault_t gfs2_fault(struct vm_fault *vmf) ...@@ -540,11 +540,9 @@ static vm_fault_t gfs2_fault(struct vm_fault *vmf)
struct gfs2_inode *ip = GFS2_I(inode); struct gfs2_inode *ip = GFS2_I(inode);
struct gfs2_holder gh; struct gfs2_holder gh;
vm_fault_t ret; vm_fault_t ret;
u16 state;
int err; int err;
state = (vmf->flags & FAULT_FLAG_WRITE) ? LM_ST_EXCLUSIVE : LM_ST_SHARED; gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
gfs2_holder_init(ip->i_gl, state, 0, &gh);
err = gfs2_glock_nq(&gh); err = gfs2_glock_nq(&gh);
if (err) { if (err) {
ret = block_page_mkwrite_return(err); ret = block_page_mkwrite_return(err);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment