From: Yunchuan Wen Date: Thu, 10 Dec 2015 14:13:38 +0000 (+0800) Subject: librbd: fix merge-diff for >2GB diff-files X-Git-Tag: v10.0.2~67^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F6889%2Fhead;p=ceph.git librbd: fix merge-diff for >2GB diff-files from http://tracker.ceph.com/issues/14030 Fixes: #14030 Signed-off-by: Yunchuan Wen --- diff --git a/src/tools/rbd/action/MergeDiff.cc b/src/tools/rbd/action/MergeDiff.cc index 9e08a3729f0..eb3f3a3741a 100644 --- a/src/tools/rbd/action/MergeDiff.cc +++ b/src/tools/rbd/action/MergeDiff.cc @@ -1,6 +1,10 @@ // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab +#define _LARGEFILE64_SOURCE +#include +#include + #include "tools/rbd/ArgumentTypes.h" #include "tools/rbd/Shell.h" #include "tools/rbd/Utils.h" @@ -336,7 +340,8 @@ static int do_merge_diff(const char *first, const char *second, bufferptr bp = buffer::create(delta); r = safe_read_exact(fd, bp.c_str(), delta); } else { - r = lseek(fd, delta, SEEK_CUR); + off64_t l = lseek64(fd, delta, SEEK_CUR); + r = l < 0 ? -errno : 0; } if (r < 0) { std::cerr << "rbd: failed to skip first diff data" << std::endl;