aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2017-03-16 12:27:48 -0400
committerDavid Howells <dhowells@redhat.com>2017-03-16 12:27:48 -0400
commit68ae849d7e674b83610bc7fdf74b21621a09b9ac (patch)
tree9e7f041cd1061781c9271c9a48637a8f6938ad5a
parentab94f5d0dd6fd82e7eeca5e7c8096eaea0a0261f (diff)
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)
212 fscache_uncache_page(vnode->cache, page); 212 fscache_uncache_page(vnode->cache, page);
213#endif 213#endif
214 BUG_ON(PageFsCache(page)); 214 BUG_ON(PageFsCache(page));
215 goto error; 215
216 if (ret == -EINTR ||
217 ret == -ENOMEM ||
218 ret == -ERESTARTSYS ||
219 ret == -EAGAIN)
220 goto error;
221 goto io_error;
216 } 222 }
217 223
218 SetPageUptodate(page); 224 SetPageUptodate(page);
@@ -231,10 +237,12 @@ int afs_page_filler(void *data, struct page *page)
231 _leave(" = 0"); 237 _leave(" = 0");
232 return 0; 238 return 0;
233 239
240io_error:
241 SetPageError(page);
242 goto error;
234enomem: 243enomem:
235 ret = -ENOMEM; 244 ret = -ENOMEM;
236error: 245error:
237 SetPageError(page);
238 unlock_page(page); 246 unlock_page(page);
239 _leave(" = %d", ret); 247 _leave(" = %d", ret);
240 return ret; 248 return ret;