]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/filestore: fix omap_fsid_fd leak during mkfs()
authorxie xingguo <xie.xingguo@zte.com.cn>
Thu, 19 May 2016 12:15:52 +0000 (20:15 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Thu, 19 May 2016 13:11:20 +0000 (21:11 +0800)
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/os/filestore/FileStore.cc

index 71d3d638ad3408c992264c39f0efb2e0a2f96604..8506b3191c5deff845389d5b9aac6ce5a0372ae6 100644 (file)
@@ -953,27 +953,27 @@ int FileStore::mkfs()
       ret = -errno;
       derr << "mkfs: failed to truncate fsid: "
           << cpp_strerror(ret) << dendl;
-      goto close_fsid_fd;
+      goto close_omap_fsid_fd;
     }
     ret = safe_write(omap_fsid_fd, fsid_str, strlen(fsid_str));
     if (ret < 0) {
       derr << "mkfs: failed to write fsid: "
           << cpp_strerror(ret) << dendl;
-      goto close_fsid_fd;
+      goto close_omap_fsid_fd;
     }
     dout(10) << "mkfs: write success, fsid:" << fsid_str << ", ret:" << ret << dendl;
     if (::fsync(omap_fsid_fd) < 0) {
       ret = errno;
       derr << "mkfs: close failed: can't write fsid: "
           << cpp_strerror(ret) << dendl;
-      goto close_fsid_fd;
+      goto close_omap_fsid_fd;
     }
     dout(10) << "mkfs omap fsid is " << fsid << dendl;
   } else {
     if (fsid != old_omap_fsid) {
       derr << "FileStore::mkfs: " << omap_fsid_fn << " has existed omap fsid " << old_omap_fsid << " != expected osd fsid " << fsid << dendl;
       ret = -EINVAL;
-      goto close_fsid_fd;
+      goto close_omap_fsid_fd;
     }
     dout(1) << "FileStore::mkfs: omap fsid is already set to " << fsid << dendl;
   }
@@ -983,15 +983,17 @@ int FileStore::mkfs()
   // journal?
   ret = mkjournal();
   if (ret)
-    goto close_fsid_fd;
+    goto close_omap_fsid_fd;
 
   ret = write_meta("type", "filestore");
   if (ret)
-    goto close_fsid_fd;
+    goto close_omap_fsid_fd;
 
   dout(1) << "mkfs done in " << basedir << dendl;
   ret = 0;
 
+ close_omap_fsid_fd:
+  VOID_TEMP_FAILURE_RETRY(::close(omap_fsid_fd));
  close_fsid_fd:
   VOID_TEMP_FAILURE_RETRY(::close(fsid_fd));
   fsid_fd = -1;