]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os: FileStore::mkjournal: fix error handling
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Fri, 4 Feb 2011 14:22:08 +0000 (06:22 -0800)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Fri, 4 Feb 2011 14:22:08 +0000 (06:22 -0800)
Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
src/os/FileStore.cc

index 1f20f22ac452db74dc3865a8b5a625148c1ffc0c..b8d9036becbab70bef740ee99a415c16e9c3c824 100644 (file)
@@ -779,10 +779,22 @@ int FileStore::mkjournal()
   char fn[PATH_MAX];
   snprintf(fn, sizeof(fn), "%s/fsid", basedir.c_str());
   int fd = ::open(fn, O_RDONLY, 0644);
-  if (fd < 0)
-    return -errno;
-  ::read(fd, &fsid, sizeof(fsid));
-  ::close(fd);
+  if (fd < 0) {
+    int err = errno;
+    derr << "FileStore::mkjournal: open error: " << cpp_strerror(err) << dendl;
+    return -err;
+  }
+  if (TEMP_FAILURE_RETRY(::read(fd, &fsid, sizeof(fsid))) < 0) {
+    int err = errno;
+    derr << "FileStore::mkjournal: read error: " << cpp_strerror(err) << dendl;
+    TEMP_FAILURE_RETRY(::close(fd));
+    return -err;
+  }
+  if (TEMP_FAILURE_RETRY(::close(fd))) {
+    int err = errno;
+    derr << "FileStore::mkjournal: close error: " << cpp_strerror(err) << dendl;
+    return -err;
+  }
 
   int ret = 0;