]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: return -eio when sync file which unsafe reqs has been dropped 30042/head 30043/head
authorsimon gao <simon29rock@gmail.com>
Wed, 31 Jul 2019 01:51:21 +0000 (21:51 -0400)
committerNathan Cutler <ncutler@suse.com>
Fri, 30 Aug 2019 14:40:14 +0000 (16:40 +0200)
        Fixes:http://tracker.ceph.com/issues/40877

Signed-off-by: simon gao <simon29rock@gmail.com>
(cherry picked from commit 7182fc60302684c78c0bba77ec3d73f2c11c64e2)

src/client/Client.cc

index e821de07fb3604c771dd536460cc4dff173be242..9c04d784cd4afdb35bf029b1f6d743bd44aa223c 100644 (file)
@@ -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);
       }