From: xie xingguo Date: Mon, 4 Jan 2016 03:06:31 +0000 (+0800) Subject: os: fix fd leak X-Git-Tag: v10.0.3~82^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=55244c90c7ab44850fc523048f3ca56655d3426c;p=ceph.git os: fix fd leak Although currently lfn_close() is a noop, but these cases will be problematic if someday we want to do some real tidy up work. Fixes: #14192 Signed-off-by: xie xingguo --- diff --git a/src/os/filestore/FileStore.cc b/src/os/filestore/FileStore.cc index d1f0df799b27..d3fab73c4e87 100644 --- a/src/os/filestore/FileStore.cc +++ b/src/os/filestore/FileStore.cc @@ -202,6 +202,7 @@ int FileStore::lfn_truncate(coll_t cid, const ghobject_t& oid, off_t length) int rc = backend->_crc_update_truncate(**fd, length); assert(rc >= 0); } + lfn_close(fd); assert(!m_filestore_fail_eio || r != -EIO); return r; } @@ -3136,12 +3137,14 @@ int FileStore::fiemap(coll_t cid, const ghobject_t& oid, r = _do_fiemap(**fd, offset, len, &exomap); } -done: + lfn_close(fd); + if (r >= 0) { - lfn_close(fd); ::encode(exomap, bl); } +done: + dout(10) << "fiemap " << cid << "/" << oid << " " << offset << "~" << len << " = " << r << " num_extents=" << exomap.size() << " " << exomap << dendl; assert(!m_filestore_fail_eio || r != -EIO); tracepoint(objectstore, fiemap_exit, r); @@ -4104,6 +4107,8 @@ int FileStore::getattrs(coll_t cid, const ghobject_t& oid, map spill_out = false; r = _fgetattrs(**fd, aset); + lfn_close(fd); + fd = FDRef(); // defensive if (r < 0) { goto out; } @@ -5145,10 +5150,10 @@ int FileStore::_collection_move_rename(coll_t oldcid, const ghobject_t& oldoid, r = lfn_open(c, o, 0, &fd); // close guard on object so we don't do this again - if (r == 0) + if (r == 0) { _close_replay_guard(**fd, spos); - - lfn_close(fd); + lfn_close(fd); + } } dout(10) << __func__ << " " << c << "/" << o << " from " << oldcid << "/" << oldoid