From: Haomai Wang Date: Sat, 6 Dec 2014 16:11:22 +0000 (+0800) Subject: FileStore: Move ftruncate to do_sparse_copy X-Git-Tag: v0.91~54^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=09b3e77ddfe104888c151b85bcf586067fc13c1b;p=ceph.git FileStore: Move ftruncate to do_sparse_copy Signed-off-by: Haomai Wang --- diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc index 285b63dc1137..5c1e7b4ce59a 100644 --- a/src/os/FileStore.cc +++ b/src/os/FileStore.cc @@ -3100,10 +3100,6 @@ int FileStore::_clone(coll_t cid, const ghobject_t& oldoid, const ghobject_t& ne r = -errno; goto out3; } - r = ::ftruncate(**n, st.st_size); - if (r < 0) { - goto out3; - } dout(20) << "objectmap clone" << dendl; r = object_map->clone(oldoid, newoid, &spos); @@ -3266,11 +3262,26 @@ int FileStore::_do_sparse_copy_range(int from, int to, uint64_t srcoff, uint64_t } if (r >= 0) { - r = written; if (m_filestore_sloppy_crc) { int rc = backend->_crc_update_clone_range(from, to, srcoff, len, dstoff); assert(rc >= 0); } + struct stat st; + r = ::fstat(to, &st); + if (r < 0) { + r = -errno; + derr << __func__ << ": fstat error at " << to << " " << cpp_strerror(r) << dendl; + goto out; + } + if (st.st_size < (int)(dstoff + len)) { + r = ::ftruncate(to, dstoff + len); + if (r < 0) { + r = -errno; + derr << __func__ << ": ftruncate error at " << dstoff+len << " " << cpp_strerror(r) << dendl; + goto out; + } + } + r = written; } out: @@ -3359,7 +3370,6 @@ int FileStore::_clone_range(coll_t cid, const ghobject_t& oldoid, const ghobject int r; FDRef o, n; - struct stat st; r = lfn_open(cid, oldoid, false, &o); if (r < 0) { goto out2; @@ -3374,21 +3384,6 @@ int FileStore::_clone_range(coll_t cid, const ghobject_t& oldoid, const ghobject goto out3; } - r = ::fstat(**n, &st); - if (r < 0) { - r = -errno; - derr << __func__ << ": fstat error at " << **n << " "<< cpp_strerror(r) << dendl; - goto out3; - } - if (st.st_size < (int)(dstoff + len)) { - r = ::ftruncate(**n, dstoff + len); - if (r < 0) { - r = -errno; - derr << __func__ << ": ftruncate error at " << dstoff + len << ", " << cpp_strerror(r) << dendl; - goto out3; - } - } - // clone is non-idempotent; record our work. _set_replay_guard(**n, spos, &newoid);