]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: print out errs in do_import, check EINTR
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Thu, 3 Feb 2011 12:10:58 +0000 (04:10 -0800)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Thu, 3 Feb 2011 12:10:58 +0000 (04:10 -0800)
Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
src/rbd.cc

index 0ccc76db3c515dcc7a5812385c47875217235d36..e93d1916246b097cf226facf3c9d86b597c14671 100644 (file)
@@ -15,6 +15,7 @@
 #define __STDC_FORMAT_MACROS
 #include "config.h"
 
+#include "common/errno.h"
 #include "common/common_init.h"
 #include "include/librados.hpp"
 using namespace librados;
@@ -882,13 +883,14 @@ static int do_import(pool_t pool, const char *imgname, int order, const char *pa
         uint64_t len = seg_left;
         bufferptr p(len);
         cerr << "reading " << len << " bytes at offset " << file_pos << std::endl;
-        ssize_t ret = pread(fd, p.c_str(), len, file_pos);
-        if (ret < 0) {
-          r = -errno;
-          cerr << "error reading file\n" << std::endl;
-          goto done;
-        } else {
-         len = ret;
+       {
+         ssize_t rval = TEMP_FAILURE_RETRY(::pread(fd, p.c_str(), len, file_pos));
+         if (rval < 0) {
+           r = -errno;
+           cerr << "failed to read file: " << cpp_strerror(r) << std::endl;
+           goto done;
+         }
+         len = rval;
        }
         bufferlist bl;
         bl.append(p);