diff options
author | Takashi Iwai <tiwai@suse.de> | 2009-05-12 11:57:09 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2009-05-12 11:57:09 +0200 |
commit | ddc4097b77bbb227851a44287acb2fb8a9896cc1 (patch) | |
tree | 319d098879bed7c45543d983de8becd509701b22 /fs/buffer.c | |
parent | bec4c99e8637b5b8bd4b0513eacb51da25885e3b (diff) | |
parent | ae31c1fbdbb18d917b0a1139497c2dbd35886989 (diff) |
Merge branch 'topic/drvdata-fix' into topic/asoc
Diffstat (limited to 'fs/buffer.c')
-rw-r--r-- | fs/buffer.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/fs/buffer.c b/fs/buffer.c index b3e5be7514f..aed297739eb 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -2397,7 +2397,8 @@ block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf, if ((page->mapping != inode->i_mapping) || (page_offset(page) > size)) { /* page got truncated out from underneath us */ - goto out_unlock; + unlock_page(page); + goto out; } /* page is wholly or partially inside EOF */ @@ -2411,14 +2412,15 @@ block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf, ret = block_commit_write(page, 0, end); if (unlikely(ret)) { + unlock_page(page); if (ret == -ENOMEM) ret = VM_FAULT_OOM; else /* -ENOSPC, -EIO, etc */ ret = VM_FAULT_SIGBUS; - } + } else + ret = VM_FAULT_LOCKED; -out_unlock: - unlock_page(page); +out: return ret; } |