aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/fuse/file.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index 18c215c..b075ed8 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -674,8 +674,10 @@ static int fuse_readpages_fill(void *_data, struct page *page)
return -ENOMEM;
}
+ lock_page(newpage);
err = replace_page_cache_page(oldpage, newpage, GFP_KERNEL);
if (err) {
+ unlock_page(newpage);
__free_page(newpage);
page_cache_release(oldpage);
return err;
@@ -685,7 +687,6 @@ static int fuse_readpages_fill(void *_data, struct page *page)
* Decrement the count on new page to make page cache the only
* owner of it
*/
- lock_page(newpage);
put_page(newpage);
/* finally release the old page and swap pointers */