]> 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 30242/head
authorsimon gao <simon29rock@gmail.com>
Wed, 31 Jul 2019 01:51:21 +0000 (21:51 -0400)
committerNathan Cutler <ncutler@suse.com>
Sat, 7 Sep 2019 09:21:18 +0000 (11:21 +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 e9e862d37cdbe7ca930c98e1ecde1d72d98e3647..69325271a109be82bd4ec1d3f723d6f2ee08bd7b 100644 (file)
@@ -2895,8 +2895,21 @@ void Client::kick_requests_closed(MetaSession *session)
       if (req->got_unsafe) {
        lderr(cct) << "kick_requests_closed 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);
       }