From: simon gao Date: Wed, 31 Jul 2019 01:51:21 +0000 (-0400) Subject: client: return -eio when sync file which unsafe reqs has been dropped X-Git-Tag: v14.2.5~39^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3ec7fdd1d819feffb626606fc118708e43ec6861;p=ceph.git client: return -eio when sync file which unsafe reqs has been dropped Fixes:http://tracker.ceph.com/issues/40877 Signed-off-by: simon gao (cherry picked from commit 7182fc60302684c78c0bba77ec3d73f2c11c64e2) --- diff --git a/src/client/Client.cc b/src/client/Client.cc index e821de07fb36..9c04d784cd4a 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -2942,8 +2942,21 @@ void Client::kick_requests_closed(MetaSession *session) if (req->got_unsafe) { lderr(cct) << __func__ << " removing unsafe request " << req->get_tid() << dendl; req->unsafe_item.remove_myself(); - req->unsafe_dir_item.remove_myself(); - req->unsafe_target_item.remove_myself(); + if (is_dir_operation(req)) { + Inode *dir = req->inode(); + assert(dir); + dir->set_async_err(-EIO); + lderr(cct) << "kick_requests_closed drop req of inode(dir) : " + << dir->ino << " " << req->get_tid() << dendl; + req->unsafe_dir_item.remove_myself(); + } + if (req->target) { + InodeRef &in = req->target; + in->set_async_err(-EIO); + lderr(cct) << "kick_requests_closed drop req of inode : " + << in->ino << " " << req->get_tid() << dendl; + req->unsafe_target_item.remove_myself(); + } signal_cond_list(req->waitfor_safe); unregister_request(req); }