summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorYan, Zheng <zyan@redhat.com>2015-07-01 11:03:23 +0200
committerIlya Dryomov <idryomov@gmail.com>2015-09-08 22:14:28 +0200
commita341d4df87487ae68189e0be869c39a2b0cb9aaa (patch)
tree8001abb1feb458a9e4ecf873e4cf592d9199914b /fs
parentceph: EIO all operations after forced umount (diff)
downloadlinux-a341d4df87487ae68189e0be869c39a2b0cb9aaa.tar.xz
linux-a341d4df87487ae68189e0be869c39a2b0cb9aaa.zip
ceph: invalidate dirty pages after forced umount
After forced umount, ceph_writepages_start() skips flushing dirty pages. To make sure inode's reference count get dropped to zero, we need to invalidate dirty pages. Signed-off-by: Yan, Zheng <zyan@redhat.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/ceph/addr.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
index 1594f2c590bd..98933350331c 100644
--- a/fs/ceph/addr.c
+++ b/fs/ceph/addr.c
@@ -719,6 +719,8 @@ static int ceph_writepages_start(struct address_space *mapping,
if (ACCESS_ONCE(fsc->mount_state) == CEPH_MOUNT_SHUTDOWN) {
pr_warn("writepage_start %p on forced umount\n", inode);
+ truncate_pagecache(inode, 0);
+ mapping_set_error(mapping, -EIO);
return -EIO; /* we're in a forced umount, don't write! */
}
if (fsc->mount_options->wsize && fsc->mount_options->wsize < wsize)