From: Jason Dillaman Date: Fri, 18 Dec 2015 20:22:13 +0000 (-0500) Subject: librbd: fix merge-diff for >2GB diff-files X-Git-Tag: v9.2.1~3^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=389ed3462f6377d48d87a0e0952061585b0ea106;p=ceph.git librbd: fix merge-diff for >2GB diff-files Fixes: #14062 Signed-off-by: Jason Dillaman (derived from commit 68125dd01349edf93cfa1af5028c2d438b5ae089) --- diff --git a/src/rbd.cc b/src/rbd.cc index 540579fbc7d4a..30285ebe688ab 100755 --- a/src/rbd.cc +++ b/src/rbd.cc @@ -8,6 +8,7 @@ * LGPL2. See file COPYING. * */ +#define _LARGEFILE64_SOURCE #include "include/int_types.h" #include "mon/MonClient.h" @@ -43,6 +44,7 @@ #include #include #include +#include #include #include "include/memory.h" #include @@ -2206,7 +2208,8 @@ static int do_merge_diff(const char *first, const char *second, const char *path 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) { cerr << "rbd: failed to skip first diff data" << std::endl;