diff options
author | Jeff Layton <jlayton@redhat.com> | 2017-04-04 08:39:44 -0400 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2017-05-04 09:19:22 +0200 |
commit | 6fc1fe5e4cfc8939ee59a570b087946042a30140 (patch) | |
tree | 80c3320c80480827a86fe8274cf6e064e2be6b14 /fs | |
parent | 92475f05bdb6daefce3f55f46551153e7ed05f45 (diff) | |
download | op-kernel-dev-6fc1fe5e4cfc8939ee59a570b087946042a30140.zip op-kernel-dev-6fc1fe5e4cfc8939ee59a570b087946042a30140.tar.gz |
Revert "ceph: SetPageError() for writeback pages if writepages fails"
This reverts commit b109eec6f4332bd517e2f41e207037c4b9065094.
If I'm filling up a filesystem with this sort of command:
$ dd if=/dev/urandom of=/mnt/cephfs/fillfile bs=2M oflag=sync
...then I'll eventually get back EIO on a write. Further calls
will give us ENOSPC.
I'm not sure what prompted this change, but I don't think it's what we
want to do. If writepages failed, we will have already set the mapping
error appropriately, and that's what gets reported by fsync() or
close().
__filemap_fdatawait_range however, does this:
wait_on_page_writeback(page);
if (TestClearPageError(page))
ret = -EIO;
...and that -EIO ends up trumping the mapping's error if one exists.
When writepages fails, we only want to set the error in the mapping,
and not flag the individual pages.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Reviewed-by: "Yan, Zhengā€¯ <zyan@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ceph/addr.c | 3 |
1 files changed, 0 insertions, 3 deletions
diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index 7e3fae3..6cdf944 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -703,9 +703,6 @@ static void writepages_finish(struct ceph_osd_request *req) clear_bdi_congested(&fsc->backing_dev_info, BLK_RW_ASYNC); - if (rc < 0) - SetPageError(page); - ceph_put_snap_context(page_snap_context(page)); page->private = 0; ClearPagePrivate(page); |