]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
filestore: mkfs: only create snap_0 if we created current_op_seq
authorSage Weil <sage@inktank.com>
Sat, 19 May 2012 22:42:28 +0000 (15:42 -0700)
committerSage Weil <sage@inktank.com>
Wed, 23 May 2012 23:31:42 +0000 (16:31 -0700)
We only need to create snap_0 if we just created current_op_seq and this is
a brand-new dir.

Signed-off-by: Sage Weil <sage@inktank.com>
src/os/FileStore.cc

index 7602f6509e1c252abe308372ca1fa7ce9424191e..d81ddd23a9be9bdd03dd6386003a144eab016960 100644 (file)
@@ -1013,6 +1013,30 @@ int FileStore::mkfs()
       goto close_fsid_fd;
     }
     if (initial_seq == 0) {
+
+      if (btrfs_stable_commits) {
+       // create snap_0 too
+       snprintf(volargs.name, sizeof(volargs.name), COMMIT_SNAP_ITEM, 1ull);
+       volargs.fd = ::open(current_fn.c_str(), O_RDONLY);
+       assert(volargs.fd >= 0);
+       if (::ioctl(basedir_fd, BTRFS_IOC_SNAP_CREATE, (unsigned long int)&volargs)) {
+         ret = -errno;
+         if (ret != -EEXIST) {
+           derr << "mkfs: failed to create " << volargs.name << ": "
+                << cpp_strerror(ret) << dendl;
+           goto close_fsid_fd;
+         }
+       }
+       if (::fchmod(volargs.fd, 0755)) {
+         TEMP_FAILURE_RETRY(::close(volargs.fd));
+         ret = -errno;
+         derr << "mkfs: failed to chmod " << basedir << "/" << volargs.name << " to 0755: "
+              << cpp_strerror(ret) << dendl;
+         goto close_fsid_fd;
+       }
+       TEMP_FAILURE_RETRY(::close(volargs.fd));
+      }
+      
       int err = write_op_seq(fd, 1);
       if (err < 0) {
        TEMP_FAILURE_RETRY(::close(fd));  
@@ -1039,28 +1063,6 @@ int FileStore::mkfs()
     }
   }
 
-  if (btrfs_stable_commits) {
-    // create snap_0 too
-    snprintf(volargs.name, sizeof(volargs.name), COMMIT_SNAP_ITEM, 1ull);
-    volargs.fd = ::open(current_fn.c_str(), O_RDONLY);
-    assert(volargs.fd >= 0);
-    if (::ioctl(basedir_fd, BTRFS_IOC_SNAP_CREATE, (unsigned long int)&volargs)) {
-      ret = -errno;
-      derr << "mkfs: failed to create " << volargs.name << ": "
-          << cpp_strerror(ret) << dendl;
-      goto close_fsid_fd;
-    }
-
-    if (::fchmod(volargs.fd, 0755)) {
-      TEMP_FAILURE_RETRY(::close(volargs.fd));
-      ret = -errno;
-      derr << "mkfs: failed to chmod " << basedir << "/" << volargs.name << " to 0755: "
-          << cpp_strerror(ret) << dendl;
-      goto close_fsid_fd;
-    }
-    TEMP_FAILURE_RETRY(::close(volargs.fd));
-  }
-
   // journal?
   ret = mkjournal();
   if (ret)