diff options
author | David Howells <dhowells@redhat.com> | 2017-03-16 12:27:48 -0400 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2017-03-16 12:27:48 -0400 |
commit | 68ae849d7e674b83610bc7fdf74b21621a09b9ac (patch) | |
tree | 9e7f041cd1061781c9271c9a48637a8f6938ad5a | |
parent | ab94f5d0dd6fd82e7eeca5e7c8096eaea0a0261f (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.c | 12 |
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 | ||
240 | io_error: | ||
241 | SetPageError(page); | ||
242 | goto error; | ||
234 | enomem: | 243 | enomem: |
235 | ret = -ENOMEM; | 244 | ret = -ENOMEM; |
236 | error: | 245 | error: |
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; |