summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2017-03-16 17:27:48 +0100
committerDavid Howells <dhowells@redhat.com>2017-03-16 17:27:48 +0100
commit68ae849d7e674b83610bc7fdf74b21621a09b9ac (patch)
tree9e7f041cd1061781c9271c9a48637a8f6938ad5a
parentafs: Populate and use client modification time (diff)
downloadlinux-68ae849d7e674b83610bc7fdf74b21621a09b9ac.tar.xz
linux-68ae849d7e674b83610bc7fdf74b21621a09b9ac.zip
afs: Don't set PG_error on local EINTR or ENOMEM when filling a page
Don't set PG_error on a page if we get local EINTR or ENOMEM when filling a page for writing. Signed-off-by: David Howells <dhowells@redhat.com>
-rw-r--r--fs/afs/file.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/fs/afs/file.c b/fs/afs/file.c
index b5829443ff69..0d5b8508869b 100644
--- a/fs/afs/file.c
+++ b/fs/afs/file.c
@@ -212,7 +212,13 @@ int afs_page_filler(void *data, struct page *page)
fscache_uncache_page(vnode->cache, page);
#endif
BUG_ON(PageFsCache(page));
- goto error;
+
+ if (ret == -EINTR ||
+ ret == -ENOMEM ||
+ ret == -ERESTARTSYS ||
+ ret == -EAGAIN)
+ goto error;
+ goto io_error;
}
SetPageUptodate(page);
@@ -231,10 +237,12 @@ int afs_page_filler(void *data, struct page *page)
_leave(" = 0");
return 0;
+io_error:
+ SetPageError(page);
+ goto error;
enomem:
ret = -ENOMEM;
error:
- SetPageError(page);
unlock_page(page);
_leave(" = %d", ret);
return ret;