diff options
author | John Stultz <john.stultz@linaro.org> | 2011-04-18 13:19:07 -0700 |
---|---|---|
committer | John Stultz <john.stultz@linaro.org> | 2011-04-18 13:19:07 -0700 |
commit | 775d71e49c65f1f6aa57776ea1da62988fc9a30a (patch) | |
tree | ce03cae544bacc8dda67422fd66a543dd1ae3c99 /fs/nilfs2/file.c | |
parent | 18e82d2b952ab57fc1c8a69d4fa14e562f2aecf6 (diff) | |
parent | c1a952f48517b5545075d8eb1a5d543099bd2ae1 (diff) |
Merge branch 'upstream/linaro.38' into linaro-android.38KNOWN_GOOD
Diffstat (limited to 'fs/nilfs2/file.c')
-rw-r--r-- | fs/nilfs2/file.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/fs/nilfs2/file.c b/fs/nilfs2/file.c index 2f560c9fb80..f49e6287c87 100644 --- a/fs/nilfs2/file.c +++ b/fs/nilfs2/file.c @@ -72,10 +72,9 @@ static int nilfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) /* * check to see if the page is mapped already (no holes) */ - if (PageMappedToDisk(page)) { - unlock_page(page); + if (PageMappedToDisk(page)) goto mapped; - } + if (page_has_buffers(page)) { struct buffer_head *bh, *head; int fully_mapped = 1; @@ -90,7 +89,6 @@ static int nilfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) if (fully_mapped) { SetPageMappedToDisk(page); - unlock_page(page); goto mapped; } } @@ -105,16 +103,17 @@ static int nilfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) return VM_FAULT_SIGBUS; ret = block_page_mkwrite(vma, vmf, nilfs_get_block); - if (unlikely(ret)) { + if (ret != VM_FAULT_LOCKED) { nilfs_transaction_abort(inode->i_sb); return ret; } + nilfs_set_file_dirty(inode, 1 << (PAGE_SHIFT - inode->i_blkbits)); nilfs_transaction_commit(inode->i_sb); mapped: SetPageChecked(page); wait_on_page_writeback(page); - return 0; + return VM_FAULT_LOCKED; } static const struct vm_operations_struct nilfs_file_vm_ops = { |