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);
}
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:
int r;
FDRef o, n;
- struct stat st;
r = lfn_open(cid, oldoid, false, &o);
if (r < 0) {
goto out2;
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);