From a6a2c62fa42d2f56ee629148c7cac41bf276ff6a Mon Sep 17 00:00:00 2001 From: huanwen ren Date: Tue, 27 Jun 2017 17:18:53 +0800 Subject: [PATCH] client: add unlock_fh_pos when abort add unlock_fh_pos when abort Signed-off-by: huanwen ren --- src/client/Client.cc | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index cbb216aa768..b8d902b61d8 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -8444,17 +8444,22 @@ int Client::_read(Fh *f, int64_t offset, uint64_t size, bufferlist *bl) if (in->inline_version == 0) { int r = _getattr(in, CEPH_STAT_CAP_INLINE_DATA, f->actor_perms, true); - if (r < 0) + if (r < 0) { + if (movepos) + unlock_fh_pos(f); return r; + } assert(in->inline_version > 0); } retry: int have; int r = get_caps(in, CEPH_CAP_FILE_RD, CEPH_CAP_FILE_CACHE, &have, -1); - if (r < 0) + if (r < 0) { + if (movepos) + unlock_fh_pos(f); return r; - + } if (f->flags & O_DIRECT) have &= ~CEPH_CAP_FILE_CACHE; @@ -8556,7 +8561,12 @@ done: if (have) put_cap_ref(in, CEPH_CAP_FILE_RD); - return r < 0 ? r : bl->length(); + if (r < 0) { + if (movepos) + unlock_fh_pos(f); + return r; + } else + return bl->length(); } Client::C_Readahead::C_Readahead(Client *c, Fh *f) : -- 2.39.5