diff options
author | Yan, Zheng <zyan@redhat.com> | 2016-06-15 16:29:18 +0800 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2016-07-28 02:55:40 +0200 |
commit | 9a5530c63889ac928a45c4645ab0bc23b4fbfcb8 (patch) | |
tree | 6c3d76c198fd3b26c6fe9e5c7f922ad62cbafdc7 /fs/ceph/inode.c | |
parent | fc8c3892f30c39f28fdb835f7c8598ac4cf5ed1e (diff) | |
download | op-kernel-dev-9a5530c63889ac928a45c4645ab0bc23b4fbfcb8.zip op-kernel-dev-9a5530c63889ac928a45c4645ab0bc23b4fbfcb8.tar.gz |
ceph: wait unsafe sync writes for evicting inode
Otherwise ceph_sync_write_unsafe() may access/modify freed inode.
Signed-off-by: Yan, Zheng <zyan@redhat.com>
Diffstat (limited to 'fs/ceph/inode.c')
-rw-r--r-- | fs/ceph/inode.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index 8ca8433..6e16269 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c @@ -585,6 +585,14 @@ int ceph_drop_inode(struct inode *inode) return 1; } +void ceph_evict_inode(struct inode *inode) +{ + /* wait unsafe sync writes */ + ceph_sync_write_wait(inode); + truncate_inode_pages_final(&inode->i_data); + clear_inode(inode); +} + static inline blkcnt_t calc_inode_blocks(u64 size) { return (size + (1<<9) - 1) >> 9; |