From 389ed3462f6377d48d87a0e0952061585b0ea106 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Fri, 18 Dec 2015 15:22:13 -0500 Subject: [PATCH] librbd: fix merge-diff for >2GB diff-files Fixes: #14062 Signed-off-by: Jason Dillaman (derived from commit 68125dd01349edf93cfa1af5028c2d438b5ae089) --- src/rbd.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/rbd.cc b/src/rbd.cc index 540579fbc7d4..30285ebe688a 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; -- 2.47.3