]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
FileStore::_do_copy_range: read(2) might return EINTR
authorSamuel Just <sam.just@inktank.com>
Wed, 10 Apr 2013 21:55:13 +0000 (14:55 -0700)
committerSamuel Just <sam.just@inktank.com>
Fri, 19 Apr 2013 18:00:20 +0000 (11:00 -0700)
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/os/FileStore.cc

index 52e14a286c0d56a0323af30377b4c1f5b160ed4b..16ae21a700cddeaf6c96a8864485572bdb661531 100644 (file)
@@ -3194,10 +3194,14 @@ int FileStore::_do_copy_range(int from, int to, uint64_t srcoff, uint64_t len, u
     r = ::read(from, buf, l);
     dout(25) << "  read from " << pos << "~" << l << " got " << r << dendl;
     if (r < 0) {
-      r = -errno;
-      derr << "FileStore::_do_copy_range: read error at " << pos << "~" << len
-          << ", " << cpp_strerror(r) << dendl;
-      break;
+      if (errno == EINTR) {
+       continue;
+      } else {
+       r = -errno;
+       derr << "FileStore::_do_copy_range: read error at " << pos << "~" << len
+            << ", " << cpp_strerror(r) << dendl;
+       break;
+      }
     }
     if (r == 0) {
       // hrm, bad source range, wtf.