Fix up the filesystems that provide their own ->page_mkwrite handlers to provide stable page writes if necessary. Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> --- fs/9p/vfs_file.c | 1 + fs/afs/write.c | 4 ++-- fs/ceph/addr.c | 1 + fs/cifs/file.c | 1 + fs/ocfs2/mmap.c | 1 + fs/ubifs/file.c | 4 ++-- 6 files changed, 8 insertions(+), 4 deletions(-) diff --git a/fs/9p/vfs_file.c b/fs/9p/vfs_file.c index c2483e9..aa253f0 100644 --- a/fs/9p/vfs_file.c +++ b/fs/9p/vfs_file.c @@ -620,6 +620,7 @@ v9fs_vm_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) lock_page(page); if (page->mapping != inode->i_mapping) goto out_unlock; + wait_on_stable_page_write(page); return VM_FAULT_LOCKED; out_unlock: diff --git a/fs/afs/write.c b/fs/afs/write.c index 9aa52d9..39eb2a4 100644 --- a/fs/afs/write.c +++ b/fs/afs/write.c @@ -758,7 +758,7 @@ int afs_page_mkwrite(struct vm_area_struct *vma, struct page *page) #ifdef CONFIG_AFS_FSCACHE fscache_wait_on_page_write(vnode->cache, page); #endif - + wait_on_stable_page_write(page); _leave(" = 0"); - return 0; + return VM_FAULT_LOCKED; } diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index 6690269..e9734bf 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -1208,6 +1208,7 @@ static int ceph_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) set_page_dirty(page); up_read(&mdsc->snap_rwsem); ret = VM_FAULT_LOCKED; + wait_on_stable_page_write(page); } else { if (ret == -ENOMEM) ret = VM_FAULT_OOM; diff --git a/fs/cifs/file.c b/fs/cifs/file.c index edb25b4..a8770bf 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c @@ -2997,6 +2997,7 @@ cifs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) struct page *page = vmf->page; lock_page(page); + wait_on_stable_page_write(page); return VM_FAULT_LOCKED; } diff --git a/fs/ocfs2/mmap.c b/fs/ocfs2/mmap.c index 47a87dd..a0027b1 100644 --- a/fs/ocfs2/mmap.c +++ b/fs/ocfs2/mmap.c @@ -124,6 +124,7 @@ static int __ocfs2_page_mkwrite(struct file *file, struct buffer_head *di_bh, fsdata); BUG_ON(ret != len); ret = VM_FAULT_LOCKED; + wait_on_stable_page_write(page); out: return ret; } diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c index 5bc7781..cb0d3aa 100644 --- a/fs/ubifs/file.c +++ b/fs/ubifs/file.c @@ -1522,8 +1522,8 @@ static int ubifs_vm_page_mkwrite(struct vm_area_struct *vma, ubifs_release_dirty_inode_budget(c, ui); } - unlock_page(page); - return 0; + wait_on_stable_page_write(page); + return VM_FAULT_LOCKED; out_unlock: unlock_page(page); -- To unsubscribe from this list: send the line "unsubscribe linux-cifs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html