summaryrefslogtreecommitdiffstats
path: root/fs/hostfs
diff options
context:
space:
mode:
authorMatthew Wilcox (Oracle) <willy@infradead.org>2022-05-27 17:20:56 +0200
committerMatthew Wilcox (Oracle) <willy@infradead.org>2022-08-02 18:34:02 +0200
commite775dfb33d81455bb043e447c5bdca76ae60ea15 (patch)
tree18821a9d5a7b31f8e56f22d6dc8fcba5dd9758a0 /fs/hostfs
parentsquashfs: Return the actual error from squashfs_read_folio() (diff)
downloadlinux-e775dfb33d81455bb043e447c5bdca76ae60ea15.tar.xz
linux-e775dfb33d81455bb043e447c5bdca76ae60ea15.zip
hostfs: Handle page write errors correctly
If a page can't be written back, we need to call mapping_set_error(), not clear the page's Uptodate flag. Also remove the clearing of PageError on success; that flag is used for read errors, not write errors. Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Diffstat (limited to 'fs/hostfs')
-rw-r--r--fs/hostfs/hostfs_kern.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c
index cc1bc6f93a01..07881b76d42f 100644
--- a/fs/hostfs/hostfs_kern.c
+++ b/fs/hostfs/hostfs_kern.c
@@ -416,15 +416,15 @@ static int hostfs_writepage(struct page *page, struct writeback_control *wbc)
err = write_file(HOSTFS_I(inode)->fd, &base, buffer, count);
if (err != count) {
- ClearPageUptodate(page);
+ if (err >= 0)
+ err = -EIO;
+ mapping_set_error(mapping, err);
goto out;
}
if (base > inode->i_size)
inode->i_size = base;
- if (PageError(page))
- ClearPageError(page);
err = 0;
out: